Am 25.02.2015 um 18:10 schrieb Paul Royik:
I mean in multithreaded environment, do people share same cache (and same
symbols)
If person1 created x=Symbol('x') and this is cached, and person2 created
x=Symbol('x', positive=True), do they have separate x's or they mixed, so
person1 can get positive x if it was overwritten in cache by person 2?
If that's different persons (or, more precisely, shell sessions), they
get different copies of the SymPy process anyway, and there's no
confusion possible at all.
Reproduction.
from sympy import *
x = Symbol('x')
f = log(x)
a=Wild('a')
symbols = f.free_symbols
for symbol in symbols:
f = f.subs(symbol, sympy.Symbol(symbol.name, positive=True))
Nit to pick: This wouldn't work for me, I'd have to do "import sympy" first.
print f.replace(log(a),log(Abs(a))) # prints log(x) as expected
# clear_cache() solves the problem
symbols = f.free_symbols
for symbol in symbols:
f = f.subs(symbol, sympy.Symbol(symbol.name))
print f.replace(log(a),log(Abs(a))) # OOPS! prints log(x) instead of
log(|x|)
Yes, that's happening for me, too, without any multithreading.
It's okay though. You replaced that x in the original f==log(x) with a
new x constructed as
sympy.Symbol('x', positive=True)
so you now have a new f, with an x that's already under an assumption
that it must be positive.
So I think what happens is that SymPy smartly infers that substituting
an Abs(x) around an already-positive x is a nop and can be simplified out.
Now I'd like to see a transcript of what happens with clear_cache().
If my theory is correct, then clear_cache should not affect the outcome.
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/54EE2DF3.1040508%40durchholz.org.
For more options, visit https://groups.google.com/d/optout.