[Numpy-discussion] NEP 37: A dispatch protocol for NumPy-like modules

Sebastian Berg sebastian at sipsolutions.net
Thu Apr 9 23:11:59 EDT 2020


On Thu, 2020-04-09 at 13:52 +0200, Ralf Gommers wrote:
> On Thu, Apr 9, 2020 at 12:02 AM Sebastian Berg <
> sebastian at sipsolutions.net>
> wrote:
> 
<snip>
> > 
> 
> I think it would be nice to have a separate NEP 37 implementation
> outside
> of NumPy to play with. Unlike __array_function__, I don't think it
> has to
> go into NumPy immediately. This avoids the whole "experimental API"
> issue,

Fair enough, I have created a hopefully working start here:

https://github.com/seberg/numpy_dispatch

(this is not tested much at all yet, so it could be very buggy).

There are a couple of additional features that I added.

1. A global opt-in (it is impossible to opt-out once opted in!)
2. A local opt-in (to guarantee opt-in if global flag is not set)
3. I added features to allow transitioning::

      get_array_module(*arrays, modules="numpy",
            future_modules=("dask.array", "cupy"), fallback="warn")

   Will give FutureWarning/DeprecationWarning where necessary, in the
   above "numpy" is supported, dask and cupy are supported but not
   enabled by default. `None` works to say "all modules".
   Once the transition is done, just move dask and cupy into `modules`
   and remove `fallback=None`.
4. If there are FutureWarnings/DeprecationWarnigs the user needs to be
   able to opt-in to future behaviour. Opting out can be done by
   casting inputs. Opting-in is done using::

      with future_dispatch_behavior():
          call_library_function()

Obviously, we may not want these features, but I was curious how we
could provide the tools to allow clean transitions.

Both context managers should be thread-safe, but I did not test that.

The best try would probably be cupy and sklearn again, so I will give a
ping on the sklearn PR. To make that easier, I tried to hack a bit of a
"util" to allow testing (please scroll down on the readme on github).

Best,

Sebastian



> it would be quite useful to test this with, e.g., CuPy + scikit-learn
> without being stuck with any decisions in a released NumPy version.
> Also
> makes switching on/off very easy for users, just (don't) `pip install
> numpy-array-module`.
> 
> Cheers,
> Ralf

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20200409/fc37cb73/attachment.sig>


More information about the NumPy-Discussion mailing list