Noncommutative utilities for Geometric Algebra

Function Reference

sympy.galgebra.ncutil.bilinear_function(expr, fct)

If a sympy ‘Expr’ is of the form:

expr = expr_0 + expr_1*a_1 + ... + expr_n*a_n + expr_11*a_1*a_1
  • ... + expr_ij*a_i*a_j + ... + expr_nn*a_n*a_n

where all the a_j are noncommuting symbols in basis then

bilinear_function(expr) = bilinear_product(expr_0) + bilinear_product(expr_1*a_1) + ... + bilinear_product(expr_n*a_n)
  • bilinear + product(expr_11*a_1*a_1) + ... + bilinear_product(expr_nn*a_n*a_n)
sympy.galgebra.ncutil.bilinear_product(expr, fct)

If a sympy ‘Expr’ is of the form:

expr = expr_ij*a_i*a_j or expr_0 or expr_i*a_i

where all the a_i are noncommuting symbols in basis and the expr’s

are commuting expressions then

bilinear_product(expr) = expr_ij*fct(a_i, a_j)

bilinear_product(expr_0) = expr_0

bilinear_product(expr_i*a_i) = expr_i*a_i

sympy.galgebra.ncutil.coef_function(expr, fct)

If a sympy ‘Expr’ is of the form:

expr = expr_0 + expr_1*a_1 + ... + expr_n*a_n

where all the a_j are noncommuting symbols in basis then

f(expr) = fct(expr_0) + fct(expr_1)*a_1 + ... + fct(expr_n)*a_n

is returned

sympy.galgebra.ncutil.linear_derivation(expr, fct, x)

If a sympy ‘Expr’ is of the form:

expr = expr_0 + expr_1*a_1 + ... + expr_n*a_n

where all the a_j are noncommuting symbols in basis then

linear_drivation(expr) = diff(expr_0, x) + diff(expr_1, x)*a_1 + ...
  • diff(expr_n, x)*a_n + expr_1*fct(a_1, x) + ...
  • expr_n*fct(a_n, x)
sympy.galgebra.ncutil.linear_expand(expr)

If a sympy ‘Expr’ is of the form:

expr = expr_0 + expr_1*a_1 + ... + expr_n*a_n

where all the a_j are noncommuting symbols in basis then

(expr_0, ..., expr_n) and (1, a_1, ..., a_n) are returned. Note that expr_j*a_j does not have to be of that form, but rather can be any Mul with a_j as a factor (it doen not have to be a postmultiplier). expr_0 is the scalar part of the expression.

sympy.galgebra.ncutil.linear_function(expr, fct)

If a sympy ‘Expr’ is of the form:

expr = expr_0 + expr_1*a_1 + ... + expr_n*a_n

where all the a_j are noncommuting symbols in basis then

f(expr) = expr_0 + expr_1*f(a_1) + ... + expr_n*f(a_n)

is returned

sympy.galgebra.ncutil.linear_projection(expr, plist=None)

If a sympy ‘Expr’ is of the form:

expr = expr_0 + expr_1*a_1 + ... + expr_n*a_n

where all the a_j are noncommuting symbols in basis then

proj(expr) returns the sum of those terms where a_j is in plist

sympy.galgebra.ncutil.multilinear_derivation(F, fct, x)

If a sympy ‘Expr’ is of the form (summation convention):

expr = expr_0 + expr_i1i2...ir*a_i1*...*a_ir

where all the a_j are noncommuting symbols in basis then

dexpr = diff(expr_0, x) + d(expr_i1i2...ir*a_i1*...*a_ir)

is returned where d() is the product derivation

sympy.galgebra.ncutil.multilinear_function(expr, fct)

If a sympy ‘Expr’ is of the form summation convention):

expr = expr_0 + Sum{0 < r <= n}{expr_i1i2...ir*a_i1*a_i2*...*a_ir}

where all the a_j are noncommuting symbols in basis then and the dimension of the basis in n then

bilinear_function(expr) = multilinear_product(expr_0)
  • Sum{0<r<=n}multilinear_product(expr_i1i2...ir*a_i1*a_i2*...*a_ir)
sympy.galgebra.ncutil.multilinear_product(expr, fct)

If a sympy ‘Expr’ is of the form:

expr = expr_i1i2...irj*a_i1*a_i2*...*a_ir or expr_0

where all the a_i are noncommuting symbols in basis and the expr’s

are commuting expressions then

multilinear_product(expr) = expr_i1i2...ir*fct(a_i1, a_i2, ..., a_ir)

bilinear_product(expr_0) = expr_0

where fct() is defined for r <= n the total number of bases

sympy.galgebra.ncutil.non_scalar_projection(expr)

If a sympy ‘Expr’ is of the form:

expr = expr_0*S.One + expr_1*a_1 + ... + expr_n*a_n

where all the a_j are noncommuting symbols in basis then

proj(expr) returns the sum of those terms where a_j is in plist

sympy.galgebra.ncutil.product_derivation(F, fct, x)

If a sympy ‘Expr’ is of the form:

expr = expr_0*a_1*...*a_n

where all the a_j are noncommuting symbols in basis then

product_derivation(expr) = diff(expr_0, x)*a_1*...*a_n
  • expr_0*(fct(a_1, x)*a_2*...*a_n + ...
  • a_1*...*a_(i-1)*fct(a_i, x)*a_(i + 1)*...*a_n + ...
  • a_1*...*a_(n-1)*fct(a_n, x))