mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-10-26 05:31:15 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			2376 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			2376 lines
		
	
	
		
			51 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| ===========
 | |
| Numpy C-API
 | |
| ===========
 | |
| ::
 | |
| 
 | |
|   unsigned int
 | |
|   PyArray_GetNDArrayCVersion(void )
 | |
| 
 | |
| 
 | |
| Included at the very first so not auto-grabbed and thus not labeled.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_SetNumericOps(PyObject *dict)
 | |
| 
 | |
| Set internal structure with number functions that all arrays will use
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_GetNumericOps(void )
 | |
| 
 | |
| Get dictionary showing number functions that all arrays will use
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_INCREF(PyArrayObject *mp)
 | |
| 
 | |
| For object arrays, increment all internal references.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_XDECREF(PyArrayObject *mp)
 | |
| 
 | |
| Decrement all internal references for object arrays.
 | |
| (or arrays with object fields)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_SetStringFunction(PyObject *op, int repr)
 | |
| 
 | |
| Set the array print function to be a Python function.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_DescrFromType(int type)
 | |
| 
 | |
| Get the PyArray_Descr structure for a type.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_TypeObjectFromType(int type)
 | |
| 
 | |
| Get a typeobject from a type-number -- can return NULL.
 | |
| 
 | |
| New reference
 | |
| 
 | |
| ::
 | |
| 
 | |
|   char *
 | |
|   PyArray_Zero(PyArrayObject *arr)
 | |
| 
 | |
| Get pointer to zero of correct type for array.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   char *
 | |
|   PyArray_One(PyArrayObject *arr)
 | |
| 
 | |
| Get pointer to one of correct type for array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_CastToType(PyArrayObject *arr, PyArray_Descr *dtype, int
 | |
|                      is_f_order)
 | |
| 
 | |
| For backward compatibility
 | |
| 
 | |
| Cast an array using typecode structure.
 | |
| steals reference to at --- cannot be NULL
 | |
| 
 | |
| This function always makes a copy of arr, even if the dtype
 | |
| doesn't change.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CastTo(PyArrayObject *out, PyArrayObject *mp)
 | |
| 
 | |
| Cast to an already created array.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CastAnyTo(PyArrayObject *out, PyArrayObject *mp)
 | |
| 
 | |
| Cast to an already created array.  Arrays don't have to be "broadcastable"
 | |
| Only requirement is they have the same number of elements.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CanCastSafely(int fromtype, int totype)
 | |
| 
 | |
| Check the type coercion rules.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   PyArray_CanCastTo(PyArray_Descr *from, PyArray_Descr *to)
 | |
| 
 | |
| leaves reference count alone --- cannot be NULL
 | |
| 
 | |
| PyArray_CanCastTypeTo is equivalent to this, but adds a 'casting'
 | |
| parameter.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_ObjectType(PyObject *op, int minimum_type)
 | |
| 
 | |
| Return the typecode of the array a Python object would be converted to
 | |
| 
 | |
| Returns the type number the result should have, or NPY_NOTYPE on error.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_DescrFromObject(PyObject *op, PyArray_Descr *mintype)
 | |
| 
 | |
| new reference -- accepts NULL for mintype
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArrayObject **
 | |
|   PyArray_ConvertToCommonType(PyObject *op, int *retn)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_DescrFromScalar(PyObject *sc)
 | |
| 
 | |
| Return descr object from array scalar.
 | |
| 
 | |
| New reference
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_DescrFromTypeObject(PyObject *type)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   PyArray_Size(PyObject *op)
 | |
| 
 | |
| Compute the size of an array (in number of items)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Scalar(void *data, PyArray_Descr *descr, PyObject *base)
 | |
| 
 | |
| Get scalar-equivalent to a region of memory described by a descriptor.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromScalar(PyObject *scalar, PyArray_Descr *outcode)
 | |
| 
 | |
| Get 0-dim array from scalar
 | |
| 
 | |
| 0-dim array from array-scalar object
 | |
| always contains a copy of the data
 | |
| unless outcode is NULL, it is of void type and the referrer does
 | |
| not own it either.
 | |
| 
 | |
| steals reference to outcode
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_ScalarAsCtype(PyObject *scalar, void *ctypeptr)
 | |
| 
 | |
| Convert to c-type
 | |
| 
 | |
| no error checking is performed -- ctypeptr must be same type as scalar
 | |
| in case of flexible type, the data is not copied
 | |
| into ctypeptr which is expected to be a pointer to pointer
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CastScalarToCtype(PyObject *scalar, void
 | |
|                             *ctypeptr, PyArray_Descr *outcode)
 | |
| 
 | |
| Cast Scalar to c-type
 | |
| 
 | |
| The output buffer must be large-enough to receive the value
 | |
| Even for flexible types which is different from ScalarAsCtype
 | |
| where only a reference for flexible types is returned
 | |
| 
 | |
| This may not work right on narrow builds for NumPy unicode scalars.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CastScalarDirect(PyObject *scalar, PyArray_Descr
 | |
|                            *indescr, void *ctypeptr, int outtype)
 | |
| 
 | |
| Cast Scalar to c-type
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_ScalarFromObject(PyObject *object)
 | |
| 
 | |
| Get an Array Scalar From a Python Object
 | |
| 
 | |
| Returns NULL if unsuccessful but error is only set if another error occurred.
 | |
| Currently only Numeric-like object supported.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_VectorUnaryFunc *
 | |
|   PyArray_GetCastFunc(PyArray_Descr *descr, int type_num)
 | |
| 
 | |
| Get a cast function to cast from the input descriptor to the
 | |
| output type_number (must be a registered data-type).
 | |
| Returns NULL if un-successful.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromDims(int nd, int *d, int type)
 | |
| 
 | |
| Construct an empty array from dimensions and typenum
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromDimsAndDataAndDescr(int nd, int *d, PyArray_Descr
 | |
|                                   *descr, char *data)
 | |
| 
 | |
| Like FromDimsAndData but uses the Descr structure instead of typecode
 | |
| as input.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromAny(PyObject *op, PyArray_Descr *newtype, int
 | |
|                   min_depth, int max_depth, int flags, PyObject
 | |
|                   *context)
 | |
| 
 | |
| Does not check for NPY_ARRAY_ENSURECOPY and NPY_ARRAY_NOTSWAPPED in flags
 | |
| Steals a reference to newtype --- which can be NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_EnsureArray(PyObject *op)
 | |
| 
 | |
| This is a quick wrapper around PyArray_FromAny(op, NULL, 0, 0, ENSUREARRAY)
 | |
| that special cases Arrays and PyArray_Scalars up front
 | |
| It *steals a reference* to the object
 | |
| It also guarantees that the result is PyArray_Type
 | |
| Because it decrefs op if any conversion needs to take place
 | |
| so it can be used like PyArray_EnsureArray(some_function(...))
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_EnsureAnyArray(PyObject *op)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromFile(FILE *fp, PyArray_Descr *dtype, npy_intp num, char
 | |
|                    *sep)
 | |
| 
 | |
| 
 | |
| Given a ``FILE *`` pointer ``fp``, and a ``PyArray_Descr``, return an
 | |
| array corresponding to the data encoded in that file.
 | |
| 
 | |
| If the dtype is NULL, the default array type is used (double).
 | |
| If non-null, the reference is stolen.
 | |
| 
 | |
| The number of elements to read is given as ``num``; if it is < 0, then
 | |
| then as many as possible are read.
 | |
| 
 | |
| If ``sep`` is NULL or empty, then binary data is assumed, else
 | |
| text data, with ``sep`` as the separator between elements. Whitespace in
 | |
| the separator matches any length of whitespace in the text, and a match
 | |
| for whitespace around the separator is added.
 | |
| 
 | |
| For memory-mapped files, use the buffer interface. No more data than
 | |
| necessary is read by this routine.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromString(char *data, npy_intp slen, PyArray_Descr
 | |
|                      *dtype, npy_intp num, char *sep)
 | |
| 
 | |
| 
 | |
| Given a pointer to a string ``data``, a string length ``slen``, and
 | |
| a ``PyArray_Descr``, return an array corresponding to the data
 | |
| encoded in that string.
 | |
