[NumPy-Tickets] [NumPy] #1433: numpy array captures 'in' statement when it shouldn't

NumPy Trac numpy-tickets@scipy....
Sun Sep 5 13:51:04 CDT 2010


#1433: numpy array captures 'in' statement when it shouldn't
-------------------------+--------------------------------------------------
  Reporter:  graik       |       Owner:  somebody    
      Type:  defect      |      Status:  closed      
  Priority:  normal      |   Milestone:              
 Component:  numpy.core  |     Version:  1.3.0       
Resolution:  wontfix     |    Keywords:  __contains__
-------------------------+--------------------------------------------------
Changes (by pv):

  * status:  new => closed
  * resolution:  => wontfix


Comment:

 That has not worked in any Numpy versions:
 {{{
 >>> import numpy as np
 >>> np.__version__
 '0.9.2'
 >>> a = np.arange(10); a in (0, None)
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 ValueError: The truth value of an array with more than one element is
 ambiguous. Use a.any() or a.all()
 }}}
 Perhaps you mean it used to work in Numeric. However, even there it did
 not do what you would think:
 {{{
 >>> import Numeric
 >>> a = Numeric.arange(10)
 >>> a in (0, None)
 True
 }}}

 The point why `__contains__` is ambiguous is that the equality operation
 on arrays is defined to return a boolean array of elementwise comparisons,
 and it is ambiguous if the result should be reduced to a single boolean
 via `all()` or via `any()`.

 It is not possible to special-case for `__contains__` due to the way
 Python implements it.

-- 
Ticket URL: <http://projects.scipy.org/numpy/ticket/1433#comment:1>
NumPy <http://projects.scipy.org/numpy>
My example project


More information about the NumPy-Tickets mailing list