Welcome to Cadabra Q&A, where you can ask questions and receive answers from other members of the community.
+1 vote

Hi, I have an expression of substitution rule / equation, where the right-hand-side has numerous terms. When I tried calling simplify(_), it returned an error that I think is coming when the algorithm tries to run on both sides of the equation.

So I used get_rhs() from the manip library,

ex_temp = manip.get_rhs(exp_full);

and performed the simplification steps on ex_temp. However now ex_temp is not an equation, so when I use the function multiply_through() - I get an error.

My two questions are:

(1) Is there a way to multiply an expression which is not an equation by a factor, like multiply_through does

(2) How do I "return" the value of my non-equation ex_temp into an equation expression? like

ex_full_new := Y -> (ex_temp);

I assume it has something to do with nodes of expressions. In the manual section I see a list of functions under cdb.utils.node, but they all return values, not updating them.

Thanks in advance, Amnon

in General questions by (260 points)

1 Answer

+1 vote

You can multiply expressions like this:

 ex:= A+B+C;
 ex:= (D+E) @(ex);

I am not entirely sure what you mean with (2). Do you mean that you have two expressions and you want to turn them into an equation by setting one equal to the other? Something like

lhs:= A+B;
rhs:= C+D;
ex:= @(lhs) = @(rhs);


Finally, if you think simplify has a bug when acting on equations, please try to provide a minimal example and send that to me, so it can be fixed.

by (65.1k points)

Thanks for the reply, Your suggestions work perfectly.

About the error using simplify() - I emailed you an example notebook that leads to the error. When I use Cadabra cloud I get this message

SyntaxError: unexpected character after line continuation character (, line 1)

At: /opt/tljh/user/lib/python3.6/site-packages/sympy/parsing/sympy_parser.py(879): eval_expr /opt/tljh/user/lib/python3.6/site-packages/sympy/parsing/sympy_parser.py(966): parse_expr (2):

When I use my Cadabra build with jupyter notebook I get the traceback:

Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/cadabra2_jupyter/kernel.py", line 54, in do_execute self._execute_python(pycode) File "/usr/local/lib/python3.9/site-packages/cadabra2_jupyter/kernel.py", line 108, in _execute_python self._sandbox_context(pycode) File "/usr/local/lib/python3.9/site-packages/cadabra2_jupyter/context.py", line 51, in call exec(code, self._sandbox) File "", line 1, in File "/usr/lib/python3/dist-packages/sympy/parsing/sympy_parser.py", line 1008, in parse_expr return eval_expr(code, local_dict, global_dict) File "/usr/lib/python3/dist-packages/sympy/parsing/sympy_parser.py", line 902, in eval_expr expr = eval( File "", line 1