| 
 | |
| If the dtype is NULL, the default array type is used (double).
 | |
| If non-null, the reference is stolen.
 | |
| 
 | |
| If ``slen`` is < 0, then the end of string is used for text data.
 | |
| It is an error for ``slen`` to be < 0 for binary data (since embedded NULLs
 | |
| would be the norm).
 | |
| 
 | |
| The number of elements to read is given as ``num``; if it is < 0, then
 | |
| then as many as possible are read.
 | |
| 
 | |
| If ``sep`` is NULL or empty, then binary data is assumed, else
 | |
| text data, with ``sep`` as the separator between elements. Whitespace in
 | |
| the separator matches any length of whitespace in the text, and a match
 | |
| for whitespace around the separator is added.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromBuffer(PyObject *buf, PyArray_Descr *type, npy_intp
 | |
|                      count, npy_intp offset)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromIter(PyObject *obj, PyArray_Descr *dtype, npy_intp count)
 | |
| 
 | |
| 
 | |
| steals a reference to dtype (which cannot be NULL)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Return(PyArrayObject *mp)
 | |
| 
 | |
| 
 | |
| Return either an array or the appropriate Python object if the array
 | |
| is 0d and matches a Python type.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_GetField(PyArrayObject *self, PyArray_Descr *typed, int
 | |
|                    offset)
 | |
| 
 | |
| Get a subset of bytes from each element of the array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_SetField(PyArrayObject *self, PyArray_Descr *dtype, int
 | |
|                    offset, PyObject *val)
 | |
| 
 | |
| Set a subset of bytes from each element of the array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Byteswap(PyArrayObject *self, npy_bool inplace)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Resize(PyArrayObject *self, PyArray_Dims *newshape, int
 | |
|                  refcheck, NPY_ORDER order)
 | |
| 
 | |
| Resize (reallocate data).  Only works if nothing else is referencing this
 | |
| array and it is contiguous.  If refcheck is 0, then the reference count is
 | |
| not checked and assumed to be 1.  You still must own this data and have no
 | |
| weak-references and no base object.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_MoveInto(PyArrayObject *dst, PyArrayObject *src)
 | |
| 
 | |
| Move the memory of one array into another, allowing for overlapping data.
 | |
| 
 | |
| Returns 0 on success, negative on failure.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CopyInto(PyArrayObject *dst, PyArrayObject *src)
 | |
| 
 | |
| Copy an Array into another array.
 | |
| Broadcast to the destination shape if necessary.
 | |
| 
 | |
| Returns 0 on success, -1 on failure.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CopyAnyInto(PyArrayObject *dst, PyArrayObject *src)
 | |
| 
 | |
| Copy an Array into another array -- memory must not overlap
 | |
| Does not require src and dest to have "broadcastable" shapes
 | |
| (only the same number of elements).
 | |
| 
 | |
| TODO: For NumPy 2.0, this could accept an order parameter which
 | |
| only allows NPY_CORDER and NPY_FORDER.  Could also rename
 | |
| this to CopyAsFlat to make the name more intuitive.
 | |
| 
 | |
| Returns 0 on success, -1 on error.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CopyObject(PyArrayObject *dest, PyObject *src_object)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_NewCopy(PyArrayObject *obj, NPY_ORDER order)
 | |
| 
 | |
| Copy an array.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_ToList(PyArrayObject *self)
 | |
| 
 | |
| To List
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_ToString(PyArrayObject *self, NPY_ORDER order)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_ToFile(PyArrayObject *self, FILE *fp, char *sep, char *format)
 | |
| 
 | |
| To File
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_Dump(PyObject *self, PyObject *file, int protocol)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Dumps(PyObject *self, int protocol)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_ValidType(int type)
 | |
| 
 | |
| Is the typenum valid?
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_UpdateFlags(PyArrayObject *ret, int flagmask)
 | |
| 
 | |
| Update Several Flags at once.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_New(PyTypeObject *subtype, int nd, npy_intp *dims, int
 | |
|               type_num, npy_intp *strides, void *data, int itemsize, int
 | |
|               flags, PyObject *obj)
 | |
| 
 | |
| Generic new array creation routine.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_NewFromDescr(PyTypeObject *subtype, PyArray_Descr *descr, int
 | |
|                        nd, npy_intp *dims, npy_intp *strides, void
 | |
|                        *data, int flags, PyObject *obj)
 | |
| 
 | |
| Generic new array creation routine.
 | |
| 
 | |
| steals a reference to descr (even on failure)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_DescrNew(PyArray_Descr *base)
 | |
| 
 | |
| base cannot be NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_DescrNewFromType(int type_num)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   double
 | |
|   PyArray_GetPriority(PyObject *obj, double default_)
 | |
| 
 | |
| Get Priority from object
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_IterNew(PyObject *obj)
 | |
| 
 | |
| Get Iterator.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_MultiIterNew(int n, ... )
 | |
| 
 | |
| Get MultiIterator,
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_PyIntAsInt(PyObject *o)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   PyArray_PyIntAsIntp(PyObject *o)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_Broadcast(PyArrayMultiIterObject *mit)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_FillObjectArray(PyArrayObject *arr, PyObject *obj)
 | |
| 
 | |
| Assumes contiguous
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_FillWithScalar(PyArrayObject *arr, PyObject *obj)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   PyArray_CheckStrides(int elsize, int nd, npy_intp numbytes, npy_intp
 | |
|                        offset, npy_intp *dims, npy_intp *newstrides)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_DescrNewByteorder(PyArray_Descr *self, char newendian)
 | |
| 
 | |
| 
 | |
| returns a copy of the PyArray_Descr structure with the byteorder
 | |
| altered:
 | |
| no arguments:  The byteorder is swapped (in all subfields as well)
 | |
| single argument:  The byteorder is forced to the given state
 | |
| (in all subfields as well)
 | |
| 
 | |
| Valid states:  ('big', '>') or ('little' or '<')
 | |
| ('native', or '=')
 | |
| 
 | |
| If a descr structure with | is encountered it's own
 | |
| byte-order is not changed but any fields are:
 | |
| 
 | |
| 
 | |
| Deep bytorder change of a data-type descriptor
 | |
| Leaves reference count of self unchanged --- does not DECREF self ***
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_IterAllButAxis(PyObject *obj, int *inaxis)
 | |
| 
 | |
| Get Iterator that iterates over all but one axis (don't use this with
 | |
| PyArray_ITER_GOTO1D).  The axis will be over-written if negative
 | |
| with the axis having the smallest stride.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_CheckFromAny(PyObject *op, PyArray_Descr *descr, int
 | |
|                        min_depth, int max_depth, int requires, PyObject
 | |
|                        *context)
 | |
| 
 | |
| steals a reference to descr -- accepts NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromArray(PyArrayObject *arr, PyArray_Descr *newtype, int
 | |
|                     flags)
 | |
| 
 | |
| steals reference to newtype --- acc. NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromInterface(PyObject *origin)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromStructInterface(PyObject *input)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FromArrayAttr(PyObject *op, PyArray_Descr *typecode, PyObject
 | |
|                         *context)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   NPY_SCALARKIND
 | |
|   PyArray_ScalarKind(int typenum, PyArrayObject **arr)
 | |
| 
 | |
| ScalarKind
 | |
| 
 | |
| Returns the scalar kind of a type number, with an
 | |
| optional tweak based on the scalar value itself.
 | |
| If no scalar is provided, it returns INTPOS_SCALAR
 | |
| for both signed and unsigned integers, otherwise
 | |
| it checks the sign of any signed integer to choose
 | |
| INTNEG_SCALAR when appropriate.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CanCoerceScalar(int thistype, int neededtype, NPY_SCALARKIND
 | |
|                           scalar)
 | |
| 
 | |
| 
 | |
| Determines whether the data type 'thistype', with
 | |
| scalar kind 'scalar', can be coerced into 'neededtype'.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_NewFlagsObject(PyObject *obj)
 | |
| 
 | |
| 
 | |
| Get New ArrayFlagsObject
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   PyArray_CanCastScalar(PyTypeObject *from, PyTypeObject *to)
 | |
| 
 | |
