On 22/12/2020 19:08, Brett Cannon wrote:

... The fact that numpy chooses to implement __eq__ in such a way that its result would be surprising if used in an `if` guard I think is more a design choice/issue of numpy than a suggestion that you can't trust `==` in testing because it _can_ be something other than True/False.

+1  In addition to NumPy's regularly surprising interpretation of operators, it is evident from Ivan Pozdeev's investigation (other branch) that part of the problem lies with bool(np.array) being an error. I can see why that might be sensible. You can have one or the other, but not both.

I wondered if Python had become stricter here after NumPy made its choices, but a little mining turns up:

   "New in version 2.1. These are the so-called ``rich comparison''
   methods, and are called for comparison operators in preference to
   __cmp__() below. The correspondence between operator symbols and
   method names is as follows: |x<y| calls |x.__lt__(y)|, |x<=y| calls
   |x.__le__(y)|, |x==y| calls |x.__eq__(y)|, |x!=y| and |x<>y| call
   |x.__ne__(y)|, |x>y| calls |x.__gt__(y)|, and |x>=y| calls
   |x.__ge__(y)|. These methods can return any value, but if the
   comparison operator is used in a Boolean context, the return value
   should be interpretable as a Boolean value, else a TypeError will be
   raised. By convention, |0| is used for false and |1| for true. "

   https://docs.python.org/release/2.1/ref/customization.html

The combination of choices makes the result of a comparison, about which there is some freedom, not interpretable as a boolean value. We are warned that this should not be expected to work. Later docs (from v2.6) refer explicitly to calling bool() as a definition of "interpretable". bool() is there from v2.3.

Jeff Allen

_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/WZWT6NZXM4EILAVVJRJQ2A2LK7BBNMFV/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to