Because I want to build the name of the expressions to check by concatenating other strings, and then evaluate. All this within loops, etc.
On Monday, January 9, 2023 at 1:42:26 PM UTC-3 gu...@uwosh.edu wrote: > I am not clear why you are working with strings and not just the > expressions? I think the following may be what you want: > ``` > >>> import sympy as sp > >>> a,b = sp.symbols('a b', positive = True) > >>> expr = 1.01*a**1.01*b**0.99 > >>> expr > 1.01*a**1.01*b**0.99 > >>> expr1 = 2*expr > >>> expr1 > 2.02*a**1.01*b**0.99 > >>> expr1/expr > 2.00000000000000 > ``` > Your "verify ratio function" would then just take the two expressions > directly. If you are trying to do something where you need to have > intermediate strings, we will need more explicit details to provide some > direction. > > On Monday, January 9, 2023 at 10:00:04 AM UTC-6 Santiago S wrote: > >> I have the following code >> >> import sympy as sp >> a, b = sp.symbols('a,b', real=True, positive=True) >> expr2 = 1.01 * a**1.01 * b**0.99 >> print(type(expr2), '->', expr2) >> >> >> Now I want a function that takes the string `'expr2'` and returns the >> expression `1.01 * a**1.01 * b**0.99`. >> The ultimate objective is to put together the strings for two different >> expressions `'expr2'` and `'expr3'`, which should presumably give the same >> result, and verify their ratio, as in >> >> def verify_ratio(vstr1, vstr2): >> """Compare the result of two different computations of the same >> quantity""" >> ratio = sp.N(sp.parsing.sympy_parser.parse_expr(vstr1)) / >> sp.parsing.sympy_parser.parse_expr(vstr2) >> print(vstr1 + ' / ' + vstr2, '=', sp.N(ratio)) >> return >> >> which does not work, as per what I tried: >> >> expr2 = 1.01 * a**1.01 * b**0.99 >> print(type(expr2), '->', expr2) >> >> expr2b = sp.parsing.sympy_parser.parse_expr('expr2') >> print(type(expr2b), '->', expr2b) >> >> expr2c = sp.N(sp.parsing.sympy_parser.parse_expr('expr2')) >> print(type(expr2c), '->', expr2c) >> #print(sp.N(sp.parsing.sympy_parser.parse_expr('expr2'))) >> >> expr2d = sp.sympify('expr2') >> print(type(expr2d), '->', expr2d) >> >> with output >> >> <class 'sympy.core.mul.Mul'> -> 1.01*a**1.01*b**0.99 >> <class 'sympy.core.symbol.Symbol'> -> expr2 >> <class 'sympy.core.symbol.Symbol'> -> expr2 >> <class 'sympy.core.symbol.Symbol'> -> expr2 >> >> None of my attempts achieved the objective. >> Questions or links which did not help (at least for me): >> >> 1. >> https://stackoverflow.com/questions/33606667/from-string-to-sympy-expression >> 2. >> https://docs.sympy.org/latest/tutorials/intro-tutorial/basic_operations.html >> 3. https://docs.sympy.org/latest/modules/parsing.html >> 4. >> https://docs.sympy.org/latest/modules/core.html#sympy.core.sympify.sympify >> 5. >> https://docs.sympy.org/latest/tutorials/intro-tutorial/manipulation.html >> >> >> **Note**: >> Besides the practical aspects of my objective, I don't know if there is >> any formal difference between `Symbol` (which is a specific class) and >> *expression*. From the sources I read (e.g., [this][1]) I did not arrive to >> a conclusion. >> This understanding may help in solving the question. >> >> >> [1]: >> https://docs.sympy.org/latest/tutorials/intro-tutorial/manipulation.html >> > -- 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 sympy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/67be7ac9-9538-452e-bcbc-e4dc4202fae0n%40googlegroups.com.