| See if array scalars can be cast.
 | |
| 
 | |
| TODO: For NumPy 2.0, add a NPY_CASTING parameter.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CompareUCS4(npy_ucs4 *s1, npy_ucs4 *s2, size_t len)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_RemoveSmallest(PyArrayMultiIterObject *multi)
 | |
| 
 | |
| Adjusts previously broadcasted iterators so that the axis with
 | |
| the smallest sum of iterator strides is not iterated over.
 | |
| Returns dimension which is smallest in the range [0,multi->nd).
 | |
| A -1 is returned if multi->nd == 0.
 | |
| 
 | |
| don't use with PyArray_ITER_GOTO1D because factors are not adjusted
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_ElementStrides(PyObject *obj)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_Item_INCREF(char *data, PyArray_Descr *descr)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_Item_XDECREF(char *data, PyArray_Descr *descr)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_FieldNames(PyObject *fields)
 | |
| 
 | |
| Return the tuple of ordered field names from a dictionary.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Transpose(PyArrayObject *ap, PyArray_Dims *permute)
 | |
| 
 | |
| Return Transpose.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_TakeFrom(PyArrayObject *self0, PyObject *indices0, int
 | |
|                    axis, PyArrayObject *out, NPY_CLIPMODE clipmode)
 | |
| 
 | |
| Take
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_PutTo(PyArrayObject *self, PyObject*values0, PyObject
 | |
|                 *indices0, NPY_CLIPMODE clipmode)
 | |
| 
 | |
| Put values into an array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_PutMask(PyArrayObject *self, PyObject*values0, PyObject*mask0)
 | |
| 
 | |
| Put values into an array according to a mask.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Repeat(PyArrayObject *aop, PyObject *op, int axis)
 | |
| 
 | |
| Repeat the array.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Choose(PyArrayObject *ip, PyObject *op, PyArrayObject
 | |
|                  *out, NPY_CLIPMODE clipmode)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_Sort(PyArrayObject *op, int axis, NPY_SORTKIND which)
 | |
| 
 | |
| Sort an array in-place
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_ArgSort(PyArrayObject *op, int axis, NPY_SORTKIND which)
 | |
| 
 | |
| ArgSort an array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_SearchSorted(PyArrayObject *op1, PyObject *op2, NPY_SEARCHSIDE
 | |
|                        side, PyObject *perm)
 | |
| 
 | |
| 
 | |
| Search the sorted array op1 for the location of the items in op2. The
 | |
| result is an array of indexes, one for each element in op2, such that if
 | |
| the item were to be inserted in op1 just before that index the array
 | |
| would still be in sorted order.
 | |
| 
 | |
| Parameters
 | |
| ----------
 | |
| op1 : PyArrayObject *
 | |
| Array to be searched, must be 1-D.
 | |
| op2 : PyObject *
 | |
| Array of items whose insertion indexes in op1 are wanted
 | |
| side : {NPY_SEARCHLEFT, NPY_SEARCHRIGHT}
 | |
| If NPY_SEARCHLEFT, return first valid insertion indexes
 | |
| If NPY_SEARCHRIGHT, return last valid insertion indexes
 | |
| perm : PyObject *
 | |
| Permutation array that sorts op1 (optional)
 | |
| 
 | |
| Returns
 | |
| -------
 | |
| ret : PyObject *
 | |
| New reference to npy_intp array containing indexes where items in op2
 | |
| could be validly inserted into op1. NULL on error.
 | |
| 
 | |
| Notes
 | |
| -----
 | |
| Binary search is used to find the indexes.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_ArgMax(PyArrayObject *op, int axis, PyArrayObject *out)
 | |
| 
 | |
| ArgMax
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_ArgMin(PyArrayObject *op, int axis, PyArrayObject *out)
 | |
| 
 | |
| ArgMin
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Reshape(PyArrayObject *self, PyObject *shape)
 | |
| 
 | |
| Reshape
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Newshape(PyArrayObject *self, PyArray_Dims *newdims, NPY_ORDER
 | |
|                    order)
 | |
| 
 | |
| New shape for an array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Squeeze(PyArrayObject *self)
 | |
| 
 | |
| 
 | |
| return a new view of the array object with all of its unit-length
 | |
| dimensions squeezed out if needed, otherwise
 | |
| return the same array.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_View(PyArrayObject *self, PyArray_Descr *type, PyTypeObject
 | |
|                *pytype)
 | |
| 
 | |
| View
 | |
| steals a reference to type -- accepts NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_SwapAxes(PyArrayObject *ap, int a1, int a2)
 | |
| 
 | |
| SwapAxes
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Max(PyArrayObject *ap, int axis, PyArrayObject *out)
 | |
| 
 | |
| Max
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Min(PyArrayObject *ap, int axis, PyArrayObject *out)
 | |
| 
 | |
| Min
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Ptp(PyArrayObject *ap, int axis, PyArrayObject *out)
 | |
| 
 | |
| Ptp
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Mean(PyArrayObject *self, int axis, int rtype, PyArrayObject
 | |
|                *out)
 | |
| 
 | |
| Mean
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Trace(PyArrayObject *self, int offset, int axis1, int
 | |
|                 axis2, int rtype, PyArrayObject *out)
 | |
| 
 | |
| Trace
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Diagonal(PyArrayObject *self, int offset, int axis1, int
 | |
|                    axis2)
 | |
| 
 | |
| Diagonal
 | |
| 
 | |
| In NumPy versions prior to 1.7,  this function always returned a copy of
 | |
| the diagonal array. In 1.7, the code has been updated to compute a view
 | |
| onto 'self', but it still copies this array before returning, as well as
 | |
| setting the internal WARN_ON_WRITE flag. In a future version, it will
 | |
| simply return a view onto self.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Clip(PyArrayObject *self, PyObject *min, PyObject
 | |
|                *max, PyArrayObject *out)
 | |
| 
 | |
| Clip
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Conjugate(PyArrayObject *self, PyArrayObject *out)
 | |
| 
 | |
| Conjugate
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Nonzero(PyArrayObject *self)
 | |
| 
 | |
| Nonzero
 | |
| 
 | |
| TODO: In NumPy 2.0, should make the iteration order a parameter.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Std(PyArrayObject *self, int axis, int rtype, PyArrayObject
 | |
|               *out, int variance)
 | |
| 
 | |
| Set variance to 1 to by-pass square-root calculation and return variance
 | |
| Std
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Sum(PyArrayObject *self, int axis, int rtype, PyArrayObject
 | |
|               *out)
 | |
| 
 | |
| Sum
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_CumSum(PyArrayObject *self, int axis, int rtype, PyArrayObject
 | |
|                  *out)
 | |
| 
 | |
| CumSum
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Prod(PyArrayObject *self, int axis, int rtype, PyArrayObject
 | |
|                *out)
 | |
| 
 | |
| Prod
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_CumProd(PyArrayObject *self, int axis, int
 | |
|                   rtype, PyArrayObject *out)
 | |
| 
 | |
| CumProd
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_All(PyArrayObject *self, int axis, PyArrayObject *out)
 | |
| 
 | |
| All
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Any(PyArrayObject *self, int axis, PyArrayObject *out)
 | |
| 
 | |
| Any
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Compress(PyArrayObject *self, PyObject *condition, int
 | |
|                    axis, PyArrayObject *out)
 | |
| 
 | |
| Compress
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Flatten(PyArrayObject *a, NPY_ORDER order)
 | |
| 
 | |
| Flatten
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Ravel(PyArrayObject *arr, NPY_ORDER order)
 | |
| 
 | |
| Ravel
 | |
| Returns a contiguous array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   PyArray_MultiplyList(npy_intp *l1, int n)
 | |
| 
 | |
| Multiply a List
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_MultiplyIntList(int *l1, int n)
 | |
| 
 | |
| Multiply a List of ints
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void *
 | |
|   PyArray_GetPtr(PyArrayObject *obj, npy_intp*ind)
 | |
| 
 | |
| Produce a pointer into array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CompareLists(npy_intp *l1, npy_intp *l2, int n)
 | |
| 
 | |
| Compare Lists
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_AsCArray(PyObject **op, void *ptr, npy_intp *dims, int
 | |
|                    nd, PyArray_Descr*typedescr)
 | |
