Hello,
I have a string written in Latex for which I know the dimensions of each
symbol. My goal is to validate the dimensional consistency of the
expression. I'm having trouble with substitution. For example,
>>> from sympy.physics.units import mass, length, time
>>> from sympy.physics.units.systems.si import dimsys_SI
>>> from sympy.parsing.latex import parse_latex
>>> eq = parse_latex("F = m a")
>>> eq
Eq(F, a*m)
I can get the symbols from that expression
>>> set_of_symbols_in_eq = eq.free_symbols
And for each symbol in the set I know what dimensions each has:
>>> Fdim = mass * length / time**2
>>> mdim = mass
>>> adim = length / time**2
When I try substituting the dimensions into the original expression, I get
an error
>>> eq.subs({F: Fdim, m: mdim, a: adim})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'F' is not defined
That is surprising, because *F* is a Symbol:
>>> eq.lhs
F
>>> type(eq.lhs)
<class 'sympy.core.symbol.Symbol'>
I think that error means that although *F* is a Symbol, there isn't a
variable named F that points to the Symbol F?
If that's the case, I don't know how to access the symbols in the abstract
syntax tree provided by *eq*.
How would I indicate to SymPy that "F = m a" in *eq* has variables with
certain dimensions?
My goal is to run
>>> dimsys_SI.equivalent_dims(Fdim, mdim * adim)
True
without retyping the expression.
I think I want something like the following, except with dimensions
substituted for each symbol.
>>> dimsys_SI.equivalent_dims( eq.lhs, eq.rhs )
False
--
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 view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/a4e2b3fe-27b2-45b8-a7f6-598caea772de%40googlegroups.com.