From numpy-svn at scipy.org Tue Sep 4 12:28:11 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Tue, 4 Sep 2007 11:28:11 -0500 (CDT) Subject: [Numpy-svn] r4026 - trunk/numpy/core Message-ID: <20070904162811.6608139C0E9@new.scipy.org> Author: oliphant Date: 2007-09-04 11:28:04 -0500 (Tue, 04 Sep 2007) New Revision: 4026 Modified: trunk/numpy/core/numerictypes.py Log: Add longcomplex and singlecomplex to the type namespace. Modified: trunk/numpy/core/numerictypes.py =================================================================== --- trunk/numpy/core/numerictypes.py 2007-08-31 11:28:36 UTC (rev 4025) +++ trunk/numpy/core/numerictypes.py 2007-09-04 16:28:04 UTC (rev 4026) @@ -61,9 +61,9 @@ | | float_ (double) | | longfloat | \-> complexfloating (complexxx) - | csingle + | csingle (singlecomplex) | complex_ (cfloat, cdouble) - | clongfloat + | clongfloat (longcomplex) +-> flexible | character | str_ (string_) @@ -250,6 +250,7 @@ ('int0', 'intp'), ('uint0', 'uintp'), ('single', 'float'), + ('singlecomplex', 'cfloat'), ('csingle', 'cfloat'), ('float_', 'double'), ('intc', 'int'), @@ -259,6 +260,7 @@ ('cfloat', 'cdouble'), ('longfloat', 'longdouble'), ('clongfloat', 'clongdouble'), + ('longcomplex', 'clongdouble'), ('bool_', 'bool'), ('unicode_', 'unicode'), ('str_', 'string'), From numpy-svn at scipy.org Sun Sep 9 00:44:16 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Sat, 8 Sep 2007 23:44:16 -0500 (CDT) Subject: [Numpy-svn] r4027 - in trunk/numpy: core random/mtrand Message-ID: <20070909044416.F3F0439C0FE@new.scipy.org> Author: oliphant Date: 2007-09-08 23:44:11 -0500 (Sat, 08 Sep 2007) New Revision: 4027 Modified: trunk/numpy/core/numerictypes.py trunk/numpy/random/mtrand/distributions.c Log: Fix Von Mises random number generation algorithm to match that of Python and R. Modified: trunk/numpy/core/numerictypes.py =================================================================== --- trunk/numpy/core/numerictypes.py 2007-09-04 16:28:04 UTC (rev 4026) +++ trunk/numpy/core/numerictypes.py 2007-09-09 04:44:11 UTC (rev 4027) @@ -250,8 +250,8 @@ ('int0', 'intp'), ('uint0', 'uintp'), ('single', 'float'), + ('csingle', 'cfloat'), ('singlecomplex', 'cfloat'), - ('csingle', 'cfloat'), ('float_', 'double'), ('intc', 'int'), ('uintc', 'uint'), Modified: trunk/numpy/random/mtrand/distributions.c =================================================================== --- trunk/numpy/random/mtrand/distributions.c 2007-09-04 16:28:04 UTC (rev 4026) +++ trunk/numpy/random/mtrand/distributions.c 2007-09-09 04:44:11 UTC (rev 4027) @@ -549,6 +549,12 @@ return X; } +/* Uses the rejection algorithm compared against the wrapped Cauchy + distribution suggested by Best and Fisher and documented in + Chapter 9 of Luc's Non-Uniform Random Variate Generation. + http://cg.scs.carleton.ca/~luc/rnbookindex.html + (but corrected to match the algorithm in R and Python) +*/ double rk_vonmises(rk_state *state, double mu, double kappa) { double r, rho, s; @@ -567,32 +573,27 @@ while (1) { - U = 2*rk_double(state) - 1; - V = 2*rk_double(state) - 1; + U = rk_double(state); Z = cos(M_PI*U); W = (1 + s*Z)/(s + Z); Y = kappa * (s - W); + V = rk_double(state); if ((Y*(2-Y) - V >= 0) || (log(Y/V)+1 - Y >= 0)) { break; } } - if (U < 0) + U = rk_double(state); + + result = acos(W); + if (U < 0.5) { - result = acos(W); + result = -result; } - else - { - result = -acos(W); - } - result += mu + M_PI; + result += mu; mod = fmod(result, 2*M_PI); - if (mod && (mod < 0)) - { - mod += 2*M_PI; - } - return mod - M_PI; + return mod; } } From numpy-svn at scipy.org Mon Sep 10 16:23:28 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Mon, 10 Sep 2007 15:23:28 -0500 (CDT) Subject: [Numpy-svn] r4028 - trunk/numpy/distutils/fcompiler Message-ID: <20070910202328.1B37239C33A@new.scipy.org> Author: cookedm Date: 2007-09-10 15:23:25 -0500 (Mon, 10 Sep 2007) New Revision: 4028 Modified: trunk/numpy/distutils/fcompiler/gnu.py Log: Add support for universal GCC Fortran compilers on OS X (#571) Modified: trunk/numpy/distutils/fcompiler/gnu.py =================================================================== --- trunk/numpy/distutils/fcompiler/gnu.py 2007-09-09 04:44:11 UTC (rev 4027) +++ trunk/numpy/distutils/fcompiler/gnu.py 2007-09-10 20:23:25 UTC (rev 4028) @@ -317,6 +317,51 @@ g2c = 'gfortran' + # Note that this is here instead of GnuFCompiler as gcc < 4 uses a + # different output format (which isn't as useful) than gcc >= 4, + # and we don't have to worry about g77 being universal (as it can't be). + def target_architecture(self, extra_opts=()): + """Return the architecture that the compiler will build for. + This is most useful for detecting universal compilers in OS X.""" + extra_opts = list(extra_opts) + status, output = exec_command(self.compiler_f90 + ['-v'] + extra_opts, + use_tee=False) + if status == 0: + m = re.match(r'(?m)^Target: (.*)$', output) + if m: + return m.group(1) + return None + + def is_universal_compiler(self): + """Return True if this compiler can compile universal binaries + (for OS X). + + Currently only checks for i686 and powerpc architectures (no 64-bit + support yet). + """ + if sys.platform != 'darwin': + return False + i686_arch = self.target_architecture(extra_opts=['-arch', 'i686']) + if not i686_arch or not i686_arch.startswith('i686-'): + return False + ppc_arch = self.target_architecture(extra_opts=['-arch', 'ppc']) + if not ppc_arch or not ppc_arch.startswith('powerpc-'): + return False + return True + + def _add_arches_for_universal_build(self, flags): + if self.is_universal_compiler(): + flags[:0] = ['-arch', 'i686', '-arch', 'ppc'] + return flags + + def get_flags(self): + flags = GnuFCompiler.get_flags(self) + return self._add_arches_for_universal_build(flags) + + def get_flags_linker_so(self): + flags = GnuFCompiler.get_flags_linker_so(self) + return self._add_arches_for_universal_build(flags) + def get_libraries(self): opt = GnuFCompiler.get_libraries(self) if sys.platform == 'darwin': From numpy-svn at scipy.org Thu Sep 13 01:34:29 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Thu, 13 Sep 2007 00:34:29 -0500 (CDT) Subject: [Numpy-svn] r4029 - trunk/numpy/core Message-ID: <20070913053429.34EDD39C13A@new.scipy.org> Author: charris Date: 2007-09-13 00:34:26 -0500 (Thu, 13 Sep 2007) New Revision: 4029 Modified: trunk/numpy/core/fromnumeric.py Log: Do more documentation formating. Rename some variables for consistency. Modified: trunk/numpy/core/fromnumeric.py =================================================================== --- trunk/numpy/core/fromnumeric.py 2007-09-10 20:23:25 UTC (rev 4028) +++ trunk/numpy/core/fromnumeric.py 2007-09-13 05:34:26 UTC (rev 4029) @@ -43,36 +43,42 @@ def take(a, indices, axis=None, out=None, mode='raise'): - """Return an array with values pulled from the given array at the given - indices. + """Return an array formed from the elements of a at the given indices. This function does the same thing as "fancy" indexing; however, it can be easier to use if you need to specify a given axis. - :Parameters: - - `a` : array - The source array - - `indices` : int array - The indices of the values to extract. - - `axis` : None or int, optional (default=None) - The axis over which to select values. None signifies that the - operation should be performed over the flattened array. - - `out` : array, optional - If provided, the result will be inserted into this array. It should - be of the appropriate shape and dtype. - - `mode` : one of 'raise', 'wrap', or 'clip', optional - (default='raise') - Specifies how out-of-bounds indices will behave. - - 'raise' : raise an error - - 'wrap' : wrap around - - 'clip' : clip to the range + *Parameters*: - :Returns: - - `subarray` : array + a : array + The source array - :See also: - - numpy.ndarray.take() : equivalent method + indices : int array + The indices of the values to extract. + axis : {None, int}, optional + The axis over which to select values. None signifies that the + operation should be performed over the flattened array. + + out : {None, array}, optional + If provided, the result will be inserted into this array. It should + be of the appropriate shape and dtype. + + mode : {'raise', 'wrap', 'clip'}, optional + Specifies how out-of-bounds indices will behave. + 'raise' -- raise an error + 'wrap' -- wrap around + 'clip' -- clip to the range + + *Returns*: + + subarray : array + The returned array has the same type as a. + + *See Also*: + + `ndarray.take` : equivalent method + """ try: take = a.take @@ -83,26 +89,31 @@ # not deprecated --- copy if necessary, view otherwise def reshape(a, newshape, order='C'): - """Return an array that uses the data of the given array, but with a new - shape. + """Returns an array containing the data of a, but with a new shape. - :Parameters: - - `a` : array - - `newshape` : shape tuple or int - The new shape should be compatible with the original shape. If an - integer, then the result will be a 1D array of that length. - - `order` : 'C' or 'FORTRAN', optional (default='C') - Whether the array data should be viewed as in C (row-major) order or - FORTRAN (column-major) order. + *Parameters*: - :Returns: - - `reshaped_array` : array - This will be a new view object if possible; otherwise, it will - return a copy. + a : array + Array to be reshaped. - :SeeAlso: - - numpy.ndarray.reshape() : Equivalent method. + newshape : shape tuple or int + The new shape should be compatible with the original shape. If an + integer, then the result will be a 1D array of that length. + order : {'C', 'FORTRAN'}, optional + Determines whether the array data should be viewed as in C + (row-major) order or FORTRAN (column-major) order. + + *Returns*: + + reshaped_array : array + This will be a new view object if possible; otherwise, it will + return a copy. + + *See Also*: + + `numpy.ndarray.reshape` : Equivalent method. + """ try: reshape = a.reshape @@ -114,45 +125,50 @@ def choose(a, choices, out=None, mode='raise'): """Use an index array to construct a new array from a set of choices. - Given an array of integers in {0, 1, ..., n-1} and a set of n choice - arrays, this function will create a new array that merges each of the - choice arrays. Where a value in `a` is i, then the new array will have - the value that choices[i] contains in the same place. + Given an array of integers in {0, 1, ..., n-1} and a set of n choice arrays, + this function will create a new array that merges each of the choice arrays. + Where a value in `a` is i, then the new array will have the value that + choices[i] contains in the same place. - :Parameters: - - `a` : int array - This array must contain integers in [0, n-1], where n is the number - of choices. - - `choices` : sequence of arrays - Each of the choice arrays should have the same shape as the index - array. - - `out` : array, optional - If provided, the result will be inserted into this array. It should - be of the appropriate shape and dtype - - `mode` : one of 'raise', 'wrap', or 'clip', optional (default='raise') - Specifies how out-of-bounds indices will behave. - - 'raise' : raise an error - - 'wrap' : wrap around - - 'clip' : clip to the range + *Parameters*: - :Returns: - - `merged_array` : array + a : int array + This array must contain integers in [0, n-1], where n is the number + of choices. - :SeeAlso: - - numpy.ndarray.choose() : equivalent method + choices : sequence of arrays + Each of the choice arrays should have the same shape as the index + array. - Examples - --------- + out : array, optional + If provided, the result will be inserted into this array. It should + be of the appropriate shape and dtype - >>> choices = [[0, 1, 2, 3], [10, 11, 12, 13], - ... [20, 21, 22, 23], [30, 31, 32, 33]] - >>> choose([2, 3, 1, 0], choices) - array([20, 31, 12, 3]) - >>> choose([2, 4, 1, 0], choices, mode='clip') - array([20, 31, 12, 3]) - >>> choose([2, 4, 1, 0], choices, mode='wrap') - array([20, 1, 12, 3]) + mode : {'raise', 'wrap', 'clip'}, optional + Specifies how out-of-bounds indices will behave. + 'raise' : raise an error + 'wrap' : wrap around + 'clip' : clip to the range + *Returns*: + + merged_array : array + + *See Also*: + + `numpy.ndarray.choose` : equivalent method + + *Examples* + + >>> choices = [[0, 1, 2, 3], [10, 11, 12, 13], + ... [20, 21, 22, 23], [30, 31, 32, 33]] + >>> choose([2, 3, 1, 0], choices) + array([20, 31, 12, 3]) + >>> choose([2, 4, 1, 0], choices, mode='clip') + array([20, 31, 12, 3]) + >>> choose([2, 4, 1, 0], choices, mode='wrap') + array([20, 1, 12, 3]) + """ try: choose = a.choose @@ -164,31 +180,35 @@ def repeat(a, repeats, axis=None): """Repeat elements of an array. - :Parameters: - - `a` : array - - `repeats` : int or int array - The number of repetitions for each element. If a plain integer, then - it is applied to all elements. If an array, it needs to be of the - same length as the chosen axis. - - `axis` : None or int, optional (default=None) - The axis along which to repeat values. If None, then this function - will operated on the flattened array `a` and return a similarly flat - result. + *Parameters*: - :Returns: - - `repeated_array` : array + a : array - :SeeAlso: - - numpy.ndarray.repeat() : equivalent method + repeats : int or int array + The number of repetitions for each element. If a plain integer, then + it is applied to all elements. If an array, it needs to be of the + same length as the chosen axis. - Examples - -------- + axis : {None, int}, optional + The axis along which to repeat values. If None, then this function + will operated on the flattened array `a` and return a similarly flat + result. - >>> repeat([0, 1, 2], 2) - array([0, 0, 1, 1, 2, 2]) - >>> repeat([0, 1, 2], [2, 3, 4]) - array([0, 0, 1, 1, 1, 2, 2, 2, 2]) + *Returns*: + repeated_array : array + + *See Also*: + + `numpy.ndarray.repeat` : equivalent method + + *Examples* + + >>> repeat([0, 1, 2], 2) + array([0, 0, 1, 1, 2, 2]) + >>> repeat([0, 1, 2], [2, 3, 4]) + array([0, 0, 1, 1, 1, 2, 2, 2, 2]) + """ try: repeat = a.repeat @@ -198,9 +218,10 @@ def put (a, ind, v, mode='raise'): - """Set a[n] = v[n] for all n in ind. If v is shorter than mask it - will be repeated as necessary. In particular v can be a scalar or - length 1 array. The routine put is the equivalent of the + """Set a[n] = v[n] for all n in ind. + + If v is shorter than mask it will be repeated as necessary. In particular v + can be a scalar or length 1 array. The routine put is the equivalent of the following (although the loop is in C for speed): ind = array(indices, copy=False) @@ -216,6 +237,8 @@ def swapaxes(a, axis1, axis2): """Return array a with axis1 and axis2 interchanged. + Blah, Blah. + """ try: swapaxes = a.swapaxes @@ -225,10 +248,11 @@ def transpose(a, axes=None): - """Return a view of the array with dimensions permuted according - to axes. If axes is None (default) returns array with dimensions - reversed. + """Return a view of the array with dimensions permuted. + Permutes axis according to list axes. If axes is None (default) returns + array with dimensions reversed. + """ try: transpose = a.transpose @@ -240,57 +264,61 @@ def sort(a, axis=-1, kind='quicksort', order=None): """Return copy of 'a' sorted along the given axis. - :Description: - Perform an inplace sort along the given axis using the algorithm specified by the kind keyword. - :Parameters: + *Parameters*: + a : array Array to be sorted. - axis : integer + + axis : {None, int} optional Axis along which to sort. None indicates that the flattened - array should be used. Default is -1. - kind : string - Sorting algorithm to use. Possible values are 'quicksort', - 'mergesort', or 'heapsort'. Default is 'quicksort'. - order : list type or None - When a is an array with fields defined, this argument - specifies which fields to compare first, second, etc. Not - all fields need be specified. + array should be used. - :Returns: + kind : {'quicksort', 'mergesort', 'heapsort'}, optional + Sorting algorithm to use. + + order : {None, list type}, optional + When a is an array with fields defined, this argument specifies + which fields to compare first, second, etc. Not all fields need be + specified. + + *Returns*: + sorted_array : array of same type as a - :SeeAlso: - - argsort : Indirect sort. - - lexsort : Indirect stable sort on multiple keys. - - searchsorted : Find keys in sorted array. + *See Also*: - Notes - ----- + `argsort` : Indirect sort. - The various sorts are characterized by average speed, worst case - performance, need for work space, and whether they are stable. A - stable sort keeps items with the same key in the same relative - order. The three available algorithms have the following - properties: + `lexsort` : Indirect stable sort on multiple keys. - +-----------+-------+-------------+------------+-------+ - | kind | speed | worst case | work space | stable| - +===========+=======+=============+============+=======+ - | quicksort | 1 | O(n^2) | 0 | no | - +-----------+-------+-------------+------------+-------+ - | mergesort | 2 | O(n*log(n)) | ~n/2 | yes | - +-----------+-------+-------------+------------+-------+ - | heapsort | 3 | O(n*log(n)) | 0 | no | - +-----------+-------+-------------+------------+-------+ + `searchsorted` : Find keys in sorted array. - All the sort algorithms make temporary copies of the data when - the sort is not along the last axis. Consequently, sorts along - the last axis are faster and use less space than sorts along - other axis. + *Notes* + The various sorts are characterized by average speed, worst case + performance, need for work space, and whether they are stable. A + stable sort keeps items with the same key in the same relative + order. The three available algorithms have the following + properties: + + +-----------+-------+-------------+------------+-------+ + | kind | speed | worst case | work space | stable| + +===========+=======+=============+============+=======+ + | quicksort | 1 | O(n^2) | 0 | no | + +-----------+-------+-------------+------------+-------+ + | mergesort | 2 | O(n*log(n)) | ~n/2 | yes | + +-----------+-------+-------------+------------+-------+ + | heapsort | 3 | O(n*log(n)) | 0 | no | + +-----------+-------+-------------+------------+-------+ + + All the sort algorithms make temporary copies of the data when + the sort is not along the last axis. Consequently, sorts along + the last axis are faster and use less space than sorts along + other axis. + """ if axis is None: a = asanyarray(a).flatten() @@ -304,56 +332,61 @@ def argsort(a, axis=-1, kind='quicksort', order=None): """Returns array of indices that index 'a' in sorted order. - Perform an indirect sort along the given axis using the algorithm - specified by the kind keyword. It returns an array of indices of the - same shape as a that index data along the given axis in sorted order. + Perform an indirect sort along the given axis using the algorithm specified + by the kind keyword. It returns an array of indices of the same shape as a + that index data along the given axis in sorted order. - :Parameters: + *Parameters*: + a : array - Values that the returned indices should sort. - axis : integer - Axis to be indirectly sorted. None indicates that the - flattened array should be used. Default is -1. - kind : string - Sorting algorithm to use. Possible values are 'quicksort', - 'mergesort', or 'heapsort'. Default is 'quicksort'. - order : list type or None - When a is an array with fields defined, this argument - specifies which fields to compare first, second, etc. Not - all fields need be specified. + Array to be sorted. - :Returns: + axis : {None, int} optional + Axis along which to sort. None indicates that the flattened + array should be used. + + kind : {'quicksort', 'mergesort', 'heapsort'}, optional + Sorting algorithm to use. + + order : {None, list type}, optional + When a is an array with fields defined, this argument specifies + which fields to compare first, second, etc. Not all fields need be + specified. + + *Returns*: + indices : integer array Array of indices that sort 'a' along the specified axis. - :SeeAlso: - - lexsort : Indirect stable sort with multiple keys. - - sort : Inplace sort. + *See Also*: - Notes - ----- + `lexsort` : Indirect stable sort with multiple keys. - The various sorts are characterized by average speed, worst case - performance, need for work space, and whether they are stable. A - stable sort keeps items with the same key in the same relative - order. The three available algorithms have the following - properties: + `sort` : Inplace sort. - +-----------+-------+-------------+------------+-------+ - | kind | speed | worst case | work space | stable| - +===========+=======+=============+============+=======+ - | quicksort | 1 | O(n^2) | 0 | no | - +-----------+-------+-------------+------------+-------+ - | mergesort | 2 | O(n*log(n)) | ~n/2 | yes | - +-----------+-------+-------------+------------+-------+ - | heapsort | 3 | O(n*log(n)) | 0 | no | - +-----------+-------+-------------+------------+-------+ + *Notes* - All the sort algorithms make temporary copies of the data when - the sort is not along the last axis. Consequently, sorts along - the last axis are faster and use less space than sorts along - other axis. + The various sorts are characterized by average speed, worst case + performance, need for work space, and whether they are stable. A + stable sort keeps items with the same key in the same relative + order. The three available algorithms have the following + properties: + +-----------+-------+-------------+------------+-------+ + | kind | speed | worst case | work space | stable| + +===========+=======+=============+============+=======+ + | quicksort | 1 | O(n^2) | 0 | no | + +-----------+-------+-------------+------------+-------+ + | mergesort | 2 | O(n*log(n)) | ~n/2 | yes | + +-----------+-------+-------------+------------+-------+ + | heapsort | 3 | O(n*log(n)) | 0 | no | + +-----------+-------+-------------+------------+-------+ + + All the sort algorithms make temporary copies of the data when + the sort is not along the last axis. Consequently, sorts along + the last axis are faster and use less space than sorts along + other axis. + """ try: argsort = a.argsort @@ -363,9 +396,31 @@ def argmax(a, axis=None): - """Return the indices to the maximum value of the 1-D arrays along - the given axis. + """Returns array of indices of the maximum values of along the given axis. + *Parameters*: + + a : array + Array to look in. + + axis : {None, integer} + If None, the index is into the flattened array, otherwise along + the specified axis + + *Returns*: + + Array of indices + + *Examples* + + >>> a = arange(6).reshape(2,3) + >>> argmax(a) + 5 + >>> argmax(a,0) + array([1, 1, 1]) + >>> argmax(a,1) + array([2, 2]) + """ try: argmax = a.argmax @@ -375,9 +430,31 @@ def argmin(a, axis=None): - """Return the indices to the minimum value of the 1-D arrays along - the given axis. + """Return array of indices to the minimum values along the given axis. + *Parameters*: + + a : array + Array to look in. + + axis : {None, integer} + If None, the index is into the flattened array, otherwise along + the specified axis + + *Returns*: + + Array of indices + + *Examples* + + >>> a = arange(6).reshape(2,3) + >>> argmin(a) + 0 + >>> argmin(a,0) + array([0, 0, 0]) + >>> argmin(a,1) + array([0, 0]) + """ try: argmin = a.argmin @@ -387,49 +464,51 @@ def searchsorted(a, v, side='left'): - """Return indices where keys in v should be inserted to maintain - order. + """Return indices where keys in v should be inserted to maintain order. - Find the indices into a sorted array such that if the - corresponding keys in v were inserted before the indices the - order of a would be preserved. If side='left', then the first - such index is returned. If side='right', then the last such index - is returned. If there is no such index because the key is out of - bounds, then the length of a is returned, i.e., the key would - need to be appended. The returned index array has the same shape - as v. + Find the indices into a sorted array such that if the corresponding keys in + v were inserted before the indices the order of a would be preserved. If + side='left', then the first such index is returned. If side='right', then + the last such index is returned. If there is no such index because the key + is out of bounds, then the length of a is returned, i.e., the key would need + to be appended. The returned index array has the same shape as v. - :Parameters: + *Parameters*: + a : 1-d array - Array sorted in ascending order. + Array must be sorted in ascending order. + v : array or list type Array of keys to be searched for in a. - side : string - Possible values are : 'left', 'right'. Default is 'left'. - Return the first or last index where the key could be - inserted. - :Returns: + side : {'left', 'right'}, optional + If 'left', the index of the first location where the key could be + inserted is found, if 'right', the index of the last such element is + returned. If the is no such element, then either 0 or N is returned, + where N is the size of the array. + + *Returns*: + indices : integer array Array of insertion points with the same shape as v. - :SeeAlso: - - sort : Inplace sort. - - histogram : Produce histogram from 1-d data. + *See Also*: - Notes - ----- + `sort` : Inplace sort. - The array a must be 1-d and is assumed to be sorted in ascending - order. Searchsorted uses binary search to find the required - insertion points. + `histogram` : Produce histogram from 1-d data. - Examples - -------- + *Notes* - >>> searchsorted([1,2,3,4,5],[6,4,0]) - array([5, 3, 0]) + The array a must be 1-d and is assumed to be sorted in ascending + order. Searchsorted uses binary search to find the required + insertion points. + *Examples* + + >>> searchsorted([1,2,3,4,5],[6,4,0]) + array([5, 3, 0]) + """ try: searchsorted = a.searchsorted @@ -447,6 +526,21 @@ Note that a.resize(new_shape) will fill the array with 0's beyond current definition of a. + *Parameters*: + + a : array_like + Array to be reshaped. + + new_shape : tuple + Shape of the new array. + + *Returns*: + + new_array : array + The new array is formed from the data in the old array, repeated if + necessary to fill out the required number of elements, with the new + shape. + """ if isinstance(new_shape, (int, nt.integer)): @@ -475,21 +569,19 @@ def squeeze(a): """Remove single-dimensional entries from the shape of a. - Examples - -------- + *Examples* - >>> x = array([[[1,1,1],[2,2,2],[3,3,3]]]) - >>> x - array([[[1, 1, 1], - [2, 2, 2], - [3, 3, 3]]]) - >>> x.shape - (1, 3, 3) - >>> squeeze(x).shape - (3, 3) + >>> x = array([[[1,1,1],[2,2,2],[3,3,3]]]) + >>> x + array([[[1, 1, 1], + [2, 2, 2], + [3, 3, 3]]]) + >>> x.shape + (1, 3, 3) + >>> squeeze(x).shape + (3, 3) """ - try: squeeze = a.squeeze except AttributeError: @@ -500,58 +592,66 @@ def diagonal(a, offset=0, axis1=0, axis2=1): """Return specified diagonals. - If a is 2-d, returns the diagonal of self with the given offset, - i.e., the collection of elements of the form a[i,i+offset]. If a - has more than two dimensions, then the axes specified by axis1 and - axis2 are used to determine the 2-d subarray whose diagonal is - returned. The shape of the resulting array can be determined by - removing axis1 and axis2 and appending an index to the right equal - to the size of the resulting diagonals. + If a is 2-d, returns the diagonal of self with the given offset, i.e., the + collection of elements of the form a[i,i+offset]. If a has more than two + dimensions, then the axes specified by axis1 and axis2 are used to determine + the 2-d subarray whose diagonal is returned. The shape of the resulting + array can be determined by removing axis1 and axis2 and appending an index + to the right equal to the size of the resulting diagonals. - :Parameters: - offset : integer - Offset of the diagonal from the main diagonal. Can be both - positive and negative. Defaults to main diagonal. - axis1 : integer - Axis to be used as the first axis of the 2-d subarrays from - which the diagonals should be taken. Defaults to first axis. - axis2 : integer - Axis to be used as the second axis of the 2-d subarrays from - which the diagonals should be taken. Defaults to second axis. + *Parameters*: - :Returns: + a : array_like + Array from whis the diagonals are taken. + + offset : {0, integer}, optional + Offset of the diagonal from the main diagonal. Can be both positive + and negative. Defaults to main diagonal. + + axis1 : {0, integer}, optional + Axis to be used as the first axis of the 2-d subarrays from which + the diagonals should be taken. Defaults to first axis. + + axis2 : {1, integer}, optional + Axis to be used as the second axis of the 2-d subarrays from which + the diagonals should be taken. Defaults to second axis. + + *Returns*: + array_of_diagonals : array of same type as a If a is 2-d, a 1-d array containing the diagonal is returned. If a has larger dimensions, then an array of diagonals is returned. - :SeeAlso: - - diag : Matlab workalike for 1-d and 2-d arrays. - - diagflat : Create diagonal arrays. - - trace : Sum along diagonals. + *See Also*: - Examples - -------- + `diag` : Matlab workalike for 1-d and 2-d arrays. - >>> a = arange(4).reshape(2,2) - >>> a - array([[0, 1], - [2, 3]]) - >>> a.diagonal() - array([0, 3]) - >>> a.diagonal(1) - array([1]) + `diagflat` : Create diagonal arrays. - >>> a = arange(8).reshape(2,2,2) - >>> a - array([[[0, 1], - [2, 3]], - [[4, 5], - [6, 7]]]) - >>> a.diagonal(0,-2,-1) - array([[0, 3], - [4, 7]]) + `trace` : Sum along diagonals. + *Examples* + + >>> a = arange(4).reshape(2,2) + >>> a + array([[0, 1], + [2, 3]]) + >>> a.diagonal() + array([0, 3]) + >>> a.diagonal(1) + array([1]) + + >>> a = arange(8).reshape(2,2,2) + >>> a + array([[[0, 1], + [2, 3]], + [[4, 5], + [6, 7]]]) + >>> a.diagonal(0,-2,-1) + array([[0, 3], + [4, 7]]) + """ return asarray(a).diagonal(offset, axis1, axis2) @@ -559,30 +659,118 @@ def trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None): """Return the sum along diagonals of the array. + If a is 2-d, returns the sum along the diagonal of self with the given offset, i.e., the + collection of elements of the form a[i,i+offset]. If a has more than two + dimensions, then the axes specified by axis1 and axis2 are used to determine + the 2-d subarray whose trace is returned. The shape of the resulting + array can be determined by removing axis1 and axis2 and appending an index + to the right equal to the size of the resulting diagonals. Arrays of integer + type are summed + + *Parameters*: + + a : array_like + Array from whis the diagonals are taken. + + offset : {0, integer}, optional + Offset of the diagonal from the main diagonal. Can be both positive + and negative. Defaults to main diagonal. + + axis1 : {0, integer}, optional + Axis to be used as the first axis of the 2-d subarrays from which + the diagonals should be taken. Defaults to first axis. + + axis2 : {1, integer}, optional + Axis to be used as the second axis of the 2-d subarrays from which + the diagonals should be taken. Defaults to second axis. + + dtype : {None, dtype}, optional + Determines the type of the returned array and of the accumulator + where the elements are summed. If dtype has the value None and a is + of integer type of precision less than the default integer + precision, then the default integer precision is used. Otherwise, + the precision is the same as that of a. + + out : {None, array}, optional + Array into which the sum can be placed. It's type is preserved and + it must be of the right shape to hold the output. + + *Returns*: + + sum_along_diagonals : array + If a is 2-d, a 0-d array containing the diagonal is + returned. If a has larger dimensions, then an array of + diagonals is returned. + + *Examples* + + >>> trace(eye(3)) + 3.0 + >>> a = arange(8).reshape((2,2,2)) + >>> trace(a) + array([6, 8]) + """ return asarray(a).trace(offset, axis1, axis2, dtype, out) -def ravel(m,order='C'): - """Return a 1d array with all the elements of m. The new array is - a view of m if possible, otherwise it is a copy. +def ravel(a, order='C'): + """Return a 1d array containing the elements of a. - Examples - -------- + Returns the elements of a as a 1d array. The elements in the new array + are taken in the order specified by the order keyword. The new array is + a view of a if possible, otherwise it is a copy. - >>> x = array([[1,2,3],[4,5,6]]) - >>> x - array([[1, 2, 3], - [4, 5, 6]]) - >>> ravel(x) - array([1, 2, 3, 4, 5, 6]) + *Parameters*: + a : array_like + + order : {'C','F'}, optional + If order is 'C' the elements are taken in row major order. If order + is 'F' they are taken in column major order. + + *Returns*: + + 1d array of the elements of a. + + *See Also*: + + `ndarray.flat` : 1d iterator over the array. + + `ndarray.flatten` : 1d array copy of the elements of a in C order. + + *Examples* + + >>> x = array([[1,2,3],[4,5,6]]) + >>> x + array([[1, 2, 3], + [4, 5, 6]]) + >>> ravel(x) + array([1, 2, 3, 4, 5, 6]) + """ - a = asarray(m) - return a.ravel(order) + return asarray(a).ravel(order) + def nonzero(a): """Return the indices of the elements of a which are not zero. + *Parameters*: + + a : array_like + + *Returns*: + + Tuple of arrays of indices. + + *Examples* + + >>> eye(3)[nonzero(eye(3))] + array([ 1., 1., 1.]) + >>> nonzero(eye(3)) + (array([0, 1, 2]), array([0, 1, 2])) + >>> eye(3)[nonzero(eye(3))] + array([ 1., 1., 1.]) + """ try: nonzero = a.nonzero @@ -592,17 +780,27 @@ res = nonzero() return res + def shape(a): - """Return the shape of a. This function can also be called on - nested sequences, e.g. + """Return the shape of a. - Examples - -------- + *Parameters*: - >>> x = array([1,2,3]) - >>> shape((x,x,x)) - (3, 3) + a : array type + *Returns*: + + tuple of integers : + The elements of the tuple are the length of the corresponding array + dimension. + + *Examples* + + >>> shape(eye(3)) + (3, 3) + >>> shape([[1,2]]) + (1, 2) + """ try: result = a.shape @@ -610,140 +808,184 @@ result = asarray(a).shape return result -def compress(condition, m, axis=None, out=None): - """Return m where condition is true. - Equivalent to m[condition]. +def compress(condition, a, axis=None, out=None): + """Return a where condition is true. + Equivalent to a[condition]. + """ try: - compress = m.compress + compress = a.compress except AttributeError: - return _wrapit(m, 'compress', condition, axis, out) + return _wrapit(a, 'compress', condition, axis, out) return compress(condition, axis, out) -def clip(m, m_min, m_max): - """Limit the values of m to [m_min, m_max]. Equivalent to - m[m < m_min] = m_min - m[m > m_max] = m_max +def clip(a, a_min, a_max): + """Limit the values of a to [a_min, a_max]. Equivalent to + a[a < a_min] = a_min + a[a > a_max] = a_max + """ try: - clip = m.clip + clip = a.clip except AttributeError: - return _wrapit(m, 'clip', m_min, m_max) - return clip(m_min, m_max) + return _wrapit(a, 'clip', a_min, a_max) + return clip(a_min, a_max) -def sum(x, axis=None, dtype=None, out=None): - """Sum the array over the given axis. The optional dtype argument - is the data type for intermediate calculations. - The default is to upcast (promote) smaller integer types to the - platform-dependent Int. For example, on 32-bit platforms: +def sum(a, axis=None, dtype=None, out=None): + """Sum the array over the given axis. - x.dtype default sum() dtype - --------------------------------------------------- - bool, int8, int16, int32 int32 + *Parameters*: - Examples - -------- + a : array_type - >>> N.sum([0.5, 1.5]) - 2.0 - >>> N.sum([0.5, 1.5], dtype=N.int32) - 1 - >>> N.sum([[0, 1], [0, 5]]) - 6 - >>> N.sum([[0, 1], [0, 5]], axis=1) - array([1, 5]) + axis : {None, integer} + Axis over which the sums are taken. If None is used, then the sum is + over all the array elements. + dtype : {None, dtype}, optional + Determines the type of the returned array and of the accumulator + where the elements are summed. If dtype has the value None and a is + of integer type of precision less than the default platform integer + precision, then the default integer precision is used. Otherwise, + the precision is the same as that of a. + + out : {None, array}, optional + Array into which the sum can be placed. It's type is preserved and + it must be of the right shape to hold the output. + + *Returns*: + + Sum along specified axis : {array, scalar}, type as explained above. + If the sum is along an axis, then an array is returned whose shape + is the same as a with the specified axis removed. For 1d arrays or + dtype=None, the result is a 0d array. + + *Examples* + + >>> N.sum([0.5, 1.5]) + 2.0 + >>> N.sum([0.5, 1.5], dtype=N.int32) + 1 + >>> N.sum([[0, 1], [0, 5]]) + 6 + >>> N.sum([[0, 1], [0, 5]], axis=1) + array([1, 5]) + """ - if isinstance(x, _gentype): - res = _sum_(x) + if isinstance(a, _gentype): + res = _sum_(a) if out is not None: out[...] = res return out return res try: - sum = x.sum + sum = a.sum except AttributeError: - return _wrapit(x, 'sum', axis, dtype, out) + return _wrapit(a, 'sum', axis, dtype, out) return sum(axis, dtype, out) -def product (x, axis=None, dtype=None, out=None): + +def product (a, axis=None, dtype=None, out=None): """Product of the array elements over the given axis. + Blah, Blah. + """ try: - prod = x.prod + prod = a.prod except AttributeError: - return _wrapit(x, 'prod', axis, dtype, out) + return _wrapit(a, 'prod', axis, dtype, out) return prod(axis, dtype, out) -def sometrue (x, axis=None, out=None): + +def sometrue (a, axis=None, out=None): """Perform a logical_or over the given axis. + Blah, Blah. + """ try: - any = x.any + any = a.any except AttributeError: - return _wrapit(x, 'any', axis, out) + return _wrapit(a, 'any', axis, out) return any(axis, out) -def alltrue (x, axis=None, out=None): + +def alltrue (a, axis=None, out=None): """Perform a logical_and over the given axis. + Blah, Blah. + """ try: - all = x.all + all = a.all except AttributeError: - return _wrapit(x, 'all', axis, out) + return _wrapit(a, 'all', axis, out) return all(axis, out) -def any(x,axis=None, out=None): + +def any(a,axis=None, out=None): """Return true if any elements of x are true. + Blah, Blah. + """ try: - any = x.any + any = a.any except AttributeError: - return _wrapit(x, 'any', axis, out) + return _wrapit(a, 'any', axis, out) return any(axis, out) -def all(x,axis=None, out=None): + +def all(a,axis=None, out=None): """Return true if all elements of x are true: + Blah, Blah. + """ try: - all = x.all + all = a.all except AttributeError: - return _wrapit(x, 'all', axis, out) + return _wrapit(a, 'all', axis, out) return all(axis, out) -def cumsum (x, axis=None, dtype=None, out=None): + +def cumsum (a, axis=None, dtype=None, out=None): """Sum the array over the given axis. + Blah, Blah. + """ try: - cumsum = x.cumsum + cumsum = a.cumsum except AttributeError: - return _wrapit(x, 'cumsum', axis, dtype, out) + return _wrapit(a, 'cumsum', axis, dtype, out) return cumsum(axis, dtype, out) -def cumproduct (x, axis=None, dtype=None, out=None): + +def cumproduct (a, axis=None, dtype=None, out=None): """Return the cumulative product over the given axis. + Blah, Blah. + """ try: - cumprod = x.cumprod + cumprod = a.cumprod except AttributeError: - return _wrapit(x, 'cumprod', axis, dtype, out) + return _wrapit(a, 'cumprod', axis, dtype, out) return cumprod(axis, dtype, out) + def ptp(a, axis=None, out=None): """Return maximum - minimum along the the given dimension. + Blah, Blah. + """ try: ptp = a.ptp @@ -751,9 +993,12 @@ return _wrapit(a, 'ptp', axis, out) return ptp(axis, out) + def amax(a, axis=None, out=None): """Return the maximum of 'a' along dimension axis. + Blah, Blah. + """ try: amax = a.max @@ -761,8 +1006,12 @@ return _wrapit(a, 'max', axis, out) return amax(axis, out) + def amin(a, axis=None, out=None): """Return the minimum of a along dimension axis. + + Blah, Blah. + """ try: amin = a.min @@ -770,19 +1019,25 @@ return _wrapit(a, 'min', axis, out) return amin(axis, out) + def alen(a): """Return the length of a Python object interpreted as an array of at least 1 dimension. + Blah, Blah. + """ try: return len(a) except TypeError: return len(array(a,ndmin=1)) + def prod(a, axis=None, dtype=None, out=None): """Return the product of the elements along the given axis. + Blah, Blah. + """ try: prod = a.prod @@ -790,9 +1045,12 @@ return _wrapit(a, 'prod', axis, dtype, out) return prod(axis, dtype, out) + def cumprod(a, axis=None, dtype=None, out=None): """Return the cumulative product of the elements along the given axis. + Blah, Blah. + """ try: cumprod = a.cumprod @@ -800,28 +1058,37 @@ return _wrapit(a, 'cumprod', axis, dtype, out) return cumprod(axis, dtype, out) + def ndim(a): """Return the number of dimensions of a. + Blah, Blah. + """ try: return a.ndim except AttributeError: return asarray(a).ndim + def rank(a): """Return the rank of sequence a (the number of dimensions, not the matrix rank). The rank of a scalar is zero. + Blah, Blah. + """ try: return a.ndim except AttributeError: return asarray(a).ndim + def size(a, axis=None): """Return the number of elements in sequence a, or along a given axis. + Blah, Blah. + """ if axis is None: @@ -835,41 +1102,42 @@ except AttributeError: return asarray(a).shape[axis] + def round_(a, decimals=0, out=None): """Round a to the given number of decimals. - The real and imaginary parts of complex numbers are rounded - separately. Nothing is done if the input is an integer array with - decimals >= 0. + The real and imaginary parts of complex numbers are rounded separately. + Nothing is done if the input is an integer array with decimals >= 0. - :Parameters: - decimals : integer - Number of decimal places to round to (default 0). When - 'decimals' is negative it specifies the number of - positions to the left of the decimal point. - out : array - Existing array to use for output (by default, make a - copy of a). + *Parameters*: - :Returns: + decimals : {0, int}, optional + Number of decimal places to round to. When decimals is negative it + specifies the number of positions to the left of the decimal point. + out : {None, array}, optional + Existing array to use for output (by default, make a copy of a). + + *Returns*: + out : array - May be used to specify a different array to hold the - result rather than the default 'a'. If the type of the - array specified by 'out' differs from that of 'a', the - result is cast to the new type, otherwise the original - type is kept. Floats round to floats by default. + May be used to specify a different array to hold the result rather + than the default a. If the type of the array specified by 'out' + differs from that of a, the result is cast to the new type, + otherwise the original type is kept. Floats round to floats by + default. - Notes - ----- + *See Also*: - Numpy rounds to even. Thus 1.5 and 2.5 round to 2.0, -0.5 and 0.5 - round to 0.0, etc. Results may also be surprising due to the inexact - representation of decimal fractions in IEEE floating point and the - errors introduced in scaling the numbers when 'decimals' is something - other than 0. + `around` : alias of this function - The function around is an alias for round_. + *Notes* + Numpy rounds to even. Thus 1.5 and 2.5 round to 2.0, -0.5 and 0.5 round + to 0.0, etc. Results may also be surprising due to the inexact + representation of decimal fractions in IEEE floating point and the + errors introduced in scaling the numbers when decimals is something + other than 0. + """ try: round = a.round @@ -877,7 +1145,6 @@ return _wrapit(a, 'round', decimals, out) return round(decimals, out) -around = round_ def mean(a, axis=None, dtype=None, out=None): """Compute the mean along the specified axis. @@ -886,34 +1153,37 @@ over the flattened array by default, otherwise over the specified axis. - :Parameters: + *Parameters*: + axis : integer - Axis along which the means are computed. The default is - to compute the standard deviation of the flattened array. + Axis along which the means are computed. The default is to compute + the standard deviation of the flattened array. dtype : type - Type to use in computing the means. For arrays of integer - type the default is float32, for arrays of float types it is - the same as the array type. + Type to use in computing the means. For arrays of integer type the + default is float32, for arrays of float types it is the same as the + array type. out : ndarray - Alternative output array in which to place the result. It - must have the same shape as the expected output but the type - will be cast if necessary. + Alternative output array in which to place the result. It must have + the same shape as the expected output but the type will be cast if + necessary. - :Returns: + *Returns*: + mean : array (see dtype parameter above) - A new array holding the result is returned unless out is - specified, in which case a reference to out is returned. + A new array holding the result is returned unless out is specified, + in which case a reference to out is returned. - :SeeAlso: - - var : Variance - - std : Standard deviation + *See Also*: - Notes - ----- + `var` : Variance - The mean is the sum of the elements along the axis divided by the - number of elements. + `std` : Standard deviation + *Notes* + + The mean is the sum of the elements along the axis divided by the number + of elements. + """ try: mean = a.mean @@ -925,43 +1195,43 @@ def std(a, axis=None, dtype=None, out=None): """Compute the standard deviation along the specified axis. - Returns the standard deviation of the array elements, a measure - of the spread of a distribution. The standard deviation is - computed for the flattened array by default, otherwise over the - specified axis. + Returns the standard deviation of the array elements, a measure of the + spread of a distribution. The standard deviation is computed for the + flattened array by default, otherwise over the specified axis. - :Parameters: + *Parameters*: + axis : integer - Axis along which the standard deviation is computed. The - default is to compute the standard deviation of the flattened - array. + Axis along which the standard deviation is computed. The default is + to compute the standard deviation of the flattened array. dtype : type - Type to use in computing the standard deviation. For arrays - of integer type the default is float32, for arrays of float - types it is the same as the array type. + Type to use in computing the standard deviation. For arrays of + integer type the default is float32, for arrays of float types it is + the same as the array type. out : ndarray - Alternative output array in which to place the result. It - must have the same shape as the expected output but the type - will be cast if necessary. + Alternative output array in which to place the result. It must have + the same shape as the expected output but the type will be cast if + necessary. - :Returns: + *Returns*: + standard_deviation : The return type varies, see above. - A new array holding the result is returned unless out is - specified, in which case a reference to out is returned. + A new array holding the result is returned unless out is specified, + in which case a reference to out is returned. - :SeeAlso: - - var : Variance - - mean : Average + *See Also*: - Notes - ----- + `var` : Variance - The standard deviation is the square root of the average of the - squared deviations from the mean, i.e. var = sqrt(mean((x - - x.mean())**2)). The computed standard deviation is biased, i.e., - the mean is computed by dividing by the number of elements, N, - rather than by N-1. + `mean` : Average + *Notes*: + + The standard deviation is the square root of the average of the squared + deviations from the mean, i.e. var = sqrt(mean((x - x.mean())**2)). The + computed standard deviation is biased, i.e., the mean is computed by + dividing by the number of elements, N, rather than by N-1. + """ try: std = a.std @@ -973,43 +1243,51 @@ def var(a, axis=None, dtype=None, out=None): """Compute the variance along the specified axis. - Returns the variance of the array elements, a measure of the - spread of a distribution. The variance is computed for the - flattened array by default, otherwise over the specified axis. + Returns the variance of the array elements, a measure of the spread of a + distribution. The variance is computed for the flattened array by default, + otherwise over the specified axis. - :Parameters: + *Parameters*: + axis : integer - Axis along which the variance is computed. The default is to - compute the variance of the flattened array. + Axis along which the variance is computed. The default is to compute + the variance of the flattened array. dtype : type - Type to use in computing the variance. For arrays of integer - type the default is float32, for arrays of float types it is - the same as the array type. + Type to use in computing the variance. For arrays of integer type + the default is float32, for arrays of float types it is the same as + the array type. out : ndarray - Alternative output array in which to place the result. It - must have the same shape as the expected output but the type - will be cast if necessary. + Alternative output array in which to place the result. It must have + the same shape as the expected output but the type will be cast if + necessary. - :Returns: + *Returns*: + variance : array (see dtype parameter above) - A new array holding the result is returned unless out is - specified, in which case a reference to out is returned. + A new array holding the result is returned unless out is specified, + in which case a reference to out is returned. - :SeeAlso: - - std : Standard deviation - - mean : Average + *See Also*: - Notes - ----- + `std` : Standard deviation - The variance is the average of the squared deviations from the - mean, i.e. var = mean((x - x.mean())**2). The computed variance - is biased, i.e., the mean is computed by dividing by the number - of elements, N, rather than by N-1. + `mean` : Average + *Notes*: + + The variance is the average of the squared deviations from the mean, + i.e. var = mean((x - x.mean())**2). The computed variance is biased, + i.e., the mean is computed by dividing by the number of elements, N, + rather than by N-1. + """ try: var = a.var except AttributeError: return _wrapit(a, 'var', axis, dtype, out) return var(axis, dtype, out) + +# functions that are now aliases + +around = round_ + From numpy-svn at scipy.org Thu Sep 13 13:05:53 2007 From: numpy-svn at scipy.org (numpy-svn at scipy.org) Date: Thu, 13 Sep 2007 12:05:53 -0500 (CDT) Subject: [Numpy-svn] r4030 - trunk/numpy/doc/swig Message-ID: <20070913170553.66CF839C182@new.scipy.org> Author: wfspotz at sandia.gov Date: 2007-09-13 12:05:48 -0500 (Thu, 13 Sep 2007) New Revision: 4030 Modified: trunk/numpy/doc/swig/numpy_swig.html trunk/numpy/doc/swig/numpy_swig.pdf trunk/numpy/doc/swig/numpy_swig.txt Log: Added proper exception handling to dot example Modified: trunk/numpy/doc/swig/numpy_swig.html =================================================================== --- trunk/numpy/doc/swig/numpy_swig.html 2007-09-13 05:34:26 UTC (rev 4029) +++ trunk/numpy/doc/swig/numpy_swig.html 2007-09-13 17:05:48 UTC (rev 4030) @@ -925,6 +925,10 @@ %apply (int DIM1, double* IN_ARRAY1) {(int len1, double* vec1), (int len2, double* vec2)} %rename (dot) my_dot; +%exception my_dot { + $action + if (PyErr_Occurred()) SWIG_fail; +} %inline %{ double my_dot(int len1, double* vec1, int len2, double* vec2) { if (len1 != len2) { @@ -944,6 +948,16 @@ %include directives. Or, if the function in question is a class method, you will want to use %extend rather than %inline in addition to %ignore.
+A note on error handling: Note that my_dot returns a +double but that it can also raise a python error. The +resulting wrapper function will return a python float +representation of 0.0 when the vector lengths do not match. Since +this is not NULL, the python interpreter will not know to check +for an error. For this reason, we add the %exception directive +above for my_dot to get the behavior we want (note that +$action is a macro that gets expanded to a valid call to +my_dot). In general, you will probably want to write a SWIG +macro to perform this task.