On Tue, Jul 16, 2019 at 3:44 AM Kevin Sheppard <kevin.k.shepp...@gmail.com> wrote:
> I am trying to make a subclass that never propagates so that when > interacted with another ndarray, or even itself so that the return type is > always ndarray. Is this possible? > > I got pretty far with > > def __array_wrap__(self, out_arr, context=None): > if out_arr.shape == (): > return out_arr.item() # if ufunc output is scalar, return it > else: > out = super(ArrayLike, self).__array_wrap__(out_arr, context) > # Never return ArrayLike > if isinstance(out, ArrayLike): > out = out.view(np.ndarray) > return out > > Which works well for ufuncs. However, when I try other functions like > `dot` I get my subclass type returned. > > If there a reasonable way to ensure that my subclass doesn't propagate? I > think I would need some way to override the behavior when .view(MySubClass) > is called. > > I think you will be able to do that with `__array_function__` in the upcoming 1.17 release. It is also in 1.16, but you need an environmental variable to activate it. Some documentation can be found at https://www.numpy.org/devdocs/reference/arrays.classes.html#special-attributes-and-methods . Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion