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