| 
 | |
| Simulate a C-array
 | |
| steals a reference to typedescr -- can be NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_As1D(PyObject **op, char **ptr, int *d1, int typecode)
 | |
| 
 | |
| Convert to a 1D C-array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_As2D(PyObject **op, char ***ptr, int *d1, int *d2, int
 | |
|                typecode)
 | |
| 
 | |
| Convert to a 2D C-array
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_Free(PyObject *op, void *ptr)
 | |
| 
 | |
| Free pointers created if As2D is called
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_Converter(PyObject *object, PyObject **address)
 | |
| 
 | |
| 
 | |
| Useful to pass as converter function for O& processing in PyArgs_ParseTuple.
 | |
| 
 | |
| This conversion function can be used with the "O&" argument for
 | |
| PyArg_ParseTuple.  It will immediately return an object of array type
 | |
| or will convert to a NPY_ARRAY_CARRAY any other object.
 | |
| 
 | |
| If you use PyArray_Converter, you must DECREF the array when finished
 | |
| as you get a new reference to it.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_IntpFromSequence(PyObject *seq, npy_intp *vals, int maxvals)
 | |
| 
 | |
| PyArray_IntpFromSequence
 | |
| Returns the number of dimensions or -1 if an error occurred.
 | |
| vals must be large enough to hold maxvals
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Concatenate(PyObject *op, int axis)
 | |
| 
 | |
| Concatenate
 | |
| 
 | |
| Concatenate an arbitrary Python sequence into an array.
 | |
| op is a python object supporting the sequence interface.
 | |
| Its elements will be concatenated together to form a single
 | |
| multidimensional array. If axis is NPY_MAXDIMS or bigger, then
 | |
| each sequence object will be flattened before concatenation
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_InnerProduct(PyObject *op1, PyObject *op2)
 | |
| 
 | |
| Numeric.innerproduct(a,v)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_MatrixProduct(PyObject *op1, PyObject *op2)
 | |
| 
 | |
| Numeric.matrixproduct(a,v)
 | |
| just like inner product but does the swapaxes stuff on the fly
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_CopyAndTranspose(PyObject *op)
 | |
| 
 | |
| Copy and Transpose
 | |
| 
 | |
| Could deprecate this function, as there isn't a speed benefit over
 | |
| calling Transpose and then Copy.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Correlate(PyObject *op1, PyObject *op2, int mode)
 | |
| 
 | |
| Numeric.correlate(a1,a2,mode)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_TypestrConvert(int itemsize, int gentype)
 | |
| 
 | |
| Typestr converter
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_DescrConverter(PyObject *obj, PyArray_Descr **at)
 | |
| 
 | |
| Get typenum from an object -- None goes to NPY_DEFAULT_TYPE
 | |
| This function takes a Python object representing a type and converts it
 | |
| to a the correct PyArray_Descr * structure to describe the type.
 | |
| 
 | |
| Many objects can be used to represent a data-type which in NumPy is
 | |
| quite a flexible concept.
 | |
| 
 | |
| This is the central code that converts Python objects to
 | |
| Type-descriptor objects that are used throughout numpy.
 | |
| 
 | |
| Returns a new reference in *at, but the returned should not be
 | |
| modified as it may be one of the canonical immutable objects or
 | |
| a reference to the input obj.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_DescrConverter2(PyObject *obj, PyArray_Descr **at)
 | |
| 
 | |
| Get typenum from an object -- None goes to NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_IntpConverter(PyObject *obj, PyArray_Dims *seq)
 | |
| 
 | |
| Get intp chunk from sequence
 | |
| 
 | |
| This function takes a Python sequence object and allocates and
 | |
| fills in an intp array with the converted values.
 | |
| 
 | |
| Remember to free the pointer seq.ptr when done using
 | |
| PyDimMem_FREE(seq.ptr)**
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_BufferConverter(PyObject *obj, PyArray_Chunk *buf)
 | |
| 
 | |
| Get buffer chunk from object
 | |
| 
 | |
| this function takes a Python object which exposes the (single-segment)
 | |
| buffer interface and returns a pointer to the data segment
 | |
| 
 | |
| You should increment the reference count by one of buf->base
 | |
| if you will hang on to a reference
 | |
| 
 | |
| You only get a borrowed reference to the object. Do not free the
 | |
| memory...
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_AxisConverter(PyObject *obj, int *axis)
 | |
| 
 | |
| Get axis from an object (possibly None) -- a converter function,
 | |
| 
 | |
| See also PyArray_ConvertMultiAxis, which also handles a tuple of axes.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_BoolConverter(PyObject *object, npy_bool *val)
 | |
| 
 | |
| Convert an object to true / false
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_ByteorderConverter(PyObject *obj, char *endian)
 | |
| 
 | |
| Convert object to endian
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_OrderConverter(PyObject *object, NPY_ORDER *val)
 | |
| 
 | |
| Convert an object to FORTRAN / C / ANY / KEEP
 | |
| 
 | |
| ::
 | |
| 
 | |
|   unsigned char
 | |
|   PyArray_EquivTypes(PyArray_Descr *type1, PyArray_Descr *type2)
 | |
| 
 | |
| 
 | |
| This function returns true if the two typecodes are
 | |
| equivalent (same basic kind and same itemsize).
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Zeros(int nd, npy_intp *dims, PyArray_Descr *type, int
 | |
|                 is_f_order)
 | |
| 
 | |
| Zeros
 | |
| 
 | |
| steal a reference
 | |
| accepts NULL type
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Empty(int nd, npy_intp *dims, PyArray_Descr *type, int
 | |
|                 is_f_order)
 | |
| 
 | |
| Empty
 | |
| 
 | |
| accepts NULL type
 | |
| steals referenct to type
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Where(PyObject *condition, PyObject *x, PyObject *y)
 | |
| 
 | |
| Where
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Arange(double start, double stop, double step, int type_num)
 | |
| 
 | |
| Arange,
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_ArangeObj(PyObject *start, PyObject *stop, PyObject
 | |
|                     *step, PyArray_Descr *dtype)
 | |
| 
 | |
| 
 | |
| ArangeObj,
 | |
| 
 | |
| this doesn't change the references
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_SortkindConverter(PyObject *obj, NPY_SORTKIND *sortkind)
 | |
| 
 | |
| Convert object to sort kind
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_LexSort(PyObject *sort_keys, int axis)
 | |
| 
 | |
| LexSort an array providing indices that will sort a collection of arrays
 | |
| lexicographically.  The first key is sorted on first, followed by the second key
 | |
| -- requires that arg"merge"sort is available for each sort_key
 | |
| 
 | |
| Returns an index array that shows the indexes for the lexicographic sort along
 | |
| the given axis.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Round(PyArrayObject *a, int decimals, PyArrayObject *out)
 | |
| 
 | |
| Round
 | |
| 
 | |
| ::
 | |
| 
 | |
|   unsigned char
 | |
|   PyArray_EquivTypenums(int typenum1, int typenum2)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_RegisterDataType(PyArray_Descr *descr)
 | |
| 
 | |
| Register Data type
 | |
| Does not change the reference count of descr
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_RegisterCastFunc(PyArray_Descr *descr, int
 | |
|                            totype, PyArray_VectorUnaryFunc *castfunc)
 | |
| 
 | |
| Register Casting Function
 | |
| Replaces any function currently stored.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_RegisterCanCast(PyArray_Descr *descr, int
 | |
|                           totype, NPY_SCALARKIND scalar)
 | |
| 
 | |
| Register a type number indicating that a descriptor can be cast
 | |
| to it safely
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_InitArrFuncs(PyArray_ArrFuncs *f)
 | |
| 
 | |
| Initialize arrfuncs to NULL
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_IntTupleFromIntp(int len, npy_intp *vals)
 | |
| 
 | |
| PyArray_IntTupleFromIntp
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_TypeNumFromName(char *str)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_ClipmodeConverter(PyObject *object, NPY_CLIPMODE *val)
 | |
| 
 | |
| Convert an object to NPY_RAISE / NPY_CLIP / NPY_WRAP
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_OutputConverter(PyObject *object, PyArrayObject **address)
 | |
