type in the argument list is used as the key). The signatures are searched until a signature is found to which the input arrays can all be cast safely (ignoring any scalar arguments which are not allowed to determine the type of the result). The implication of this search procedure is that “lesser types” should be placed below“larger types” when the signatures are stored. If no 1-d loop is found, then an error is reported. Otherwise, the argument list is updated with the stored signature —in case casting is necessary and to fix the output types assumed by the 1-d loop.
If the ufunc has 2 inputs and 1 output and the second input is an Object array then a special-case check is performed so that NotImplemented is returned if the second input is not an ndarray, has the array priority attribute, and has an r<op> special method. In this way, Python is signaled to give the other object a chance to complete the operation instead of using generic object-array calculations. This allows (for example) sparse matrices to override the multiplication operator 1-d loop.
This section describes how the basic universal function computation loop is setup and executed for each of the three different kinds of execution possibilities. If NPY ALLOW THREADS is defined during compilation, then the Python Global
When the input and output arrays are aligned and of the correct type, but the striding is not uniform (non-contiguous and 2-d or larger), then a second looping structure is employed for the calculation. This approach converts all of the iterators for the input and output arguments to iterate over all but the largest dimension. The inner loop is then handled by the underlying 1-d computational loop. The outer loop is a standard iterator loop on the converted iterators. The hardware error flags are checked after each 1-d loop is completed.
188.8.131.52 Buffered Loop