On 05.05.2011 21:52, Alexey U. Gudchenko wrote:
05.05.2011 22:47, smichr пишет:
Can someone else test [ https://github.com/sympy/sympy/pull/87 ] and
see if you get failures? There are two commits there. Failures when
testing expr.py (and other files) show up for some but not for me
(W32).

Ronan thinks it might be related to keep_sign. That could be...but I
don't see where in the code that I have used (including apart) that
the value of keep_sign changes.

Maybe someone else can see the problem.

Thanks.
/c


Yes, I observe the errors while running all test in various files :

     $ ./bin/test

And in particular in the test_expr.py file.

But when I run only one

     $ ./bin/test test_expr.py

there is no errors.

Therefore tests depends on the order of testing of files.

I determined that it is related with test_sums_products.py. When I run

     $ ./bin/test test_sums_products.py test_expr.py

the errors begin fails.

And precisely with this lines:
     assert Sum(1/x/(x - 1), (x, a, b)).doit() == -1/b - 1/(1 - a)

When I comment it, then all tests in all files are passed without errors.

It seems that it is related with caching.

If I add at the `test_sums_products.py` after this (#174):
     assert Sum(1/x/(x - 1), (x, a, b)).doit() == -1/b - 1/(1 - a)

this line
     clear_cache()
then all tests in all files are passed without errors.

So this is a solution apparently.


Not really. But that was a great start!

Imho clearing the cache is never the solution. The underlying problem is that Basic.keep_sign is not being cached properly. Basic.keep_sign affects results, so it has to be part of the caching hash. This two-line patch removes the failures:

diff --git a/sympy/core/cache.py b/sympy/core/cache.py
index af20ce1..24b5ca1 100644
--- a/sympy/core/cache.py
+++ b/sympy/core/cache.py
@@ -93,7 +93,8 @@ def wrapper(*args, **kw_args):
             k = args + tuple(items)
         else:
             k = args
-        k = k + tuple(map(lambda x: type(x), k))
+        from sympy.core import Basic
+        k = k + tuple(map(lambda x: type(x), k)) + tuple([Basic.keep_sign])
         try:
             return func_cache_it_cache[k]
         except KeyError:

There might be ways of doing this that are cleaner implementation-wise or conceptually. The underlying problem again is that there is global state affecting sympy computations that the cache does not know about.


Another question that it seems that `./bin/test` utility doesn't clear
caching before file testings. I think it must to do it. So I create an
issue for it.




--
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.

Reply via email to