| 
 | |
| Useful to pass as converter function for O& processing in
 | |
| PyArgs_ParseTuple for output arrays
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_BroadcastToShape(PyObject *obj, npy_intp *dims, int nd)
 | |
| 
 | |
| Get Iterator broadcast to a particular shape
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   _PyArray_SigintHandler(int signum)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void*
 | |
|   _PyArray_GetSigintBuf(void )
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_DescrAlignConverter(PyObject *obj, PyArray_Descr **at)
 | |
| 
 | |
| 
 | |
| Get type-descriptor from an object forcing alignment if possible
 | |
| None goes to DEFAULT type.
 | |
| 
 | |
| any object with the .fields attribute and/or .itemsize attribute (if the
 | |
| .fields attribute does not give the total size -- i.e. a partial record
 | |
| naming).  If itemsize is given it must be >= size computed from fields
 | |
| 
 | |
| The .fields attribute must return a convertible dictionary if present.
 | |
| Result inherits from NPY_VOID.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_DescrAlignConverter2(PyObject *obj, PyArray_Descr **at)
 | |
| 
 | |
| 
 | |
| Get type-descriptor from an object forcing alignment if possible
 | |
| None goes to NULL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_SearchsideConverter(PyObject *obj, void *addr)
 | |
| 
 | |
| Convert object to searchsorted side
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_CheckAxis(PyArrayObject *arr, int *axis, int flags)
 | |
| 
 | |
| PyArray_CheckAxis
 | |
| 
 | |
| check that axis is valid
 | |
| convert 0-d arrays to 1-d arrays
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   PyArray_OverflowMultiplyList(npy_intp *l1, int n)
 | |
| 
 | |
| Multiply a List of Non-negative numbers with over-flow detection.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CompareString(char *s1, char *s2, size_t len)
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_MultiIterFromObjects(PyObject **mps, int n, int nadd, ... )
 | |
| 
 | |
| Get MultiIterator from array of Python objects and any additional
 | |
| 
 | |
| PyObject **mps -- array of PyObjects
 | |
| int n - number of PyObjects in the array
 | |
| int nadd - number of additional arrays to include in the iterator.
 | |
| 
 | |
| Returns a multi-iterator object.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_GetEndianness(void )
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   unsigned int
 | |
|   PyArray_GetNDArrayCFeatureVersion(void )
 | |
| 
 | |
| Returns the built-in (at compilation time) C API version
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_Correlate2(PyObject *op1, PyObject *op2, int mode)
 | |
| 
 | |
| correlate(a1,a2,mode)
 | |
| 
 | |
