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.

Reply via email to