Ipython's PyLab breaks some uses of any(), all(), and possibly other built-in functions. Here's a normal IPython shell:
>ipython
In [1]: all([x for x in [0,1,2]])
Out[1]: False
In [2]: all(x for x in [0,1,2])
Out[2]: False
In [3]: all
Out[3]: <function all>
And here's IPython with the pylab flag:
>ipython --pylab
In [1]: all([x for x in [0,1,2]])
Out[1]: False
In [2]: all(x for x in [0,1,2])
Out[2]: True
In [3]: all
Out[3]: <function numpy.core.fromnumeric.all>
Why is all(x for x in [0,1,2])
true? Pylab replaces Python's all() with Numpy's
all(), and Numpy's all() doesn't know what to do with a generator expression,
so it turns it into a numpy array of size one containing a reference to the
generator object. Put another way, it basically runs this code:
generator = (x for x in [0,1,2])
np.all([generator])
The generator never runs, but Numpy's all does look at the truthiness of the
generator object. Since generator is truthy, np.all(x for x in [0,1,2])
returns True.
According to one of the IPython developers, this is "expected behavior". Yay? A bug was filed and closed for Python and PyLab