# cdb.core.manip

Manipulating equations, inequalities and similar expressions

This package contains various helper functions to manipulate expressions in elementary ways, e.g. moving terms
around or multiplying sides of an expression by a factor. In order to use this package, import it with the standard
Python import statement: if you do `import cdb.core.manip as manip`

then e.g. the `isolate`

function is available as
`manip.isolate`

.## eq_to_subrule(ex: Ex) -> Ex

Create substitution rule from an equation.

Creates a substitution rule from an equation

`Ex`

.eq_to_subrule($a = b + c + d$);

\(\displaystyle{}b+c+d \rightarrow a\)

b + c + d -> a

## multiply_through(ex: Ex, factor: Ex, auto_distribute=False) -> Ex

Multiply all terms by the same factor.

Multiplies all terms in

`ex`

by `factor`

. If `auto_distribute`

is `True`

, distribute is called on the resulting expression.multiply_through($a+b < c$, $k$);

\(\displaystyle{}k \left(a+b\right) < k c\)

k (a + b) < k c

## add_through(ex: Ex, factor: Ex) -> Ex

Add a factor to both sides of an equation.

add_through($A_{\mu}B_{\nu} = C_{\mu \nu}$, $D_{\mu \nu}$);

\(\displaystyle{}A_{\mu} B_{\nu}+D_{\mu \nu} = C_{\mu \nu}+D_{\mu \nu}\)

A_{\mu} B_{\nu} + D_{\mu \nu} = C_{\mu \nu} + D_{\mu \nu}

## apply_through(ex: Ex, op: Ex) -> Ex

Apply an operator through both sides of an equation.

apply_through($\partial{x_{\mu}} = 0$, $\partial{#}$);

\(\displaystyle{}\partial\left(\partial\left(x_{\mu}\right)\right) = \partial\left(0\right)\)

\partial(\partial(x_{\mu})) = \partial(0)

## get_lhs(ex: Ex) -> Ex

Return left-hand side of an expression

Returns the left hand side of an equation, inequality or expression whose top node contains two children. get_lhs($a=b$);

\(\displaystyle{}a\)

a

## get_rhs(ex: Ex) -> Ex

Return right-hand side of an expression

Returns the right-hand side of an equation, inequality or expression whose top node contains two children. get_rhs($a=b$);

\(\displaystyle{}b\)

b

## swap_sides(ex: Ex) -> Ex

Swap the left and right-hand sides of an expression.

Swaps the two sides of an equation, inequality or expression whose top node contains two children. Inequalities will flip as appropriate.
## get_factor(node: ExNode, term: Ex) -> Ex

Get all multiplicative factors of term in node

get_factor($3/2 R$.top(), $R$);

\(\displaystyle{}\frac{3}{2}\)

3/2

## get_basis_component(ex: Ex, basis: Ex) -> Ex

Returns the multiplicative coefficients of \texttt{basis

in \texttt{ex}}test := A_{\mu\nu} \exp(i*k_\mu*x^{\mu})+B_{\mu\nu} \exp(-i*k_\mu*x^{\mu});
get_basis_component(test, $\exp(-i*k_\mu*x^{\mu})$);
get_basis_component(test, $A_{\mu\nu}$);
get_basis_component(test, $k_{\mu}$);
get_basis_component(test, $C_{\mu\nu}$);

\(\displaystyle{}A_{\mu \nu} \exp\left(i k_{\mu} x^{\mu}\right)+B_{\mu \nu} \exp\left(-i k_{\mu} x^{\mu}\right)\)

A_{\mu \nu} \exp(i k_{\mu} x^{\mu}) + B_{\mu \nu} \exp(-i k_{\mu} x^{\mu})

\(\displaystyle{}B_{\mu \nu}\)

B_{\mu \nu}

\(\displaystyle{}\exp\left(i k_{\mu} x^{\mu}\right)\)

\exp(i k_{\mu} x^{\mu})

\(\displaystyle{}A_{\mu \nu} \exp\left(i x^{\mu}\right)+B_{\mu \nu} \exp\left(-i x^{\mu}\right)\)

A_{\mu \nu} \exp(i x^{\mu}) + B_{\mu \nu} \exp(-i x^{\mu})

\(\displaystyle{}0\)

0

## to_rhs(ex: Ex, *parts: Ex..., match_type: str = "all") -> Ex

Move the indicated term of the expression to the right-hand side.

If `ex`

is an equation or inequality which contains `part`

on its left hand side, then moves all `parts`

to the right hand side.
`match_type`

can be either `all`

which will move all terms which contain each part as a factor, `numeric`

which will move terms up to a numeric prefactor or
`exact`

which will only move the term if the subtree matches exactly.to_rhs($2a+b+j*b+k*b = c+d$);

\(\displaystyle{}0 = c+d-2a-b-j b-k b\)

0 = c + d-2a-b-j b-k b

\partial{#}::Derivative.
to_rhs($-\partial_{\alpha}{b_{\beta}} - \partial_{\beta}{a_{\alpha}} = 0$, $\partial_{\alpha}{b_{\beta}}$, match_type="exact");

\(\displaystyle{}-\partial_{\alpha}{b_{\beta}}-\partial_{\beta}{a_{\alpha}} = 0\)

-\partial_{\alpha}(b_{\beta})-\partial_{\beta}(a_{\alpha}) = 0

## to_lhs(ex: Ex, *parts: Ex..., match_type: str = "all") -> Ex

Move the indicated term of the expression to the left-hand side.

Complement of `to_rhs`

.## isolate()

Isolates a term on the left hand side of an equation or inequality

ex := 2a + 1/2 a * k - b = c * a + b * k + a - 4;
isolate(ex, $a$, True);
ex2 := -3/2 R + 5\Lambda = T\kappa;
isolate(ex2, $R$);

\(\displaystyle{}2a+\frac{1}{2}a k-b = c a+b k+a-4\)

2a + 1/2 a k-b = c a + b k + a-4

\(\displaystyle{}a = \left(b k-4+b\right) {\left(1-c\right)}^{-1}\)

a = (b k-4 + b) (1-c)**(-1)

\(\displaystyle{} - \frac{3}{2}R+5\Lambda = T \kappa\)

- 3/2 R + 5\Lambda = T \kappa

\(\displaystyle{}R = - \frac{2}{3}T \kappa+\frac{10}{3}\Lambda\)

R = - 2/3 T \kappa + 10/3 \Lambda