Ted
On 2011-06-22, at 02:09, Aaron Meurer wrote:
So far, I've coded up an import_module function, that wraps the try, except ImportError logic into a single unified function. It has support for checking the module version and the Python version and returning None if they are too old, even if the module is installed, and it also supports raising warnings when the module cannot be used. You can see the code at https://github.com/asmeurer/sympy/tree/external. I've yet to apply this everywhere in SymPy (I will do it tomorrow). I still need to decide if it will be good enough to use import_module('numpy', min_python_version=(2, 6)) everywhere in the quantum module, or if I should centralize numpy importing in that module even further. But it should a *lot* less code, i.e., instead of import sys import warnings try: if sys.version_info < (2, 6): warnings.warn("Python version too old to use numpy") raise ImportError import numpy except ImportError: <do numpy not supported stuff> in every single quantum file that uses numpy (including the tests), we would just have from sympy.external import import_module numpy = import_module('numpy', min_python_version=(2, 6)) if not numpy: <do numpy not supported stuff> Aaron MeurerOn Mon, Jun 20, 2011 at 6:11 PM, Aaron Meurer <[email protected]> wrote:It should at least be in a separate file for the quantum code. I didn't consider to make one file for it for all of SymPy. I'm waiting to see what Brian Granger thinks, since he knows the most about the quantum module. Aaron MeurerOn Mon, Jun 20, 2011 at 6:06 PM, Ted Horst <[email protected]> wrote:Thanks for investigating, Aaron. Maybe numpy importing should be pulled out into its own module. This would probably be necessary anyway if someone implements the "numpy array for sympy" idea that was talked about a whileback. Ted On 2011-06-20, at 00:42, Aaron Meurer wrote:The way the quantum code is written, it's not very easy to disablenumpy globally. I could do it, but it would require copying the same four lines checking the system version and emitting a warning in thehalf dozen files that import numpy. So, to fix this right, I need advice from Brian and others who knowthe 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 filenumpyfloattest.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 computein 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 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 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 thequantum code in Python 2.5.I haven't looked at why it kills the test runner yet. I'll look atthat 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 elements of the Matrix to complex, but this is rather hackish and I wouldprefer 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 fortherelease. Do you know how to fix it? If so, please send a pullrequest. 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 gotthis error (stopped testing):This is with python 2.5.1, numpy 1.5.0, no scipy, no gmpy on OSX10.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_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_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_numpyreturn 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 GoogleGroups "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.--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.
