wflynny wrote: > I noticed that some screwy things happen with symbols depending on how > you define them. For example > > In [2]: x = Symbol('x', commutative = False) > > In [3]: x.is_commutative; x._assumptions > Out[3]: False > Out[3]: {'comparable': False} > > That's fine. But what happens if we add real = True/False: > > In [5]: y = Symbol('y', commutative = False, real = True) > > In [6]: y.is_commutative; y._assumptions > Out[6]: False > Out[6]: {'commutative': True, 'comparable': False, 'complex': True, > 'imaginary': False, 'real': True} >
Thanks for the report, but I think this has been reported here http://code.google.com/p/sympy/issues/detail?id=1384 Anyway, we expect to totally replace assumptions with a new framework for next release. > In [7]: y? > Type: Symbol > Base Class: <class 'sympy.core.symbol.Symbol'> > String Form: y > Namespace: Interactive > File: c:\python25\lib\site-packages\sympy\core\symbol.py > Docstring: > Assumptions:: > real = True > commutative = True > > You can override the default assumptions in the constructor:: > >>> A,B = symbols('AB', commutative = False) > >>> bool(A*B != B*A) > True > >>> bool(A*B*2 == 2*A*B) == True # multiplication by scalars is > commutative > True > Call def: y(self, *args) > > Does this mean that the commutative = False is overwritten? I'm not > really sure what this means. But, you might run into trouble if you > use the subs() method. I got this error until I removed the real=True > part from all my symbols. > > Traceback (most recent call last): > File "C:\Documents and Settings\wflynn\My Documents\Python\One- > magnon Cross-section Calculation\linear_case.py", line 411, in > <module> > cross_sect = generate_cross_section(N_atoms,ops,atom) > File "C:\Documents and Settings\wflynn\My Documents\Python\One- > magnon Cross-section Calculation\linear_case.py", line 376, in > generate_cross_section > arg[i][j] = sub_in(arg[i][j],exp(I*t*A+I*t*B+I*C+I*D),sp.DiracDelta > (A+B+C+D)) > File "C:\Documents and Settings\wflynn\My Documents\Python\One- > magnon Cross-section Calculation\sub_in.py", line 18, in sub_in > new = _walk_it(expression, pattern, replacement, check) > File "C:\Documents and Settings\wflynn\My Documents\Python\One- > magnon Cross-section Calculation\sub_in.py", line 82, in _walk_it > new.insert(new.index(sub),_walk_it(sub, pattern, replacement, > check)) > File "C:\Documents and Settings\wflynn\My Documents\Python\One- > magnon Cross-section Calculation\sub_in.py", line 79, in _walk_it > new.insert(new.index(sub),replacement.subs(v)) > File "C:\Python25\lib\site-packages\sympy\core\basic.py", line 966, > in subs > return self._subs_list(sequence) > File "C:\Python25\lib\site-packages\sympy\core\basic.py", line 1007, > in _subs_list > result = result.subs(old, new) > File "C:\Python25\lib\site-packages\sympy\core\basic.py", line 971, > in subs > return self._subs_old_new(old, new) > File "C:\Python25\lib\site-packages\sympy\core\cache.py", line 85, > in wrapper > func_cache_it_cache[k] = r = func(*args, **kw_args) > File "C:\Python25\lib\site-packages\sympy\core\basic.py", line 980, > in _subs_old_new > return self._eval_subs(old, new) > File "C:\Python25\lib\site-packages\sympy\core\function.py", line > 204, in _eval_subs > return Basic._seq_subs(self, old, new) > File "C:\Python25\lib\site-packages\sympy\core\basic.py", line 1064, > in _seq_subs > return self.__class__(*[s.subs(old, new) for s in args]) > File "C:\Python25\lib\site-packages\sympy\core\multidimensional.py", > line 127, in wrapper > return f(*args, **kwargs) > File "C:\Python25\lib\site-packages\sympy\core\cache.py", line 85, > in wrapper > func_cache_it_cache[k] = r = func(*args, **kw_args) > File "C:\Python25\lib\site-packages\sympy\core\function.py", line > 141, in __new__ > evaluated = cls.eval(*args) > File "C:\Python25\lib\site-packages\sympy\functions\special > \delta_functions.py", line 58, in eval > if arg.is_positive or arg.is_negative: > File "C:\Python25\lib\site-packages\sympy\core\assumptions.py", line > 367, in getit > return self._what_known_about(name) > File "C:\Python25\lib\site-packages\sympy\core\assumptions.py", line > 256, in _what_known_about > a = getattr(self,'_eval_is_'+k)() > File "C:\Python25\lib\site-packages\sympy\core\add.py", line 252, in > _eval_is_positive > if c.is_positive and r.is_positive: > File "C:\Python25\lib\site-packages\sympy\core\assumptions.py", line > 367, in getit > return self._what_known_about(name) > File "C:\Python25\lib\site-packages\sympy\core\assumptions.py", line > 279, in _what_known_about > a = getattr(self,'is_'+pk) > File "C:\Python25\lib\site-packages\sympy\core\assumptions.py", line > 367, in getit > return self._what_known_about(name) > File "C:\Python25\lib\site-packages\sympy\core\assumptions.py", line > 282, in _what_known_about > self._learn_new_facts( ((pk,a),) ) > File "C:\Python25\lib\site-packages\sympy\core\assumptions.py", line > 341, in _learn_new_facts > self._assume_rules.deduce_all_facts(facts, base) > File "C:\Python25\lib\site-packages\sympy\core\facts.py", line 884, > in deduce_all_facts > assert new_facts[k] == v, ('inconsitency between > facts',new_facts,k,v) > AssertionError: ('inconsitency between facts', {'real': True, > 'imaginary': False, 'complex': True, 'commutative': True}, > 'commutative', False) > > This was conducted on the most recent version of sympy (I downloaded > it about an hour ago). It's not a big bug but it's something that > definitely gave me a headache for a couple of hours today. > > > -- http://fseoane.net/blog/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sympy?hl=en -~----------~----~----~----~------~----~------~--~---