Overload-NumPy Documentation#
numpy offers powerful methods to allow arguments of numpy functions (and
ufunc objects) to define how a given function operates on them. The details
are specified in NEP13 and NEP18, but in summary: normally numpy only works
on an ndarray but with NEP13/NEP18 for a custom object, users can register
overrides for a numpy function and then use that function on that object (a
quick example is outlined below). Plugging into the numpy framework is
convenient both for developers – to let numpy take care of the actual math –
and users – who get many things, not least of which is a familiar API. If all
this sounds great, that’s because it is. However, if you’ve read NEP13/NEP18
then you know that making the numpy bridge to your custom object and
registering overrides is non-trivial. That’s where overload_numpy comes in.
overload_numpy offers convenient base classes for the numpy bridge and
powerful methods to register overrides for functions, ufunc objects, and even
ufunc methods (e.g. .accumulate()). The library is fully typed and
(almost) fully c-transpiled for speed.
from dataclasses import dataclass
import numpy as np
@dataclass
class ArrayWrapper:
x: np.ndarray
... # lot's of non-trivial implementation details
aw = ArrayWrapper(np.arange(10))
np.add(aw, aw) # returns ArrayWrapper([0, 2, ...])
This package is being actively developed in a public repository on GitHub, and we are always looking for new contributors! No contribution is too small, so if you have any trouble with this code, find a typo, or have requests for new content (tutorials or features), open an issue on GitHub.
Contributors#
Main author: Nathaniel Starkman (@nstarman)
All contributors (alphabetical last name):
Nathaniel Starkman