06.05.2011 01:15, Mateusz Paprocki пишет: > Hi, > > On 5 May 2011 14:10, Tom Bachmann <[email protected]> wrote: > >> 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. >> >> > There is a reason why we use cache -> speed, so clearing it "here and there" > is not a solution. Anyway, I hope that keep_sign will be gone this week, > unless there will be some severe test failures. > >
Yes, I ment that it is a temporary solution (insert clear_cache() in pointed line) to avoid the influence of one test file to another ones. But I agree that this solution hide the problems with caching errors, which can be resolved too. -- Alexey U. -- 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.
