diff options
author | Travis Oliphant <oliphant@enthought.com> | 2006-01-04 17:26:31 +0000 |
---|---|---|
committer | Travis Oliphant <oliphant@enthought.com> | 2006-01-04 17:26:31 +0000 |
commit | 8e2654541c6eae0f308908f501cccbc86b2f9101 (patch) | |
tree | bfcfe3b282c8fb659832bf86a841ce76852094ad /scipy/base/numeric.py | |
parent | ddaed649c23bbd0ad36cdafdfe9cd92397ce69e3 (diff) | |
download | numpy-8e2654541c6eae0f308908f501cccbc86b2f9101.tar.gz |
Moved scipy directory to numpy
Diffstat (limited to 'scipy/base/numeric.py')
-rw-r--r-- | scipy/base/numeric.py | 428 |
1 files changed, 0 insertions, 428 deletions
diff --git a/scipy/base/numeric.py b/scipy/base/numeric.py deleted file mode 100644 index 03a2e520f..000000000 --- a/scipy/base/numeric.py +++ /dev/null @@ -1,428 +0,0 @@ -__all__ = ['newaxis', 'ndarray', 'bigndarray', 'flatiter', 'ufunc', - 'arange', 'array', 'zeros', 'empty', 'broadcast', 'dtypedescr', - 'fromstring', 'fromfile', 'frombuffer','newbuffer','getbuffer', - 'where', 'concatenate', 'fastCopyAndTranspose', 'lexsort', - 'register_dtype', 'set_numeric_ops', 'can_cast', - 'asarray', 'asanyarray', 'isfortran', 'zeros_like', 'empty_like', - 'correlate', 'convolve', 'inner', 'dot', 'outer', 'vdot', - 'alterdot', 'restoredot', 'cross', - 'array2string', 'get_printoptions', 'set_printoptions', - 'array_repr', 'array_str', 'set_string_function', - 'little_endian', - 'indices', 'fromfunction', - 'load', 'loads', - 'ones', 'identity', 'allclose', - 'seterr', 'geterr', 'setbufsize', 'getbufsize', - 'seterrcall', 'geterrcall', - 'Inf', 'inf', 'infty', 'Infinity', - 'nan', 'NaN'] - -import sys -import multiarray -import umath -from umath import * -import numerictypes -from numerictypes import * - -def extend_all(module): - adict = {} - for a in __all__: - adict[a] = 1 - try: - mall = getattr(module, '__all__') - except AttributeError: - mall = [k for k in module.__dict__.keys() if not k.startswith('_')] - for a in mall: - if a not in adict: - __all__.append(a) - -extend_all(umath) -extend_all(numerictypes) - -newaxis = None - -ndarray = multiarray.ndarray -bigndarray = multiarray.bigndarray -flatiter = multiarray.flatiter -broadcast = multiarray.broadcast -dtypedescr=multiarray.dtypedescr -ufunc = type(sin) - -arange = multiarray.arange -array = multiarray.array -zeros = multiarray.zeros -empty = multiarray.empty -fromstring = multiarray.fromstring -fromfile = multiarray.fromfile -frombuffer = multiarray.frombuffer -newbuffer = multiarray.newbuffer -getbuffer = multiarray.getbuffer -where = multiarray.where -concatenate = multiarray.concatenate -fastCopyAndTranspose = multiarray._fastCopyAndTranspose -register_dtype = multiarray.register_dtype -set_numeric_ops = multiarray.set_numeric_ops -can_cast = multiarray.can_cast -lexsort = multiarray.lexsort - - -def asarray(a, dtype=None, fortran=False): - """returns a as an array. Unlike array(), - no copy is performed if a is already an array. Subclasses are converted - to base class ndarray. - """ - return array(a, dtype, copy=False, fortran=fortran) - -def asanyarray(a, dtype=None, copy=False, fortran=False): - """will pass subclasses through... - """ - return array(a, dtype, copy=False, fortran=fortran, subok=1) - -def isfortran(a): - return a.flags['FNC'] - -# from Fernando Perez's IPython -def zeros_like(a): - """Return an array of zeros of the shape and typecode of a. - - If you don't explicitly need the array to be zeroed, you should instead - use empty_like(), which is faster as it only allocates memory.""" - a = asanyarray(a) - return a.__array_wrap__(zeros(a.shape, a.dtype, a.flags['FNC'])) - -def empty_like(a): - """Return an empty (uninitialized) array of the shape and typecode of a. - - Note that this does NOT initialize the returned array. If you require - your array to be initialized, you should use zeros_like(). - - """ - a = asanyarray(a) - return a.__array_wrap__(empty(a.shape, a.dtype, a.flags['FNC'])) - -# end Fernando's utilities - -_mode_from_name_dict = {'v': 0, - 's' : 1, - 'f' : 2} - -def _mode_from_name(mode): - if isinstance(mode, type("")): - return _mode_from_name_dict[mode.lower()[0]] - return mode - -def correlate(a,v,mode='valid'): - mode = _mode_from_name(mode) - return multiarray.correlate(a,v,mode) - - -def convolve(a,v,mode='full'): - """Returns the discrete, linear convolution of 1-D - sequences a and v; mode can be 0 (valid), 1 (same), or 2 (full) - to specify size of the resulting sequence. - """ - if (len(v) > len(a)): - a, v = v, a - mode = _mode_from_name(mode) - return multiarray.correlate(a,asarray(v)[::-1],mode) - - -inner = multiarray.inner -dot = multiarray.dot - -def outer(a,b): - """outer(a,b) returns the outer product of two vectors. - result(i,j) = a(i)*b(j) when a and b are vectors - Will accept any arguments that can be made into vectors. - """ - a = asarray(a) - b = asarray(b) - return a.ravel()[:,newaxis]*b.ravel()[newaxis,:] - -def vdot(a, b): - """Returns the dot product of 2 vectors (or anything that can be made into - a vector). NB: this is not the same as `dot`, as it takes the conjugate - of its first argument if complex and always returns a scalar.""" - return dot(asarray(a).ravel().conj(), asarray(b).ravel()) - -# try to import blas optimized dot if available -try: - # importing this changes the dot function for basic 4 types - # to blas-optimized versions. - from _dotblas import dot, vdot, inner, alterdot, restoredot -except ImportError: - def alterdot(): - pass - def restoredot(): - pass - - -def _move_axis_to_0(a, axis): - if axis == 0: - return a - n = a.ndim - if axis < 0: - axis += n - axes = range(1, axis+1) + [0,] + range(axis+1, n) - return a.transpose(axes) - -def cross(a, b, axisa=-1, axisb=-1, axisc=-1): - """Return the cross product of two (arrays of) vectors. - - The cross product is performed over the last axis of a and b by default, - and can handle axes with dimensions 2 and 3. For a dimension of 2, - the z-component of the equivalent three-dimensional cross product is - returned. - """ - a = _move_axis_to_0(asarray(a), axisa) - b = _move_axis_to_0(asarray(b), axisb) - msg = "incompatible dimensions for cross product\n"\ - "(dimension must be 2 or 3)" - if (a.shape[0] not in [2,3]) or (b.shape[0] not in [2,3]): - raise ValueError(msg) - if a.shape[0] == 2: - if (b.shape[0] == 2): - cp = a[0]*b[1] - a[1]*b[0] - if cp.ndim == 0: - return cp - else: - return cp.swapaxes(0,axisc) - else: - x = a[1]*b[2] - y = -a[0]*b[2] - z = a[0]*b[1] - a[1]*b[0] - elif a.shape[0] == 3: - if (b.shape[0] == 3): - x = a[1]*b[2] - a[2]*b[1] - y = a[2]*b[0] - a[0]*b[2] - z = a[0]*b[1] - a[1]*b[0] - else: - x = -a[2]*b[1] - y = a[2]*b[0] - z = a[0]*b[1] - a[1]*b[0] - cp = array([x,y,z]) - if cp.ndim == 1: - return cp - else: - return cp.swapaxes(0,axisc) - - -#Use numarray's printing function -from arrayprint import array2string, get_printoptions, set_printoptions - -_typelessdata = [int_, float_, complex_] -if issubclass(intc, int): - _typelessdata.append(intc) - -if issubclass(longlong, int): - _typelessdata.append(longlong) - -def array_repr(arr, max_line_width=None, precision=None, suppress_small=None): - if arr.size > 0 or arr.shape==(0,): - lst = array2string(arr, max_line_width, precision, suppress_small, - ', ', "array(") - else: # show zero-length shape unless it is (0,) - lst = "[], shape=%s" % (repr(arr.shape),) - typeless = arr.dtype in _typelessdata - - if arr.__class__ is not ndarray: - cName= arr.__class__.__name__ - else: - cName = "array" - if typeless and arr.size: - return cName + "(%s)" % lst - else: - typename=arr.dtype.__name__[:-8] - if issubclass(arr.dtype, flexible): - if typename not in ['unicode','string','void']: - typename = arr.dtype.__name__ - typename = "(%s,%d)" % (typename, arr.itemsize) - return cName + "(%s, dtype=%s)" % (lst, typename) - -def array_str(a, max_line_width=None, precision=None, suppress_small=None): - return array2string(a, max_line_width, precision, suppress_small, ' ', "") - -set_string_function = multiarray.set_string_function -set_string_function(array_str, 0) -set_string_function(array_repr, 1) - - -little_endian = (sys.byteorder == 'little') - -def indices(dimensions, dtype=int_): - """indices(dimensions,dtype=int_) returns an array representing a grid - of indices with row-only, and column-only variation. - """ - tmp = ones(dimensions, dtype) - lst = [] - for i in range(len(dimensions)): - lst.append( add.accumulate(tmp, i, )-1 ) - return array(lst) - -def fromfunction(function, dimensions, **kwargs): - """fromfunction(function, dimensions) returns an array constructed by - calling function on a tuple of number grids. The function should - accept as many arguments as there are dimensions which is a list of - numbers indicating the length of the desired output for each axis. - - The function can also accept keyword arguments which will be - passed in as well. - """ - args = indices(dimensions) - return function(*args,**kwargs) - - -from cPickle import load, loads -_cload = load -_file = file - -def load(file): - if isinstance(file, type("")): - file = _file(file,"rb") - return _cload(file) - -# These are all essentially abbreviations -# These might wind up in a special abbreviations module - -def ones(shape, dtype=int_, fortran=False): - """ones(shape, dtype=int_) returns an array of the given - dimensions which is initialized to all ones. - """ - # This appears to be slower... - #a = empty(shape, dtype, fortran) - #a.fill(1) - a = zeros(shape, dtype, fortran) - a+=1 - return a - -def identity(n,dtype=int_): - """identity(n) returns the identity matrix of shape n x n. - """ - a = array([1]+n*[0],dtype=dtype) - b = empty((n,n),dtype=dtype) - b.flat = a - return b - -def allclose (a, b, rtol=1.e-5, atol=1.e-8): - """ allclose(a,b,rtol=1.e-5,atol=1.e-8) - Returns true if all components of a and b are equal - subject to given tolerances. - The relative error rtol must be positive and << 1.0 - The absolute error atol comes into play for those elements - of y that are very small or zero; it says how small x must be also. - """ - x = array(a, copy=False) - y = array(b, copy=False) - d = less(absolute(x-y), atol + rtol * absolute(y)) - return d.ravel().all() - -def _setpyvals(lst, frame, where=0): - if not isinstance(lst, list) or len(lst) != 3: - raise ValueError, "Invalid pyvalues (length 3 list needed)." - - try: - wh = where.lower()[0] - except (AttributeError, TypeError, IndexError): - wh = None - - if where==0 or wh == 'l': - frame.f_locals[UFUNC_PYVALS_NAME] = lst - elif where == 1 or wh == 'g': - frame.f_globals[UFUNC_PYVALS_NAME] = lst - elif where == 2 or wh == 'b': - frame.f_builtins[UFUNC_PYVALS_NAME] = lst - - umath.update_use_defaults() - return - -def _getpyvals(frame): - try: - return frame.f_locals[UFUNC_PYVALS_NAME] - except KeyError: - try: - return frame.f_globals[UFUNC_PYVALS_NAME] - except KeyError: - try: - return frame.f_builtins[UFUNC_PYVALS_NAME] - except KeyError: - return [UFUNC_BUFSIZE_DEFAULT, ERR_DEFAULT, None] - -_errdict = {"ignore":ERR_IGNORE, - "warn":ERR_WARN, - "raise":ERR_RAISE, - "call":ERR_CALL} - -_errdict_rev = {} -for key in _errdict.keys(): - _errdict_rev[_errdict[key]] = key -del key - -def seterr(divide="ignore", over="ignore", under="ignore", - invalid="ignore", where=0): - maskvalue = ((_errdict[divide] << SHIFT_DIVIDEBYZERO) + - (_errdict[over] << SHIFT_OVERFLOW ) + - (_errdict[under] << SHIFT_UNDERFLOW) + - (_errdict[invalid] << SHIFT_INVALID)) - - frame = sys._getframe().f_back - pyvals = _getpyvals(frame) - pyvals[1] = maskvalue - _setpyvals(pyvals, frame, where) - -def geterr(): - frame = sys._getframe().f_back - maskvalue = _getpyvals(frame)[1] - - mask = 3 - res = {} - val = (maskvalue >> SHIFT_DIVIDEBYZERO) & mask - res['divide'] = _errdict_rev[val] - val = (maskvalue >> SHIFT_OVERFLOW) & mask - res['over'] = _errdict_rev[val] - val = (maskvalue >> SHIFT_UNDERFLOW) & mask - res['under'] = _errdict_rev[val] - val = (maskvalue >> SHIFT_INVALID) & mask - res['invalid'] = _errdict_rev[val] - return res - -def setbufsize(size, where=0): - if size > 10e6: - raise ValueError, "Very big buffers.. %s" % size - - frame = sys._getframe().f_back - pyvals = _getpyvals(frame) - pyvals[0] = size - _setpyvals(pyvals, frame, where) - -def getbufsize(): - frame = sys._getframe().f_back - return _getpyvals(frame)[0] - -def seterrcall(func, where=0): - if not callable(func): - raise ValueError, "Only callable can be used as callback" - frame = sys._getframe().f_back - pyvals = _getpyvals(frame) - pyvals[2] = func - _setpyvals(pyvals, frame, where) - -def geterrcall(): - frame = sys._getframe().f_back - return _getpyvals(frame)[2] - -def _setdef(): - frame = sys._getframe() - defval = [UFUNC_BUFSIZE_DEFAULT, ERR_DEFAULT, None] - frame.f_globals[UFUNC_PYVALS_NAME] = defval - frame.f_builtins[UFUNC_PYVALS_NAME] = defval - umath.update_use_defaults() - -# set the default values -_setdef() - -Inf = inf = infty = Infinity = PINF -nan = NaN = NAN - -import oldnumeric -from oldnumeric import * -extend_all(oldnumeric) |