On Fri, 2021-09-10 at 14:51 -0600, Aaron Meurer wrote:
> On Thu, Sep 9, 2021 at 7:11 PM Sebastian Berg
> <sebast...@sipsolutions.net> wrote:
> > 
> > On Sun, 2021-09-05 at 21:08 +0200, Ralf Gommers wrote:
> > > On Sat, Sep 4, 2021 at 10:02 AM Kshitij Kalambarkar <
> > > kshitijkalambar...@gmail.com> wrote:
> > > 
> > > > Hi,
> > > > 
> > > > np.trunc returns floating dtype output even for integral dtype
> > > > input. As
> > > > per array-api, it should preserve the input dtype.
> > > > 
> > > 
> > > Just a note that it's not compatibility with the array API
> > > standard
> > > that's
> > > the main driver for the change here (that would be handled in
> > > `numpy.array_api.trunc`, not `numpy.trunc`). But it's just
> > > unwanted
> > > behavior, so an improvement to `numpy.trunc` is also desirable.
> > > 
> > > 
> > > > Note: This is also true for np.rint, np.fix, np.ceil, np.floor
> > > > 
> > > > Reference: https://github.com/numpy/numpy/issues/19464
> > > > 
> > > > Possible Fix:
> > > > 1. We update the behaviour directly with an update to release
> > > > note.
> > > > 2. We add a FutureWarning and update the behaviour in a future
> > > > release.
> > > > 
> > > 
> > > I'm fine with (1), because (a) it can be considered a bug fix,
> > > (b)
> > > it's
> > > unlikely to break anything, and (c) a FutureWarning is not too
> > > helpful
> > > because there's no way to update existing code to be forward-
> > > proof
> > > and
> > > remove the warning.
> > 
> > One work-around might be to pass `dtype=arr.dtype` probably, but
> > that
> > would fail on current NumPy.  So the only choice would probably be
> > explicitly not calling `trunc`.
> > 
> > So, I agree, I lean towards moving forward here.  (Unless anyone
> > has
> > e.g. an example of code that would break?)
> > 
> > 
> > There is a tiny possibility of catastrophic failure (silent wrong
> > results).  But my best guess is that the vast majority of code
> > probably
> > will not notice.
> > E.g. one pattern that is probably extremely common is to cast to
> > integer right after the call to `trunc`.
> 
> If that's true, then this may actually fix some bugs. If some code
> does trunc(x).astype(int) and x could be float or int, then the
> result
> will be wrong if x is int64 with values larger than ~2**54, which
> cannot fit exactly into float64, e.g.,

Sure.

> > > > np.trunc(11962686510203121).astype(int)
> 11962686510203120
> 
> I'm not sure I understand how changing this could lead to new wrong
> results.
> 

I can't think of a reasonable way either, but e.g. code could run into
integer overflows.  It seems all very unlikely, though. 

I was thinking a bit in the direction of simple unsafe operations:

     res = np.trunc(arr)
     res *= 0.5  # will error if res is integer

But most should error and not return bad results...

In any case: I will worry if anyone shows a real-world/likely example
for how it can go wrong.  And right now, that seems fairly unlikely.

Cheers,

Sebastian


> Aaron Meurer
> 
> > 
> > Cheers,
> > 
> > Sebastian
> > 
> > 
> > > 
> > > Cheers,
> > > Ralf
> > > 
> > > 
> > > > This email is to gauge the preference for the fix.
> > > > 
> > > > Thank You!
> > > > 
> > > > Regards,
> > > > Kshiteej K
> > > > 
> > > > 
> > > > 
> > > > _______________________________________________
> > > > 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
> 

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion

Reply via email to