summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/reference/c-api.generalized-ufuncs.rst7
-rw-r--r--doc/source/reference/c-api.ufunc.rst26
-rw-r--r--doc/source/reference/ufuncs.rst4
-rw-r--r--doc/source/user/c-info.ufunc-tutorial.rst1
-rw-r--r--numpy/core/include/numpy/ufuncobject.h2
5 files changed, 27 insertions, 13 deletions
diff --git a/doc/source/reference/c-api.generalized-ufuncs.rst b/doc/source/reference/c-api.generalized-ufuncs.rst
index a53228cb5..dd8cf6558 100644
--- a/doc/source/reference/c-api.generalized-ufuncs.rst
+++ b/doc/source/reference/c-api.generalized-ufuncs.rst
@@ -101,6 +101,7 @@ Dimension Index
enumerates the dimension names according to the order of the first
occurrence of each name in the signature.
+.. _details-of-signature:
Details of Signature
--------------------
@@ -126,9 +127,9 @@ The formal syntax of signatures is as follows::
<Output arguments> ::= <Argument list>
<Argument list> ::= nil | <Argument> | <Argument> "," <Argument list>
<Argument> ::= "(" <Core dimension list> ")"
- <Core dimension list> ::= nil | <Dimension name> |
- <Dimension name> "," <Core dimension list>
- <Dimension name> ::= valid Python variable name
+ <Core dimension list> ::= nil | <Core dimension name> |
+ <Core dimension name> "," <Core dimension list>
+ <Core dimension name> ::= valid Python variable name
Notes:
diff --git a/doc/source/reference/c-api.ufunc.rst b/doc/source/reference/c-api.ufunc.rst
index 79ad256f5..02a35cf56 100644
--- a/doc/source/reference/c-api.ufunc.rst
+++ b/doc/source/reference/c-api.ufunc.rst
@@ -93,12 +93,23 @@ Functions
the corresponding 1-d loop function in the func array.
:param types:
- Must be of length (*nin* + *nout*) \* *ntypes*, and it
- contains the data-types (built-in only) that the corresponding
- function in the *func* array can deal with.
+ Length ``(nin + nout) * ntypes`` array of ``char`` encoding the
+ :ref:`PyArray_Descr.type_num` (built-in only) that the corresponding
+ function in the ``func`` array accepts. For instance, for a comparison
+ ufunc with three ``ntypes``, two ``nin`` and one ``nout``, where the
+ first function accepts :ref:`npy_int32` and the the second
+ :ref:`npy_int64`, with both returning :ref:`npy_bool`, ``types`` would
+ be ``(char[]) {5, 5, 0, 7, 7, 0}`` since ``NPY_INT32`` is 5,
+ ``NPY_INT64`` is 7, and ``NPY_BOOL`` is 0 (on the python side, these
+ are exposed via :ref:`dtype.num`, i.e., for the example here,
+ ``dtype(np.int32).num``, ``dtype(np.int64).num``, and
+ ``dtype(np.bool_).num``, resp.).
+
+ :ref:`casting-rules` will be used at runtime to find the first
+ ``func`` callable by the input/output provided.
:param ntypes:
- How many different data-type "signatures" the ufunc has implemented.
+ How many different data-type-specific functions the ufunc has implemented.
:param nin:
The number of inputs to this operation.
@@ -129,10 +140,11 @@ Functions
int nin, int nout, int identity, char* name, char* doc, int unused, char *signature)
This function is very similar to PyUFunc_FromFuncAndData above, but has
- an extra *signature* argument, to define generalized universal functions.
+ an extra *signature* argument, to define a
+ :ref:`generalized universal functions <c-api.generalized-ufuncs>`.
Similarly to how ufuncs are built around an element-by-element operation,
- gufuncs are around subarray-by-subarray operations, the signature defining
- the subarrays to operate on.
+ gufuncs are around subarray-by-subarray operations, the
+ :ref:`signature <details-of-signature>` defining the subarrays to operate on.
:param signature:
The signature for the new gufunc. Setting it to NULL is equivalent
diff --git a/doc/source/reference/ufuncs.rst b/doc/source/reference/ufuncs.rst
index 68d85ccf5..995542d77 100644
--- a/doc/source/reference/ufuncs.rst
+++ b/doc/source/reference/ufuncs.rst
@@ -424,8 +424,8 @@ advanced usage and will not typically be used.
provided by the **types** attribute of the ufunc object. For backwards
compatibility this argument can also be provided as *sig*, although
the long form is preferred. Note that this should not be confused with
- the generalized ufunc signature that is stored in the **signature**
- attribute of the of the ufunc object.
+ the generalized ufunc :ref:`signature <details-of-signature>` that is
+ stored in the **signature** attribute of the of the ufunc object.
*extobj*
diff --git a/doc/source/user/c-info.ufunc-tutorial.rst b/doc/source/user/c-info.ufunc-tutorial.rst
index cfba01c45..5818ff182 100644
--- a/doc/source/user/c-info.ufunc-tutorial.rst
+++ b/doc/source/user/c-info.ufunc-tutorial.rst
@@ -1057,6 +1057,7 @@ PyUFunc_FromFuncAndData Specification
What follows is the full specification of PyUFunc_FromFuncAndData, which
automatically generates a ufunc from a C function with the correct signature.
+.. seealso:: :c:func:`PyUFunc_FromFuncAndDataAndSignature`
.. c:function:: PyObject *PyUFunc_FromFuncAndData( \
PyUFuncGenericFunction* func, void** data, char* types, int ntypes, \
diff --git a/numpy/core/include/numpy/ufuncobject.h b/numpy/core/include/numpy/ufuncobject.h
index d0ac1fd7d..4b1b3d325 100644
--- a/numpy/core/include/numpy/ufuncobject.h
+++ b/numpy/core/include/numpy/ufuncobject.h
@@ -167,7 +167,7 @@ typedef struct _tagPyUFuncObject {
int *core_dim_ixs;
/*
* positions of 1st core dimensions of each
- * argument in core_dim_ixs
+ * argument in core_dim_ixs, equivalent to cumsum(core_num_dims)
*/
int *core_offsets;
/* signature string for printing purpose */