[Numpy-discussion] Adding to the non-dispatched implementation of NumPy methods

Nathaniel Smith njs at pobox.com
Thu Apr 25 00:54:51 EDT 2019


On Wed, Apr 24, 2019 at 9:45 PM Stephan Hoyer <shoyer at gmail.com> wrote:
> With "__numpy_implementation__" I was hoping to evoke "the implementation used by numpy.ndarray.__array_function__" and "the implementation for NumPy arrays" rather than "the implementation found in the NumPy library." So it would still be appropriate to use on functions defined in SciPy, as long as they are defined on NumPy arrays.
>
> That said, this is clearly going to remain a source of confusion. So let's see if we can do better.
>
> Taking a step back, there will be three generic parts to NumPy functions after NEP-18:
> 1. Dispatching with __array_function__
> 2. Coercion to NumPy arrays (sometimes skipped if an object has the necessary duck-typing methods)
> 3. Implementation (either in C or is terms of other NumPy functions/methods)
>
> Currently, NumPy functions do steps (2) and (3) together. What we're asking for here is a way to continue this behavior in the future, by optionally skipping step (1). But in the future, as Marten notes below, we should not rule out cases where we also want to skip straight to step (3), without step (2).
>
> "__skipping_array_function__"  would be a reasonable choice, though it does not evoke the "numpy array specific"  aspect that I want to emphasis. Also, it has the unfortunate aspect of being named after what it doesn't do, rather than what it does.
>
> "__numpy_ndarray_implementation__" and "__numpy_array_implementation__" are a bit verbose, but maybe they would be better?

When you say "numpy array specific" and
"__numpy_(nd)array_implementation__", that sounds to me like you're
trying to say "just step 3, skipping steps 1 and 2"? Step 3 is the one
that operates on ndarrays...

When we have some kind of __asduckarray__ coercion, then that will
complicate things too, because presumably we'll do something like

1. __array_function__ dispatch
2. __asduckarray__ coercion
3. __array_function__ dispatch again
4. ndarray coercion
5. [either "the implementation", or __array_function__ dispatch again,
depending on how you want to think about it]

-n

-- 
Nathaniel J. Smith -- https://vorpus.org


More information about the NumPy-Discussion mailing list