| This function computes the usual correlation (correlate(a1, a2) !=
 | |
| correlate(a2, a1), and conjugate the second argument for complex inputs
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject*
 | |
|   PyArray_NeighborhoodIterNew(PyArrayIterObject *x, npy_intp
 | |
|                               *bounds, int mode, PyArrayObject*fill)
 | |
| 
 | |
| A Neighborhood Iterator object.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_SetDatetimeParseFunction(PyObject *op)
 | |
| 
 | |
| This function is scheduled to be removed
 | |
| 
 | |
| TO BE REMOVED - NOT USED INTERNALLY.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_DatetimeToDatetimeStruct(npy_datetime val, NPY_DATETIMEUNIT
 | |
|                                    fr, npy_datetimestruct *result)
 | |
| 
 | |
| Fill the datetime struct from the value and resolution unit.
 | |
| 
 | |
| TO BE REMOVED - NOT USED INTERNALLY.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_TimedeltaToTimedeltaStruct(npy_timedelta val, NPY_DATETIMEUNIT
 | |
|                                      fr, npy_timedeltastruct *result)
 | |
| 
 | |
| Fill the timedelta struct from the timedelta value and resolution unit.
 | |
| 
 | |
| TO BE REMOVED - NOT USED INTERNALLY.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_datetime
 | |
|   PyArray_DatetimeStructToDatetime(NPY_DATETIMEUNIT
 | |
|                                    fr, npy_datetimestruct *d)
 | |
| 
 | |
| Create a datetime value from a filled datetime struct and resolution unit.
 | |
| 
 | |
| TO BE REMOVED - NOT USED INTERNALLY.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_datetime
 | |
|   PyArray_TimedeltaStructToTimedelta(NPY_DATETIMEUNIT
 | |
|                                      fr, npy_timedeltastruct *d)
 | |
| 
 | |
| Create a timdelta value from a filled timedelta struct and resolution unit.
 | |
| 
 | |
| TO BE REMOVED - NOT USED INTERNALLY.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   NpyIter *
 | |
|   NpyIter_New(PyArrayObject *op, npy_uint32 flags, NPY_ORDER
 | |
|               order, NPY_CASTING casting, PyArray_Descr*dtype)
 | |
| 
 | |
| Allocate a new iterator for one array object.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   NpyIter *
 | |
|   NpyIter_MultiNew(int nop, PyArrayObject **op_in, npy_uint32
 | |
|                    flags, NPY_ORDER order, NPY_CASTING
 | |
|                    casting, npy_uint32 *op_flags, PyArray_Descr
 | |
|                    **op_request_dtypes)
 | |
| 
 | |
| Allocate a new iterator for more than one array object, using
 | |
| standard NumPy broadcasting rules and the default buffer size.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   NpyIter *
 | |
|   NpyIter_AdvancedNew(int nop, PyArrayObject **op_in, npy_uint32
 | |
|                       flags, NPY_ORDER order, NPY_CASTING
 | |
|                       casting, npy_uint32 *op_flags, PyArray_Descr
 | |
|                       **op_request_dtypes, int oa_ndim, int
 | |
|                       **op_axes, npy_intp *itershape, npy_intp
 | |
|                       buffersize)
 | |
| 
 | |
| Allocate a new iterator for multiple array objects, and advanced
 | |
| options for controlling the broadcasting, shape, and buffer size.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   NpyIter *
 | |
|   NpyIter_Copy(NpyIter *iter)
 | |
| 
 | |
| Makes a copy of the iterator
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_Deallocate(NpyIter *iter)
 | |
| 
 | |
| Deallocate an iterator
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_HasDelayedBufAlloc(NpyIter *iter)
 | |
| 
 | |
| Whether the buffer allocation is being delayed
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_HasExternalLoop(NpyIter *iter)
 | |
| 
 | |
| Whether the iterator handles the inner loop
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_EnableExternalLoop(NpyIter *iter)
 | |
| 
 | |
| Removes the inner loop handling (so HasExternalLoop returns true)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp *
 | |
|   NpyIter_GetInnerStrideArray(NpyIter *iter)
 | |
| 
 | |
| Get the array of strides for the inner loop (when HasExternalLoop is true)
 | |
| 
 | |
| This function may be safely called without holding the Python GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp *
 | |
|   NpyIter_GetInnerLoopSizePtr(NpyIter *iter)
 | |
| 
 | |
| Get a pointer to the size of the inner loop  (when HasExternalLoop is true)
 | |
| 
 | |
| This function may be safely called without holding the Python GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_Reset(NpyIter *iter, char **errmsg)
 | |
| 
 | |
| Resets the iterator to its initial state
 | |
| 
 | |
| If errmsg is non-NULL, it should point to a variable which will
 | |
| receive the error message, and no Python exception will be set.
 | |
| This is so that the function can be called from code not holding
 | |
| the GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_ResetBasePointers(NpyIter *iter, char **baseptrs, char
 | |
|                             **errmsg)
 | |
| 
 | |
| Resets the iterator to its initial state, with new base data pointers.
 | |
| This function requires great caution.
 | |
| 
 | |
| If errmsg is non-NULL, it should point to a variable which will
 | |
| receive the error message, and no Python exception will be set.
 | |
| This is so that the function can be called from code not holding
 | |
| the GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_ResetToIterIndexRange(NpyIter *iter, npy_intp istart, npy_intp
 | |
|                                 iend, char **errmsg)
 | |
| 
 | |
| Resets the iterator to a new iterator index range
 | |
| 
 | |
| If errmsg is non-NULL, it should point to a variable which will
 | |
| receive the error message, and no Python exception will be set.
 | |
| This is so that the function can be called from code not holding
 | |
| the GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_GetNDim(NpyIter *iter)
 | |
| 
 | |
| Gets the number of dimensions being iterated
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_GetNOp(NpyIter *iter)
 | |
| 
 | |
| Gets the number of operands being iterated
 | |
| 
 | |
| ::
 | |
| 
 | |
|   NpyIter_IterNextFunc *
 | |
|   NpyIter_GetIterNext(NpyIter *iter, char **errmsg)
 | |
| 
 | |
| Compute the specialized iteration function for an iterator
 | |
| 
 | |
| If errmsg is non-NULL, it should point to a variable which will
 | |
| receive the error message, and no Python exception will be set.
 | |
| This is so that the function can be called from code not holding
 | |
| the GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   NpyIter_GetIterSize(NpyIter *iter)
 | |
| 
 | |
| Gets the number of elements being iterated
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   NpyIter_GetIterIndexRange(NpyIter *iter, npy_intp *istart, npy_intp
 | |
|                             *iend)
 | |
| 
 | |
| Gets the range of iteration indices being iterated
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   NpyIter_GetIterIndex(NpyIter *iter)
 | |
| 
 | |
| Gets the current iteration index
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_GotoIterIndex(NpyIter *iter, npy_intp iterindex)
 | |
| 
 | |
| Sets the iterator position to the specified iterindex,
 | |
| which matches the iteration order of the iterator.
 | |
| 
 | |
| Returns NPY_SUCCEED on success, NPY_FAIL on failure.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_HasMultiIndex(NpyIter *iter)
 | |
| 
 | |
| Whether the iterator is tracking a multi-index
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_GetShape(NpyIter *iter, npy_intp *outshape)
 | |
| 
 | |
| Gets the broadcast shape if a multi-index is being tracked by the iterator,
 | |
| otherwise gets the shape of the iteration as Fortran-order
 | |
| (fastest-changing index first).
 | |
| 
 | |
| The reason Fortran-order is returned when a multi-index
 | |
| is not enabled is that this is providing a direct view into how
 | |
| the iterator traverses the n-dimensional space. The iterator organizes
 | |
| its memory from fastest index to slowest index, and when
 | |
| a multi-index is enabled, it uses a permutation to recover the original
 | |
| order.
 | |
| 
 | |
| Returns NPY_SUCCEED or NPY_FAIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   NpyIter_GetMultiIndexFunc *
 | |
|   NpyIter_GetGetMultiIndex(NpyIter *iter, char **errmsg)
 | |
| 
 | |
| Compute a specialized get_multi_index function for the iterator
 | |
| 
 | |
| If errmsg is non-NULL, it should point to a variable which will
 | |
| receive the error message, and no Python exception will be set.
 | |
| This is so that the function can be called from code not holding
 | |
| the GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_GotoMultiIndex(NpyIter *iter, npy_intp *multi_index)
 | |
| 
 | |
| Sets the iterator to the specified multi-index, which must have the
 | |
| correct number of entries for 'ndim'.  It is only valid
 | |
| when NPY_ITER_MULTI_INDEX was passed to the constructor.  This operation
 | |
| fails if the multi-index is out of bounds.
 | |
| 
 | |
| Returns NPY_SUCCEED on success, NPY_FAIL on failure.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_RemoveMultiIndex(NpyIter *iter)
 | |
| 
 | |
| Removes multi-index support from an iterator.
 | |
| 
 | |
| Returns NPY_SUCCEED or NPY_FAIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_HasIndex(NpyIter *iter)
 | |
| 
 | |
| Whether the iterator is tracking an index
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_IsBuffered(NpyIter *iter)
 | |
| 
 | |
| Whether the iterator is buffered
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_IsGrowInner(NpyIter *iter)
 | |
| 
 | |
| Whether the inner loop can grow if buffering is unneeded
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   NpyIter_GetBufferSize(NpyIter *iter)
 | |
| 
 | |
| Gets the size of the buffer, or 0 if buffering is not enabled
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp *
 | |
|   NpyIter_GetIndexPtr(NpyIter *iter)
 | |
| 
 | |
| Get a pointer to the index, if it is being tracked
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_GotoIndex(NpyIter *iter, npy_intp flat_index)
 | |
| 
 | |
| If the iterator is tracking an index, sets the iterator
 | |
| to the specified index.
 | |
| 
 | |
| Returns NPY_SUCCEED on success, NPY_FAIL on failure.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   char **
 | |
|   NpyIter_GetDataPtrArray(NpyIter *iter)
 | |
| 
 | |
| Get the array of data pointers (1 per object being iterated)
 | |
| 
 | |
| This function may be safely called without holding the Python GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr **
 | |
|   NpyIter_GetDescrArray(NpyIter *iter)
 | |
| 
 | |
| Get the array of data type pointers (1 per object being iterated)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArrayObject **
 | |
|   NpyIter_GetOperandArray(NpyIter *iter)
 | |
| 
 | |
| Get the array of objects being iterated
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArrayObject *
 | |
|   NpyIter_GetIterView(NpyIter *iter, npy_intp i)
 | |
| 
 | |
| Returns a view to the i-th object with the iterator's internal axes
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   NpyIter_GetReadFlags(NpyIter *iter, char *outreadflags)
 | |
| 
 | |
| Gets an array of read flags (1 per object being iterated)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   NpyIter_GetWriteFlags(NpyIter *iter, char *outwriteflags)
 | |
| 
 | |
| Gets an array of write flags (1 per object being iterated)
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   NpyIter_DebugPrint(NpyIter *iter)
 | |
| 
 | |
| For debugging
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_IterationNeedsAPI(NpyIter *iter)
 | |
| 
 | |
| Whether the iteration loop, and in particular the iternext()
 | |
| function, needs API access.  If this is true, the GIL must
 | |
| be retained while iterating.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   NpyIter_GetInnerFixedStrideArray(NpyIter *iter, npy_intp *out_strides)
 | |
| 
 | |
| Get an array of strides which are fixed.  Any strides which may
 | |
| change during iteration receive the value NPY_MAX_INTP.  Once
 | |
| the iterator is ready to iterate, call this to get the strides
 | |
| which will always be fixed in the inner loop, then choose optimized
 | |
| inner loop functions which take advantage of those fixed strides.
 | |
| 
 | |
| This function may be safely called without holding the Python GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_RemoveAxis(NpyIter *iter, int axis)
 | |
| 
 | |
| Removes an axis from iteration. This requires that NPY_ITER_MULTI_INDEX
 | |
| was set for iterator creation, and does not work if buffering is
 | |
| enabled. This function also resets the iterator to its initial state.
 | |
| 
 | |
| Returns NPY_SUCCEED or NPY_FAIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp *
 | |
|   NpyIter_GetAxisStrideArray(NpyIter *iter, int axis)
 | |
| 
 | |
| Gets the array of strides for the specified axis.
 | |
| If the iterator is tracking a multi-index, gets the strides
 | |
| for the axis specified, otherwise gets the strides for
 | |
| the iteration axis as Fortran order (fastest-changing axis first).
 | |
| 
 | |
| Returns NULL if an error occurs.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_RequiresBuffering(NpyIter *iter)
 | |
| 
 | |
| Whether the iteration could be done with no buffering.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   char **
 | |
|   NpyIter_GetInitialDataPtrArray(NpyIter *iter)
 | |
| 
 | |
| Get the array of data pointers (1 per object being iterated),
 | |
| directly into the arrays (never pointing to a buffer), for starting
 | |
| unbuffered iteration. This always returns the addresses for the
 | |
| iterator position as reset to iterator index 0.
 | |
| 
 | |
| These pointers are different from the pointers accepted by
 | |
| NpyIter_ResetBasePointers, because the direction along some
 | |
| axes may have been reversed, requiring base offsets.
 | |
| 
 | |
| This function may be safely called without holding the Python GIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   NpyIter_CreateCompatibleStrides(NpyIter *iter, npy_intp
 | |
|                                   itemsize, npy_intp *outstrides)
 | |
| 
 | |
| Builds a set of strides which are the same as the strides of an
 | |
| output array created using the NPY_ITER_ALLOCATE flag, where NULL
 | |
| was passed for op_axes.  This is for data packed contiguously,
 | |
| but not necessarily in C or Fortran order. This should be used
 | |
| together with NpyIter_GetShape and NpyIter_GetNDim.
 | |
| 
 | |
| A use case for this function is to match the shape and layout of
 | |
| the iterator and tack on one or more dimensions.  For example,
 | |
| in order to generate a vector per input value for a numerical gradient,
 | |
| you pass in ndim*itemsize for itemsize, then add another dimension to
 | |
| the end with size ndim and stride itemsize.  To do the Hessian matrix,
 | |
| you do the same thing but add two dimensions, or take advantage of
 | |
| the symmetry and pack it into 1 dimension with a particular encoding.
 | |
| 
 | |
| This function may only be called if the iterator is tracking a multi-index
 | |
| and if NPY_ITER_DONT_NEGATE_STRIDES was used to prevent an axis from
 | |
| being iterated in reverse order.
 | |
| 
 | |
| If an array is created with this method, simply adding 'itemsize'
 | |
| for each iteration will traverse the new array matching the
 | |
| iterator.
 | |
| 
 | |
| Returns NPY_SUCCEED or NPY_FAIL.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_CastingConverter(PyObject *obj, NPY_CASTING *casting)
 | |
| 
 | |
| Convert any Python object, *obj*, to an NPY_CASTING enum.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_intp
 | |
|   PyArray_CountNonzero(PyArrayObject *self)
 | |
| 
 | |
| Counts the number of non-zero elements in the array.
 | |
| 
 | |
| Returns -1 on error.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_PromoteTypes(PyArray_Descr *type1, PyArray_Descr *type2)
 | |
| 
 | |
| Produces the smallest size and lowest kind type to which both
 | |
| input types can be cast.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_MinScalarType(PyArrayObject *arr)
 | |
| 
 | |
| If arr is a scalar (has 0 dimensions) with a built-in number data type,
 | |
| finds the smallest type size/kind which can still represent its data.
 | |
| Otherwise, returns the array's data type.
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArray_Descr *
 | |
|   PyArray_ResultType(npy_intp narrs, PyArrayObject **arr, npy_intp
 | |
|                      ndtypes, PyArray_Descr **dtypes)
 | |
| 
 | |
| Produces the result type of a bunch of inputs, using the UFunc
 | |
| type promotion rules. Use this function when you have a set of
 | |
| input arrays, and need to determine an output array dtype.
 | |
| 
 | |
| If all the inputs are scalars (have 0 dimensions) or the maximum "kind"
 | |
| of the scalars is greater than the maximum "kind" of the arrays, does
 | |
| a regular type promotion.
 | |
| 
 | |
| Otherwise, does a type promotion on the MinScalarType
 | |
| of all the inputs.  Data types passed directly are treated as array
 | |
| types.
 | |
| 
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   PyArray_CanCastArrayTo(PyArrayObject *arr, PyArray_Descr
 | |
|                          *to, NPY_CASTING casting)
 | |
| 
 | |
| Returns 1 if the array object may be cast to the given data type using
 | |
| the casting rule, 0 otherwise.  This differs from PyArray_CanCastTo in
 | |
| that it handles scalar arrays (0 dimensions) specially, by checking
 | |
| their value.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   PyArray_CanCastTypeTo(PyArray_Descr *from, PyArray_Descr
 | |
|                         *to, NPY_CASTING casting)
 | |
| 
 | |
| Returns true if data of type 'from' may be cast to data of type
 | |
| 'to' according to the rule 'casting'.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyArrayObject *
 | |
|   PyArray_EinsteinSum(char *subscripts, npy_intp nop, PyArrayObject
 | |
|                       **op_in, PyArray_Descr *dtype, NPY_ORDER
 | |
|                       order, NPY_CASTING casting, PyArrayObject *out)
 | |
| 
 | |
| This function provides summation of array elements according to
 | |
| the Einstein summation convention.  For example:
 | |
| - trace(a)        -> einsum("ii", a)
 | |
| - transpose(a)    -> einsum("ji", a)
 | |
| - multiply(a,b)   -> einsum(",", a, b)
 | |
| - inner(a,b)      -> einsum("i,i", a, b)
 | |
| - outer(a,b)      -> einsum("i,j", a, b)
 | |
| - matvec(a,b)     -> einsum("ij,j", a, b)
 | |
| - matmat(a,b)     -> einsum("ij,jk", a, b)
 | |
| 
 | |
| subscripts: The string of subscripts for einstein summation.
 | |
| nop:        The number of operands
 | |
| op_in:      The array of operands
 | |
| dtype:      Either NULL, or the data type to force the calculation as.
 | |
| order:      The order for the calculation/the output axes.
 | |
| casting:    What kind of casts should be permitted.
 | |
| out:        Either NULL, or an array into which the output should be placed.
 | |
| 
 | |
| By default, the labels get placed in alphabetical order
 | |
| at the end of the output. So, if c = einsum("i,j", a, b)
 | |
| then c[i,j] == a[i]*b[j], but if c = einsum("j,i", a, b)
 | |
| then c[i,j] = a[j]*b[i].
 | |
| 
 | |
| Alternatively, you can control the output order or prevent
 | |
| an axis from being summed/force an axis to be summed by providing
 | |
| indices for the output. This allows us to turn 'trace' into
 | |
| 'diag', for example.
 | |
| - diag(a)         -> einsum("ii->i", a)
 | |
| - sum(a, axis=0)  -> einsum("i...->", a)
 | |
| 
 | |
| Subscripts at the beginning and end may be specified by
 | |
| putting an ellipsis "..." in the middle.  For example,
 | |
| the function einsum("i...i", a) takes the diagonal of
 | |
| the first and last dimensions of the operand, and
 | |
| einsum("ij...,jk...->ik...") takes the matrix product using
 | |
| the first two indices of each operand instead of the last two.
 | |
| 
 | |
| When there is only one operand, no axes being summed, and
 | |
| no output parameter, this function returns a view
 | |
| into the operand instead of making a copy.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_NewLikeArray(PyArrayObject *prototype, NPY_ORDER
 | |
|                        order, PyArray_Descr *dtype, int subok)
 | |
| 
 | |
| Creates a new array with the same shape as the provided one,
 | |
| with possible memory layout order and data type changes.
 | |
| 
 | |
| prototype - The array the new one should be like.
 | |
| order     - NPY_CORDER - C-contiguous result.
 | |
| NPY_FORTRANORDER - Fortran-contiguous result.
 | |
| NPY_ANYORDER - Fortran if prototype is Fortran, C otherwise.
 | |
| NPY_KEEPORDER - Keeps the axis ordering of prototype.
 | |
| dtype     - If not NULL, overrides the data type of the result.
 | |
| subok     - If 1, use the prototype's array subtype, otherwise
 | |
| always create a base-class array.
 | |
| 
 | |
| NOTE: If dtype is not NULL, steals the dtype reference.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_GetArrayParamsFromObject(PyObject *op, PyArray_Descr
 | |
|                                    *requested_dtype, npy_bool
 | |
|                                    writeable, PyArray_Descr
 | |
|                                    **out_dtype, int *out_ndim, npy_intp
 | |
|                                    *out_dims, PyArrayObject
 | |
|                                    **out_arr, PyObject *context)
 | |
| 
 | |
| Retrieves the array parameters for viewing/converting an arbitrary
 | |
| PyObject* to a NumPy array. This allows the "innate type and shape"
 | |
| of Python list-of-lists to be discovered without
 | |
| actually converting to an array.
 | |
| 
 | |
| In some cases, such as structured arrays and the __array__ interface,
 | |
| a data type needs to be used to make sense of the object.  When
 | |
| this is needed, provide a Descr for 'requested_dtype', otherwise
 | |
| provide NULL. This reference is not stolen. Also, if the requested
 | |
| dtype doesn't modify the interpretation of the input, out_dtype will
 | |
| still get the "innate" dtype of the object, not the dtype passed
 | |
| in 'requested_dtype'.
 | |
| 
 | |
| If writing to the value in 'op' is desired, set the boolean
 | |
| 'writeable' to 1.  This raises an error when 'op' is a scalar, list
 | |
| of lists, or other non-writeable 'op'.
 | |
| 
 | |
| Result: When success (0 return value) is returned, either out_arr
 | |
| is filled with a non-NULL PyArrayObject and
 | |
| the rest of the parameters are untouched, or out_arr is
 | |
| filled with NULL, and the rest of the parameters are
 | |
| filled.
 | |
| 
 | |
| Typical usage:
 | |
| 
 | |
| PyArrayObject *arr = NULL;
 | |
| PyArray_Descr *dtype = NULL;
 | |
| int ndim = 0;
 | |
| npy_intp dims[NPY_MAXDIMS];
 | |
| 
 | |
| if (PyArray_GetArrayParamsFromObject(op, NULL, 1, &dtype,
 | |
| &ndim, &dims, &arr, NULL) < 0) {
 | |
| return NULL;
 | |
| }
 | |
| if (arr == NULL) {
 | |
| ... validate/change dtype, validate flags, ndim, etc ...
 | |
| // Could make custom strides here too
 | |
| arr = PyArray_NewFromDescr(&PyArray_Type, dtype, ndim,
 | |
| dims, NULL,
 | |
| is_f_order ? NPY_ARRAY_F_CONTIGUOUS : 0,
 | |
| NULL);
 | |
| if (arr == NULL) {
 | |
| return NULL;
 | |
| }
 | |
| if (PyArray_CopyObject(arr, op) < 0) {
 | |
| Py_DECREF(arr);
 | |
| return NULL;
 | |
| }
 | |
| }
 | |
| else {
 | |
| ... in this case the other parameters weren't filled, just
 | |
| validate and possibly copy arr itself ...
 | |
| }
 | |
| ... use arr ...
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_ConvertClipmodeSequence(PyObject *object, NPY_CLIPMODE
 | |
|                                   *modes, int n)
 | |
| 
 | |
| Convert an object to an array of n NPY_CLIPMODE values.
 | |
| This is intended to be used in functions where a different mode
 | |
| could be applied to each axis, like in ravel_multi_index.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyObject *
 | |
|   PyArray_MatrixProduct2(PyObject *op1, PyObject
 | |
|                          *op2, PyArrayObject*out)
 | |
| 
 | |
| Numeric.matrixproduct(a,v,out)
 | |
| just like inner product but does the swapaxes stuff on the fly
 | |
| 
 | |
| ::
 | |
| 
 | |
|   npy_bool
 | |
|   NpyIter_IsFirstVisit(NpyIter *iter, int iop)
 | |
| 
 | |
| Checks to see whether this is the first time the elements
 | |
| of the specified reduction operand which the iterator points at are
 | |
| being seen for the first time. The function returns
 | |
| a reasonable answer for reduction operands and when buffering is
 | |
| disabled. The answer may be incorrect for buffered non-reduction
 | |
| operands.
 | |
| 
 | |
| This function is intended to be used in EXTERNAL_LOOP mode only,
 | |
| and will produce some wrong answers when that mode is not enabled.
 | |
| 
 | |
| If this function returns true, the caller should also
 | |
| check the inner loop stride of the operand, because if
 | |
| that stride is 0, then only the first element of the innermost
 | |
| external loop is being visited for the first time.
 | |
| 
 | |
| WARNING: For performance reasons, 'iop' is not bounds-checked,
 | |
| it is not confirmed that 'iop' is actually a reduction
 | |
| operand, and it is not confirmed that EXTERNAL_LOOP
 | |
| mode is enabled. These checks are the responsibility of
 | |
| the caller, and should be done outside of any inner loops.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_SetBaseObject(PyArrayObject *arr, PyObject *obj)
 | |
| 
 | |
| Sets the 'base' attribute of the array. This steals a reference
 | |
| to 'obj'.
 | |
| 
 | |
| Returns 0 on success, -1 on failure.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_CreateSortedStridePerm(int ndim, npy_intp
 | |
|                                  *strides, npy_stride_sort_item
 | |
|                                  *out_strideperm)
 | |
| 
 | |
| 
 | |
| This function populates the first ndim elements
 | |
| of strideperm with sorted descending by their absolute values.
 | |
| For example, the stride array (4, -2, 12) becomes
 | |
| [(2, 12), (0, 4), (1, -2)].
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_RemoveAxesInPlace(PyArrayObject *arr, npy_bool *flags)
 | |
| 
 | |
| 
 | |
| Removes the axes flagged as True from the array,
 | |
| modifying it in place. If an axis flagged for removal
 | |
| has a shape entry bigger than one, this effectively selects
 | |
| index zero for that axis.
 | |
| 
 | |
| WARNING: If an axis flagged for removal has a shape equal to zero,
 | |
| the array will point to invalid memory. The caller must
 | |
| validate this!
 | |
| 
 | |
| For example, this can be used to remove the reduction axes
 | |
| from a reduction result once its computation is complete.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyArray_DebugPrint(PyArrayObject *obj)
 | |
| 
 | |
| Prints the raw data of the ndarray in a form useful for debugging
 | |
| low-level C issues.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_FailUnlessWriteable(PyArrayObject *obj, const char *name)
 | |
| 
 | |
| 
 | |
| This function does nothing if obj is writeable, and raises an exception
 | |
| (and returns -1) if obj is not writeable. It may also do other
 | |
| house-keeping, such as issuing warnings on arrays which are transitioning
 | |
| to become views. Always call this function at some point before writing to
 | |
| an array.
 | |
| 
 | |
| 'name' is a name for the array, used to give better error
 | |
| messages. Something like "assignment destination", "output array", or even
 | |
| just "array".
 | |
| 
 | |
| ::
 | |
| 
 | |
|   int
 | |
|   PyArray_SetUpdateIfCopyBase(PyArrayObject *arr, PyArrayObject *base)
 | |
| 
 | |
| 
 | |
| Precondition: 'arr' is a copy of 'base' (though possibly with different
 | |
| strides, ordering, etc.). This function sets the UPDATEIFCOPY flag and the
 | |
| ->base pointer on 'arr', so that when 'arr' is destructed, it will copy any
 | |
| changes back to 'base'.
 | |
| 
 | |
| Steals a reference to 'base'.
 | |
| 
 | |
| Returns 0 on success, -1 on failure.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void *
 | |
|   PyDataMem_NEW(size_t size)
 | |
| 
 | |
| Allocates memory for array data.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void
 | |
|   PyDataMem_FREE(void *ptr)
 | |
| 
 | |
| Free memory for array data.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   void *
 | |
|   PyDataMem_RENEW(void *ptr, size_t size)
 | |
| 
 | |
| Reallocate/resize memory for array data.
 | |
| 
 | |
| ::
 | |
| 
 | |
|   PyDataMem_EventHookFunc *
 | |
|   PyDataMem_SetEventHook(PyDataMem_EventHookFunc *newhook, void
 | |
|                          *user_data, void **old_data)
 | |
| 
 | |
| Sets the allocation event hook for numpy array data.
 | |
| Takes a PyDataMem_EventHookFunc *, which has the signature:
 | |
| void hook(void *old, void *new, size_t size, void *user_data).
 | |
| Also takes a void *user_data, and void **old_data.
 | |
| 
 | |
| Returns a pointer to the previous hook or NULL.  If old_data is
 | |
| non-NULL, the previous user_data pointer will be copied to it.
 | |
| 
 | |
| If not NULL, hook will be called at the end of each PyDataMem_NEW/FREE/RENEW:
 | |
| result = PyDataMem_NEW(size)        -> (*hook)(NULL, result, size, user_data)
 | |
| PyDataMem_FREE(ptr)                 -> (*hook)(ptr, NULL, 0, user_data)
 | |
| result = PyDataMem_RENEW(ptr, size) -> (*hook)(ptr, result, size, user_data)
 | |
| 
 | |
| When the hook is called, the GIL will be held by the calling
 | |
| thread.  The hook should be written to be reentrant, if it performs
 | |
| operations that might cause new allocation events (such as the
 | |
| creation/descruction numpy objects, or creating/destroying Python
 | |
| objects which might cause a gc)
 | |
| 
 |