On Thu, 2022-09-08 at 23:19 -0700, Stefan van der Walt wrote: > I am in favor of such a change. It will make what is returned more > transparent to users (and reduce confusion for newcomers). > > With NEP50, we're already adopting a philosophy of explicit scalar > usage anyway: no longer pretending or trying to make transparent that > Python floats and NumPy floats are the same. > > No one *actually* round-trips objects via repr, but if a user could > look at a result and know how to construct the object, that is an > improvement.
True, the only worry would be loss of a bit of a precision when someone has a copy-paste workflow. But at that point, users probably don't care about the last ULP. Even float32/float16 `repr` use is tricky in principle since float32("<number>") float32(<number>) May not be identical, but I would have to dig into the subtleties there (and presumably NumPy gets it subtly wrong anyway right now!). Not sure it is a big worry, but probably worthwhile to note down if we end up writing a brief NEP. Cheers, Sebastian > > Stéfan > > On Thu, Sep 8, 2022, at 22:26, Matti Picus wrote: > > On 9/9/22 04:15, Warren Weckesser wrote: > > > ... > > > To quote from > > > https://docs.python.org/3/library/functions.html#repr: > > > > > > > For many types, this function makes an attempt to return a > > > > string > > > > that would yield an object with the same value when passed to > > > > eval(); > > > Sebastian, is this an explicit goal of the change? (Personally, > > > I've > > > gotten used to not taking this too seriously, but my world view > > > is > > > biased by the long-term use of NumPy, which has never followed > > > this > > > guideline.) > > > > > > If that is a goal, than the floating point types with precision > > > greater than double precision will need to display the argument > > > of the > > > type as a string. For example, the following is run on a > > > platform > > > where numpy.longdouble is extended precision (80 bits): > > > > > > ``` > > > In [161]: longpi = np.longdouble('3.14159265358979323846') > > > > > > In [162]: longpi > > > Out[162]: 3.1415926535897932385 > > > > > > In [163]: np.longdouble(3.1415926535897932385) # Argument is > > > parsed > > > as 64 bit float > > > Out[163]: 3.141592653589793116 > > > > > > In [164]: np.longdouble('3.1415926535897932385') # Correctly > > > reproduces the longdouble > > > Out[164]: 3.1415926535897932385 > > > ``` > > > > > > Warren > > > > > > As others have mentioned, the change will greatly enhance UX at the > > cost > > of documentation cleanups. While the representation may not be > > perfectly > > roundtrip-able, I think it still is an improvement and worthwhile. > > Elsewhere I have suggested we need more documentation around > > array/scalar printing, perhaps that would be a place to mention the > > limitations of string representations. > > > > Matti > _______________________________________________ > 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