OK, this is definitely a bug in numpy (or Python). I created a file
numpyfloattest.py with the following contents:
import numpy
class A(object):
def __float__(self):
return 2.0
def __complex__(self):
return 5.0j
a = A()
print numpy.matrix([[a]], dtype='complex')
And ran:
Aaron-Meurer:sympy aaronmeurer(0.7.0$%)$python2.5 numpyfloattest.py
[[ 2.+0.j]]
Aaron-Meurer:sympy aaronmeurer(0.7.0$%)$python2.7 numpyfloattest.py
[[ 0.+5.j]]
So for some reason, in Python 2.5, it runs complex(float()) on the
data. Of course, this doesn't work very well if the numbers are
complex, like sympy.I.
I have created http://projects.scipy.org/numpy/ticket/1872 for this.
In the meanwhile, I will just disable numpy in the quantum code in
Python 2.5.
Aaron Meurer
On Sun, Jun 19, 2011 at 8:04 PM, Aaron Meurer <[email protected]> wrote:
> I think I have a lead. In numpy 1.6, this instead gives
>
>>>> numpy.matrix([[0, I]], dtype='complex')
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/numpy/matrixlib/defmatrix.py",
> line 257, in __new__
> arr = N.array(data, dtype=dtype, copy=copy)
> File "sympy/core/expr.py", line 129, in __float__
> raise ValueError("Symbolic value, can't compute")
> ValueError: Symbolic value, can't compute
>
> in Python 2.5 (and it works in Python 2.6 and 2.7). So I guess the
> bug is in SymPy somewhere, and numpy 1.5 was catching that ValueError
> and re-throwing it as a TypeError.
>
> Aaron Meurer
>
> On Sun, Jun 19, 2011 at 7:39 PM, Aaron Meurer <[email protected]> wrote:
>> On Sun, Jun 19, 2011 at 7:32 PM, Aaron Meurer <[email protected]> wrote:
>>> I don't know much about numpy, so this one has me stumped. For some
>>> reason numpy.matrix([[0, I]], dtype='complex') fails in Python 2.5
>>> (with the above error), but not in Python 2.6 or 2.7 (I is sympy.I).
>>>
>>> Can someone with numpy knowledge give any insight here? Otherwise, I
>>> think the solution might have to be to disable numpy support in the
>>> quantum code in Python 2.5.
>>>
>>> I haven't looked at why it kills the test runner yet. I'll look at that
>>> now.
>>
>> Oh, this is rather obvious. It's because the exception is raised at
>> import time. If it were raised when running an actual test, it would
>> be caught by the test runner. This is probably OK behavior (anyway,
>> it's not top priority to change it).
>>
>> Aaron Meurer
>>
>>>
>>> By the way, a workaround might be to do np.matrix([map(complex, i) for
>>> i in m.tolist()], dtype=complex), i.e., manually convert the elements
>>> of the Matrix to complex, but this is rather hackish and I would
>>> prefer to aviod it if possible.
>>>
>>> Aaron Meurer
>>>
>>>
>>> On Sun, Jun 19, 2011 at 5:36 PM, Aaron Meurer <[email protected]> wrote:
>>>> Thanks for reporting this. It seems you've uncovered two bugs (the
>>>> second one is that the error killed the test runner).
>>>>
>>>> I'll see if I can figure out how to fix at least the numpy one for the
>>>> release. Do you know how to fix it? If so, please send a pull
>>>> request.
>>>>
>>>> Aaron Meurer
>>>>
>>>> On Sat, Jun 18, 2011 at 1:03 PM, Ted Horst <[email protected]> wrote:
>>>>> I'm a little late to the party, but I just tested 0.7.0 tip and got this
>>>>> error (stopped testing):
>>>>>
>>>>> This is with python 2.5.1, numpy 1.5.0, no scipy, no gmpy on OSX 10.5.8
>>>>> PPC
>>>>> (big endian).
>>>>>
>>>>> I can get the error from just importing sympy.physics.quantum.matrixcache.
>>>>> It makes sense because we are passing sympy.I with dtype 'complex' to
>>>>> numpy.
>>>>>
>>>>> Ted
>>>>>
>>>>> Traceback (most recent call last):
>>>>> File "setup.py", line 269, in <module>
>>>>> 'audit' : audit,
>>>>> File
>>>>> "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/distutils/core.py",
>>>>> line 151, in setup
>>>>> dist.run_commands()
>>>>> File
>>>>> "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/distutils/dist.py",
>>>>> line 974, in run_commands
>>>>> self.run_command(cmd)
>>>>> File
>>>>> "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/distutils/dist.py",
>>>>> line 994, in run_command
>>>>> cmd_obj.run()
>>>>> File "setup.py", line 161, in run
>>>>> if sympy.test():
>>>>> File "sympy/utilities/runtests.py", line 181, in test
>>>>> return t.test(sort=sort)
>>>>> File "sympy/utilities/runtests.py", line 487, in test
>>>>> self.test_file(f)
>>>>> File "sympy/utilities/runtests.py", line 499, in test_file
>>>>> execfile(filename, gl)
>>>>> File
>>>>> "/users/ted/developer/opensource/sympy/sympy_github2/sympy/physics/quantum/tests/test_gate.py",
>>>>> line 4, in <module>
>>>>> from sympy.physics.quantum.gate import (XGate, YGate, ZGate,
>>>>> random_circuit,
>>>>> File "sympy/physics/quantum/gate.py", line 31, in <module>
>>>>> from sympy.physics.quantum.matrixcache import matrix_cache
>>>>> File "sympy/physics/quantum/matrixcache.py", line 92, in <module>
>>>>> matrix_cache.cache_matrix('Y', Matrix([[0, -I], [I, 0]]))
>>>>> File "sympy/physics/quantum/matrixcache.py", line 38, in cache_matrix
>>>>> self._numpy_matrix(name, m)
>>>>> File "sympy/physics/quantum/matrixcache.py", line 72, in _numpy_matrix
>>>>> m = to_numpy(m, dtype=self.dtype)
>>>>> File "sympy/physics/quantum/matrixutils.py", line 99, in to_numpy
>>>>> return sympy_to_numpy(m, dtype=dtype)
>>>>> File "sympy/physics/quantum/matrixutils.py", line 53, in sympy_to_numpy
>>>>> return np.matrix(m.tolist(), dtype=dtype)
>>>>> File "numpy/matrixlib/defmatrix.py", line 257, in __new__
>>>>> TypeError: a float is required
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google Groups
>>>>> "sympy" group.
>>>>> To post to this group, send email to [email protected].
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected].
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/sympy?hl=en.
>>>>>
>>>>>
>>>>
>>>
>>
>
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sympy?hl=en.