On Tue, 2023-05-16 at 11:46 -0400, Warren Weckesser wrote: > On 4/21/23, Sebastian Berg <sebast...@sipsolutions.net> wrote: > > On Thu, 2023-04-20 at 20:17 +0200, Sebastian Berg wrote: > > > On Thu, 2023-04-20 at 13:59 -0400, Warren Weckesser wrote: > > > > On 4/20/23, Sebastian Berg <sebast...@sipsolutions.net> wrote: > > > > > Hi all, > > > > > > > > > > > > > > > > <snip> > > > > > > > > > > > In [64]: np.float64(np.array([0.0])) > > > > <ipython-input-64-0f0309f2cf0c>:1: DeprecationWarning: > > > > Conversion > > > > of > > > > an array with ndim > 0 to a scalar is deprecated, and will > > > > error in > > > > future. Ensure you extract a single element from your array > > > > before > > > > performing this operation. (Deprecated NumPy 1.25.) > > > > np.float64(np.array([0.0])) > > > > Out[64]: 0.0 > > > > > > > > In [65]: np.float64(np.array([0.0, 0.0])) > > > > Out[65]: array([0., 0.]) > > > > > > Do you have any thoughts on how to make progress Warren? > > > > Sorry for the late reply; the recent comment in > https://github.com/numpy/numpy/issues/23400 reminded me of this. As > noted in the link in the recent comment in that issue, handling of > nonscalar inputs of the numpy scalar types was also briefly discussed > in the mailing list three years ago: > https://mail.python.org/pipermail/numpy-discussion/2020-April/080566.html > > I don't have any concrete ideas other than outright deprecating the > handling of anything that is not a scalar, but that might be too > disruptive. >
Not sure it is very disruptive, but I don't have a lot of appetite for a full deprecation myself right now. Was more hoping to nail down the best (now) solution that isn't a deprecation :). - Sebastian > Warren > > > > Had a bit of a look at it. You are probably aware that this is > > because > > for float, str, and bytes (our subclasses of them), we have > > (approximately): > > > > def __new__(cls, *args, **kwargs): > > try: > > super().__new__(*args, **kwargs) > > except: > > if len(args) != 1 or kwargs != {}: > > raise > > > > return np.asarray(args[0])[()] # scalar if 0-D > > > > > > For float64, I am tempted to just remove the super() path entirely > > and > > put in a fast-path for simple scalar object (like python `int`, > > `float`, `bool`, `str`) to avoid the full `np.asarray()` call. > > > > > > For unicode/bytes its a bit of a mess though? I suspect for them > > the > > `array` path is currently just useless in practice, because even > > arrays > > are interpreted as scalars here. > > > > The best path might be even to just deprecate array input entirely > > for > > them? Even then you have at least one case that is tricky: > > > > np.bytes_(5) > > > > returns an empty string (since we strip zeros) but if we would do > > the > > same as `np.asarray(5, dtype=np.bytes_)[()]` we would get a > > different > > result. > > (And raising on a non 0-D array doesn't help there.) > > > > Maybe the right way is to go as far and check if both paths match > > for > > non-trivial bytes?! > > > > - Sebastian > > > > > > > > > > > > > > Hmmmpf, that would be a good follow-up to fix. In theory a > > > FutureWarning I guess (returning the array), but in practice, I > > > think > > > we should just give the correct array result. > > > > > > (I don't love returning arrays from scalar constructors, but that > > > is > > > another thing and not for now.) > > > > > > - Sebsatian > > > > > > > > > > ``` > > > > > > > > In 1.24.2, `np.float64(np.array([0.0])` returns the the scalar > > > > 0.0. > > > > > > > > If passing arrays to `np.float64()` is intentionally supported, > > > > it > > > > seems it would be more consistent for > > > > `np.float64(np.array([0.0]))` > > > > to > > > > return `np.array([0.0])`. That is how the other numpy types > > > > work > > > > (e.g. `np.complex128`, `np.int64`, etc.). But I'm not sure if > > > > there > > > > is > > > > a deprecation/update path that would get us there. > > > > > > > > Warren > > > > > > > > > > > > > > _______________________________________________ > > > > > NumPy-Discussion mailing list -- numpy-discussion@python.org > > > > > To unsubscribe send an email to > > > > > numpy-discussion-le...@python.org > > > > > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > > > > > Member address: warren.weckes...@gmail.com > > > > > > > > > _______________________________________________ > > > > NumPy-Discussion mailing list -- numpy-discussion@python.org > > > > To unsubscribe send an email to > > > > numpy-discussion-le...@python.org > > > > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > > > > Member address: sebast...@sipsolutions.net > > > > > > > > > > > > > _______________________________________________ > > > NumPy-Discussion mailing list -- numpy-discussion@python.org > > > To unsubscribe send an email to numpy-discussion-le...@python.org > > > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > > > Member address: sebast...@sipsolutions.net > > > > > > _______________________________________________ > > NumPy-Discussion mailing list -- numpy-discussion@python.org > > To unsubscribe send an email to numpy-discussion-le...@python.org > > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > > Member address: warren.weckes...@gmail.com > > > _______________________________________________ > NumPy-Discussion mailing list -- numpy-discussion@python.org > To unsubscribe send an email to numpy-discussion-le...@python.org > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > Member address: sebast...@sipsolutions.net > _______________________________________________ NumPy-Discussion mailing list -- numpy-discussion@python.org To unsubscribe send an email to numpy-discussion-le...@python.org https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ Member address: arch...@mail-archive.com