>
> Performance: 
> Using symbols() in all contexts might have performance ramifications, 
> creating new Symbol() objects means more memory pressure than reusing 
> precreated symbols from sympy.abc (which happen 521 times in SymPy 
> itself, hopefully just in test code). 
>

We cache symbol creation, so Symbol('a') is Symbol('a') is True. This means 
no additional memory is consumed. 

In [1]: from sympy import *

In [2]: a, b, c = symbols('a, b, c')

In [3]: A, B, C = symbols('a, b, c')

In [4]: a is A
Out[4]: True

In [5]: id(a)
Out[5]: 139703386464976

In [6]: id(A)
Out[6]: 139703386464976


On Thursday, April 2, 2015 at 2:50:08 AM UTC-5, Joachim Durchholz wrote:
>
> Am 30.03.2015 um 21:33 schrieb Aaron Meurer: 
> > I would definitely test the different alternatives for sympy.abc to 
> > see what's faster. 
>
> I just ran bin/test with `a = Symbol('a')` etc. 
> Runtime went from 56:29 to 56:37, i.e. below the noise threshold. 
> That was with Python 2.7. I guess the Pyton compiler is "fast enough" 
> after all. 
> It's not too surprising actually: symbol creation happens just once at 
> first module import, for ~75 symbols, which isn't particularly often. 
>
> Other considerations 
> -------------------- 
>
> Error situation: 
> Importing abc offers the trap that `import * from sympy.abc` overwrites 
> the COSINEQ single-letter definitions from other SymPy modules. It's a 
> trap that everybody walks into once, has trouble figuring out, then 
> knows how to avoid. 
> For ..., n, m, ... = symbols('... m, n, ...')" we have a trap that 
> everybody walks into, has trouble figuring out, then fixes easily and 
> knows how to avoid... essentially the same situation as with a star 
> import. Well, worse because the problem is harder to diagnose with more 
> varied failure mode, less bad because it bites only those who import a 
> lot of names from abc. 
>
> Static analysis: 
> Importing from sympy.abc will confuse all static analysis tools because 
> sympy.abc uses exec with a constructed string. 
> Using symbols() will not cause that problem. 
>
> Performance: 
> Using symbols() in all contexts might have performance ramifications, 
> creating new Symbol() objects means more memory pressure than reusing 
> precreated symbols from sympy.abc (which happen 521 times in SymPy 
> itself, hopefully just in test code). 
>
> Implementation effort: 
> Switching to symbols() wherever sympy.abc is used would mean touching 
> 521 imports, and checking whether symbol reuse is actually okay for all 
> uses of the imported names. 
>
> Alternate implementation 
> ------------------------ 
> Implement sympy.abc using this: 
> -- 
> a, b, c, d, e, f, g, h, i, j = symbols('a, b, c, d, e, f, g, h, i, j') 
> k, l, m, n, o, p, q, r, s, t = symbols('k, l, m, n, o, p, q, r, s, t') 
> u, v, w, x, y, z = symbols('u, v, w, x, y, z') 
> A, B, C, D, E, F, G, H, I, J = symbols('A, B, C, D, E, F, G, H, I, J') 
> K, L, M, N, O, P, Q, R, S, T = symbols('K, L, M, N, O, P, Q, R, S, T') 
> U, V, W, X, Y, Z = symbols('U, V, W, X, Y, Z') 
> alpha, beta, gamma = symbols('alpha, beta, gamma') 
> delta, epsilon, zeta = symbols('delta, epsilon, zeta') 
> eta, theta, iota = symbols('zeta, eta, theta, iota') 
> kappa, lamda, mu = symbols('kappa, lamda, mu') 
> nu, xi, omicron = symbols('nu, xi, omicron') 
> pi, rho, sigma = symbols('pi, rho') 
> tau, upsilon, phi = symbols('sigma, tau, upsilon, phi') 
> chi, psi, omega = symbols('phi, chi, psi, omega') 
> -- 
> Error situation: As with importing. 
> Static analysis: As with symbols(). 
> Performance: As with importing (minimally faster, perhaps). 
> Implementation effort: Very, very easy. 
>
> > Also, I wonder what the effect of sympy.abc on the cache is. We have 
> > an LRU cache, and assumedly importing it messes with that, at least 
> > for a little bit. 
>
> How can I test this? 
>

-- 
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/e6d40e64-7d83-42b9-85a6-2f350f20afbb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to