Chris, can you explain what's going on in Add._eval_expand_mul? This is breaking the pattern of all the other do-nothing _eval_expand functions, and I don't understand what it's supposed to be doing. Is this a hack, or do you think all such noop functions should be written this way?
The relevant commit is 6b892e98. Aaron Meurer On Mon, Jul 16, 2012 at 7:34 PM, Aaron Meurer <[email protected]> wrote: > I think I figured out the cause of this. Some expand methods are > calling expand to do deep=True recursion. For example, > Pow._eval_expand_power_exp(). This results in the hints being called > recursively indefinitely. > > I think each hint should only call itself recursively. I'll try to > make this change and see if it doesn't break anything. > > Aaron Meurer > > On Mon, Jul 16, 2012 at 7:23 PM, Aaron Meurer <[email protected]> wrote: >> I've been looking into the test_expand() memory leak (e.g., with >> PYTHONHASHSEED=2538990509). Apparently, the problem is not with cse, >> but with expand. If you put a print statement in expr.py like >> >> diff --git a/sympy/core/expr.py b/sympy/core/expr.py >> index 2a2ae16..38bffcf 100644 >> --- a/sympy/core/expr.py >> +++ b/sympy/core/expr.py >> @@ -2645,6 +2645,7 @@ def expand(self, deep=True, modulus=None, >> power_base=True, power_exp=True, \ >> return n.expand(deep=deep, modulus=modulus, **hints)/d >> for hint, use_hint in hints.iteritems(): >> if use_hint: >> + print 'expanding %s' % hint >> func = getattr(expr, '_eval_expand_'+hint, None) >> if func is not None: >> expr = func(deep=deep, **hints) >> >> and run the tests with PYTHONHASHSEED=2538990509 (64-bit), you'll get >> >> ... >> expanding mul >> expanding log >> expanding basic >> expanding power_exp >> expanding power_base >> expanding multinomial >> expanding mul >> expanding log >> expanding basic >> expanding power_exp >> expanding power_base >> expanding multinomial >> expanding mul >> expanding log >> expanding basic >> expanding power_exp >> expanding power_base >> expanding multinomial >> expanding mul >> expanding log >> expanding basic >> expanding power_exp >> expanding power_base >> expanding multinomial >> expanding mul >> expanding log >> expanding basic >> expanding power_exp >> expanding power_base >> ... >> >> and so on, infinitely. Clearly somewhere is not handling the base >> case of recursion correctly, but solving this more generally should >> take care of the problem as well. >> >> Aaron Meurer -- 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.
