The way the quantum code is written, it's not very easy to disable
numpy globally.  I could do it, but it would require copying the same
four lines checking the system version and emitting a warning in the
half dozen files that import numpy.

So, to fix this right, I need advice from Brian and others who know
the quantum code.  Where would be the best place to put some kind of
global parameter defining if numpy is supported for the quantum code
(similar to what the polys use for gmpy)?

Aaron Meurer

On Sun, Jun 19, 2011 at 8:38 PM, Aaron Meurer <[email protected]> wrote:
> 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.

Reply via email to