| """ |
| This module exports all latin and greek letters as Symbols, so you can |
| conveniently do |
| |
| >>> from sympy.abc import x, y |
| |
| instead of the slightly more clunky-looking |
| |
| >>> from sympy import symbols |
| >>> x, y = symbols('x y') |
| |
| Caveats |
| ======= |
| |
| 1. As of the time of writing this, the names ``O``, ``S``, ``I``, ``N``, |
| ``E``, and ``Q`` are colliding with names defined in SymPy. If you import them |
| from both ``sympy.abc`` and ``sympy``, the second import will "win". |
| This is an issue only for * imports, which should only be used for short-lived |
| code such as interactive sessions and throwaway scripts that do not survive |
| until the next SymPy upgrade, where ``sympy`` may contain a different set of |
| names. |
| |
| 2. This module does not define symbol names on demand, i.e. |
| ``from sympy.abc import foo`` will be reported as an error because |
| ``sympy.abc`` does not contain the name ``foo``. To get a symbol named ``foo``, |
| you still need to use ``Symbol('foo')`` or ``symbols('foo')``. |
| You can freely mix usage of ``sympy.abc`` and ``Symbol``/``symbols``, though |
| sticking with one and only one way to get the symbols does tend to make the code |
| more readable. |
| |
| The module also defines some special names to help detect which names clash |
| with the default SymPy namespace. |
| |
| ``_clash1`` defines all the single letter variables that clash with |
| SymPy objects; ``_clash2`` defines the multi-letter clashing symbols; |
| and ``_clash`` is the union of both. These can be passed for ``locals`` |
| during sympification if one desires Symbols rather than the non-Symbol |
| objects for those names. |
| |
| Examples |
| ======== |
| |
| >>> from sympy import S |
| >>> from sympy.abc import _clash1, _clash2, _clash |
| >>> S("Q & C", locals=_clash1) |
| C & Q |
| >>> S('pi(x)', locals=_clash2) |
| pi(x) |
| >>> S('pi(C, Q)', locals=_clash) |
| pi(C, Q) |
| |
| """ |
| from __future__ import annotations |
| from typing import Any |
|
|
| import string |
|
|
| from .core import Symbol, symbols |
| from .core.alphabets import greeks |
| from sympy.parsing.sympy_parser import null |
|
|
| |
|
|
| |
| |
|
|
| 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, delta = symbols('alpha, beta, gamma, delta') |
| epsilon, zeta, eta, theta = symbols('epsilon, zeta, eta, theta') |
| iota, kappa, lamda, mu = symbols('iota, kappa, lamda, mu') |
| nu, xi, omicron, pi = symbols('nu, xi, omicron, pi') |
| rho, sigma, tau, upsilon = symbols('rho, sigma, tau, upsilon') |
| phi, chi, psi, omega = symbols('phi, chi, psi, omega') |
|
|
|
|
| |
|
|
| |
| |
|
|
| _latin = list(string.ascii_letters) |
| |
| _greek = list(greeks) |
| |
| _greek.remove("lambda") |
| _greek.append("lamda") |
|
|
| ns: dict[str, Any] = {} |
| exec('from sympy import *', ns) |
| _clash1: dict[str, Any] = {} |
| _clash2: dict[str, Any] = {} |
| while ns: |
| _k, _ = ns.popitem() |
| if _k in _greek: |
| _clash2[_k] = null |
| _greek.remove(_k) |
| elif _k in _latin: |
| _clash1[_k] = null |
| _latin.remove(_k) |
| _clash = {} |
| _clash.update(_clash1) |
| _clash.update(_clash2) |
|
|
| del _latin, _greek, Symbol, _k, null |
|
|