New behavior of allclose
Hi All, This is to open a discussion of a change of behavior of `np.allclose`. That function uses `isclose` in numpy 1.10 with the result that array subtypes are preserved whereas before they were not. In particular, memmaps are returned when at least one of the inputs is a memmap. By and large I think this is a good thing, OTOH, it is a change in behavior. It is easy to fix, just run `np.array(result, copy=False)` on the current `result`, but I thought I'd raise the topic on the list in case there is a good argument to change things. Chuck
I actually brought this up before 1.10 came out: https://github.com/numpy/numpy/issues/6196 The behavior change brought out a bug in our use of allclose, so while it was annoying in the sense that our test suite started failing in a new way, it was good in that our tests are now more correct. On Wed, Nov 4, 2015 at 1:28 PM, Charles R Harris <charlesr.harris@gmail.com> wrote:
Hi All,
This is to open a discussion of a change of behavior of `np.allclose`. That function uses `isclose` in numpy 1.10 with the result that array subtypes are preserved whereas before they were not. In particular, memmaps are returned when at least one of the inputs is a memmap. By and large I think this is a good thing, OTOH, it is a change in behavior. It is easy to fix, just run `np.array(result, copy=False)` on the current `result`, but I thought I'd raise the topic on the list in case there is a good argument to change things.
Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion
Oh oops, this is about np.allcose, not np.assert_allclose. Sorry for the noise... On Wed, Nov 4, 2015 at 1:36 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
I actually brought this up before 1.10 came out: https://github.com/numpy/numpy/issues/6196
The behavior change brought out a bug in our use of allclose, so while it was annoying in the sense that our test suite started failing in a new way, it was good in that our tests are now more correct.
On Wed, Nov 4, 2015 at 1:28 PM, Charles R Harris < charlesr.harris@gmail.com> wrote:
Hi All,
This is to open a discussion of a change of behavior of `np.allclose`. That function uses `isclose` in numpy 1.10 with the result that array subtypes are preserved whereas before they were not. In particular, memmaps are returned when at least one of the inputs is a memmap. By and large I think this is a good thing, OTOH, it is a change in behavior. It is easy to fix, just run `np.array(result, copy=False)` on the current `result`, but I thought I'd raise the topic on the list in case there is a good argument to change things.
Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion
Yup, https://github.com/numpy/numpy/issues/6196 On Wed, Nov 4, 2015 at 1:45 PM, Charles R Harris <charlesr.harris@gmail.com> wrote:
On Wed, Nov 4, 2015 at 12:42 PM, Nathan Goldbaum <nathan12343@gmail.com> wrote:
Oh oops, this is about np.allcose, not np.assert_allclose. Sorry for the noise...
Probably related ;) Did you open an issue for it?
Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion
I am not sure I understand what you mean. Specifically that np.isclose will return a memmap if one of the inputs is a memmap. The result is a brand new array, right? So, what is that result memmapping from? Also, how does this impact np.allclose()? That function returns a scalar True/False, so what is the change in behavior there? By the way, the docs for isclose in 1.10.1 does not mention any behavior changes. Ben Root On Wed, Nov 4, 2015 at 2:28 PM, Charles R Harris <charlesr.harris@gmail.com> wrote:
Hi All,
This is to open a discussion of a change of behavior of `np.allclose`. That function uses `isclose` in numpy 1.10 with the result that array subtypes are preserved whereas before they were not. In particular, memmaps are returned when at least one of the inputs is a memmap. By and large I think this is a good thing, OTOH, it is a change in behavior. It is easy to fix, just run `np.array(result, copy=False)` on the current `result`, but I thought I'd raise the topic on the list in case there is a good argument to change things.
Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion
On Wed, Nov 4, 2015 at 12:40 PM, Benjamin Root <ben.v.root@gmail.com> wrote:
I am not sure I understand what you mean. Specifically that np.isclose will return a memmap if one of the inputs is a memmap. The result is a brand new array, right? So, what is that result memmapping from? Also, how does this impact np.allclose()? That function returns a scalar True/False, so what is the change in behavior there?
By the way, the docs for isclose in 1.10.1 does not mention any behavior changes.
Yep, it is a new issue, see #6475 <https://github.com/numpy/numpy/issues/6475> Chuck
On Wed, Nov 4, 2015 at 8:28 PM, Charles R Harris <charlesr.harris@gmail.com> wrote:
Hi All,
This is to open a discussion of a change of behavior of `np.allclose`. That function uses `isclose` in numpy 1.10 with the result that array subtypes are preserved whereas before they were not. In particular, memmaps are returned when at least one of the inputs is a memmap. By and large I think this is a good thing, OTOH, it is a change in behavior. It is easy to fix, just run `np.array(result, copy=False)` on the current `result`, but I thought I'd raise the topic on the list in case there is a good argument to change things.
Why would it be good to return a memmap? And am I confused or does your just merged PR [1] revert the behavior you say here is a good thing? Ralf [1] https://github.com/numpy/numpy/pull/6628
allclose() needs to return a bool so that one can do "if np.allclose(foo, bar) is True" or some such. The "good behavior" is for np.isclose() to return a memmap, which still confuses the heck out of me, but I am not a memmap expert. On Thu, Nov 5, 2015 at 4:50 PM, Ralf Gommers <ralf.gommers@gmail.com> wrote:
On Wed, Nov 4, 2015 at 8:28 PM, Charles R Harris < charlesr.harris@gmail.com> wrote:
Hi All,
This is to open a discussion of a change of behavior of `np.allclose`. That function uses `isclose` in numpy 1.10 with the result that array subtypes are preserved whereas before they were not. In particular, memmaps are returned when at least one of the inputs is a memmap. By and large I think this is a good thing, OTOH, it is a change in behavior. It is easy to fix, just run `np.array(result, copy=False)` on the current `result`, but I thought I'd raise the topic on the list in case there is a good argument to change things.
Why would it be good to return a memmap? And am I confused or does your just merged PR [1] revert the behavior you say here is a good thing?
Ralf
[1] https://github.com/numpy/numpy/pull/6628
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion
On Thu, Nov 5, 2015 at 2:50 PM, Ralf Gommers <ralf.gommers@gmail.com> wrote:
On Wed, Nov 4, 2015 at 8:28 PM, Charles R Harris < charlesr.harris@gmail.com> wrote:
Hi All,
This is to open a discussion of a change of behavior of `np.allclose`. That function uses `isclose` in numpy 1.10 with the result that array subtypes are preserved whereas before they were not. In particular, memmaps are returned when at least one of the inputs is a memmap. By and large I think this is a good thing, OTOH, it is a change in behavior. It is easy to fix, just run `np.array(result, copy=False)` on the current `result`, but I thought I'd raise the topic on the list in case there is a good argument to change things.
Why would it be good to return a memmap? And am I confused or does your just merged PR [1] revert the behavior you say here is a good thing?
Good thing for isclose, not allclose. I was thinking of very large files that might exceed memory in the isclose case, but an argument could be made for other subtypes. Allclose, OTOH, always returns a scalar. I went ahead with boolean for allclose because 1) it is backward compatible, 2) Nathaniel tended in that direction, 3) the conversation here is tending in that direction, 4) I tend in that direction, and finally, I want to get 1.10.2rc1 out this weekend ;) Chuck
participants (4)
-
Benjamin Root -
Charles R Harris -
Nathan Goldbaum -
Ralf Gommers