Ted
On 2011-06-20, at 00:42, Aaron Meurer wrote:
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 MeurerOn 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 MeurerOn 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 givesnumpy.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 thebug is in SymPy somewhere, and numpy 1.5 was catching that ValueErrorand re-throwing it as a TypeError. Aaron MeurerOn 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 somereason 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 thequantum 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 MeurerBy 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 elementsof the Matrix to complex, but this is rather hackish and I would prefer to aviod it if possible. Aaron MeurerOn Sun, Jun 19, 2011 at 5:36 PM, Aaron Meurer <[email protected]> wrote:Thanks for reporting this. It seems you've uncovered two bugs (thesecond 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 therelease. Do you know how to fix it? If so, please send a pull request. Aaron MeurerOn 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 thiserror (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' tonumpy. 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_cacheFile "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_matrixself._numpy_matrix(name, m)File "sympy/physics/quantum/matrixcache.py", line 72, in _numpy_matrixm = to_numpy(m, dtype=self.dtype)File "sympy/physics/quantum/matrixutils.py", line 99, in to_numpyreturn sympy_to_numpy(m, dtype=dtype)File "sympy/physics/quantum/matrixutils.py", line 53, in sympy_to_numpyreturn 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 .
-- 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.
