Bill has posted a patch to the Issue page on Google code. It fixes this problem for everything I could throw at it. ~Luke
On Aug 25, 12:47 am, Luke <hazelnu...@gmail.com> wrote: > I don't know what changed, but this issue is now causing a lot of my > code in pydy to not be able to use .subs() on a bunch of expressions. > > http://code.google.com/p/sympy/issues/detail?id=1616 > > I did a git blame and it looks like it was done by Bill Flynn on > 2009-08-22. I think this was during the sprint on Saturday at the > Scipy conference. Can Bill or Ondrej look into this when you get a > chance? It looks like sympy/core/mul.py:811 is the culprit, it looks > like your logic in the for loop might not be checking things correctly > before trying to removing elements from the list. > > This is a show stopper for PyDy. I'll be on IRC all day tomorrow and > can help debug the problem so we can resolve it ASAP. > > Here is a test case that causes the error: > > In [1]: a, b, c, d, e, f, g, h, i, j, k, l = symbols('a b c d e f g h i j k > l') > > In [2]: test = a*b*c**2 + d*b*e**2*f**2 + c*h*i*e**2 > > In [3]: test.subs({e**2:1-g**2, c**2:1-g**2}) > ERROR: An unexpected error occurred while tokenizing input > The following traceback may be corrupted or invalid > The error message is: ('EOF in multi-line statement', (22, 0)) > > ERROR: An unexpected error occurred while tokenizing input > The following traceback may be corrupted or invalid > The error message is: ('EOF in multi-line statement', (96, 0)) > > --------------------------------------------------------------------------- > ValueError Traceback (most recent call last) > > /home/luke/lib/python/pydy/examples/<ipython console> in <module>() > > /home/luke/lib/python/sympy/sympy/core/basic.pyc in subs(self, *args) > 1021 sequence = args[0] > 1022 if isinstance(sequence, dict): > -> 1023 return self._subs_dict(sequence) > 1024 elif isinstance(sequence, (list, tuple)): > 1025 return self._subs_list(sequence) > > /home/luke/lib/python/sympy/sympy/core/basic.pyc in _subs_dict(self, sequence) > 1111 subst.append(pattern) > 1112 subst.reverse() > -> 1113 return self._subs_list(subst) > 1114 > 1115 def _seq_subs(self, old, new): > > /home/luke/lib/python/sympy/sympy/core/basic.pyc in _subs_list(self, sequence) > 1064 for old, new in sequence: > 1065 if hasattr(result, 'subs'): > -> 1066 result = result.subs(old, new) > 1067 return result > 1068 > > /home/luke/lib/python/sympy/sympy/core/basic.pyc in subs(self, *args) > 1028 elif len(args) == 2: > 1029 old, new = args > -> 1030 return self._subs_old_new(old, new) > 1031 else: > 1032 raise TypeError("subs accepts either 1 or 2 arguments") > > /home/luke/lib/python/sympy/sympy/core/cache.pyc in wrapper(*args, **kw_args) > 83 except KeyError: > 84 pass > ---> 85 func_cache_it_cache[k] = r = func(*args, **kw_args) > 86 return r > 87 > > /home/luke/lib/python/sympy/sympy/core/basic.pyc in > _subs_old_new(self, old, new) > 1037 old = sympify(old) > 1038 new = sympify(new) > -> 1039 return self._eval_subs(old, new) > 1040 > 1041 def _eval_subs(self, old, new): > > /home/luke/lib/python/sympy/sympy/core/add.pyc in _eval_subs(self, old, new) > 310 ret_set = self_set - old_set > 311 return Add(new, coeff_self, -coeff_old, > *[s._eval_subs(old, new) for s in ret_set]) > --> 312 return self.__class__(*[s._eval_subs(old, new) for s > in self.args]) > 313 > 314 @cacheit > > /home/luke/lib/python/sympy/sympy/core/mul.pyc in _eval_subs(self, old, new) > 809 # collect commutative terms > > 810 else: > --> 811 comms_final.remove(ele) > 812 > 813 # continue only if all commutative terms in > old are present > > ValueError: list.remove(x): x not in list > > In [4]: --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---