Sure, I wouldn't mind doing that, but it would also be better to have
clear alternative/complement to duck array (as I'm hoping to be the
case with with coerce). I will try to give a bit more thought on the
coercion ideas and start writing a NEP for that this week and the
next. Perhaps we can then sync both NEPs.

On Tue, Aug 6, 2019 at 4:23 PM Sebastian Berg
<sebast...@sipsolutions.net> wrote:
>
> On Tue, 2019-08-06 at 10:24 +0200, Peter Andreas Entschev wrote:
> > Thanks for the concerns raised, and Stephan for promptly answering
> > them.
> >
> > > An alternative to introducing np.duckarray() would be to just
> > > modify np.asarray(). Of course this has backwards compatibility
> > > impact, but if you're going to be raising a TypeError from
> > > __array__ then that impact is there anyway. Note: I don't think
> > > this is necessarily a better idea, because it may lead to less
> > > clear errors, but it's worth putting in the alternatives section at
> > > least.
> >
> > I don't know if mentioning alternatives in that way is good, it gives
> > me the impression that NumPy is encouraging them (unless it really
> > is).
>
> Well, if you think alternatives is too open to actually using them, I
> think it would be fine to list them as "Rejected Alternatives"?
>
> - Sebastian
>
>
> >  In that sense, I think the best is indeed going down the path of
> > finding a good coercion solution (as Stephan already mentioned) and
> > later we could just add a pointer to the new NEP in this one.
> >
> > Best,
> > Peter
> >
> >
> > On Tue, Aug 6, 2019 at 3:17 AM Stephan Hoyer <sho...@gmail.com>
> > wrote:
> > > On Mon, Aug 5, 2019 at 2:48 PM Ralf Gommers <ralf.gomm...@gmail.com
> > > > wrote:
> > > > Having __array__ give a TypeError is fine for libraries that want
> > > > to prevent unintentional coercion with, e.g.,
> > > > `np.asarray(my_ducktype)`. However that leaves the obvious
> > > > question of what the right way is to do this intentionally. Would
> > > > be good to recommend something, for example a `numpy()` or
> > > > `to_numpy()` method. Also, the NEP should make it clearer that
> > > > this is not the obviously correct thing to do, it only makes
> > > > sense in cases where coercion is very expensive, like CuPy and
> > > > Sparse. For Dask for example, coercion to a numpy array is
> > > > perfectly reasonable.
> > >
> > > I agree, we need another solution for explicit array conversion,
> > > either from duck arrays to NumPy arrays or between duck arrays.
> > >
> > > As has come-up on GitHub [1], think this should probably be another
> > > protocol, to allow for third-party conversions like sparse <-> dask
> > > that in principle could be implemented by either library.
> > >
> > > To get discussion start, here's one possible proposal for what the
> > > NumPy API(s) could look like:
> > > np.coerce(sparse_array)  # by default, coerce to np.ndarray
> > > np.coerce(sparse_array, dask.array.Array)  # coerces to dask
> > > np.coerce_like(sparse_array, dask_array)  # coerce like the second
> > > array type
> > > np.coerce_arrays(list_of_arrays)  # coerce to first type that can
> > > handle everything
> > >
> > > The protocol itself should probably either use __array_function__
> > > (e.g., for np.coerce_like, if all the dispatched on arguments are
> > > arrays) or a custom protocol in the same style that allows for
> > > implementations on either the array being converted or the type of
> > > the result [2].
> > >
> > > [1] https://github.com/numpy/numpy/issues/13831
> > > [2]
> > > https://github.com/numpy/numpy/pull/14170#issuecomment-517004293
> > >
> > > > The NEP currently does not say who this is meant for. Would you
> > > > expect libraries like SciPy to adopt it for example?
> > > >
> > > > The NEP also (understandably) punts on the question of when
> > > > something is a valid duck array. If you want this to be widely
> > > > used, that will need an answer or at least some rough guidance
> > > > though. For example, we would expect a duck array to have a
> > > > mean() method, but probably not a ptp() method. A library author
> > > > who wants to use np.duckarray() needs to know, because she can't
> > > > test with all existing and future duck array implementations.
> > >
> > > I think this is covered in NEP-22 already. As discussed there, I
> > > don't think NumPy is in a good position to pronounce decisive APIs
> > > at this time. I would welcome efforts to try, but I don't think
> > > that's essential for now.
> > >
> > > > An alternative to introducing np.duckarray() would be to just
> > > > modify np.asarray(). Of course this has backwards compatibility
> > > > impact, but if you're going to be raising a TypeError from
> > > > __array__ then that impact is there anyway. Note: I don't think
> > > > this is necessarily a better idea, because it may lead to less
> > > > clear errors, but it's worth putting in the alternatives section
> > > > at least.
> > > >
> > > > Cheers,
> > > > Ralf
> > > > >
> > > > > Would be great to get some comments on that.
> > > > >
> > > > > [1]
> > > > > https://github.com/numpy/numpy/blob/master/doc/neps/nep-0030-duck-array-protocol.rst
> > > > > [2] https://github.com/numpy/numpy/pull/14170
> > > > > [3]
> > > > > https://numpy.org/neps/nep-0022-ndarray-duck-typing-overview.html
> > > > >
> > > > > Best,
> > > > > Peter
> > > > > _______________________________________________
> > > > > NumPy-Discussion mailing list
> > > > > NumPy-Discussion@python.org
> > > > > https://mail.python.org/mailman/listinfo/numpy-discussion
> > > >
> > > > _______________________________________________
> > > > NumPy-Discussion mailing list
> > > > NumPy-Discussion@python.org
> > > > https://mail.python.org/mailman/listinfo/numpy-discussion
> > >
> > > _______________________________________________
> > > NumPy-Discussion mailing list
> > > NumPy-Discussion@python.org
> > > https://mail.python.org/mailman/listinfo/numpy-discussion
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion@python.org
> > https://mail.python.org/mailman/listinfo/numpy-discussion
> >
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion

Reply via email to