9. SymPy Interoperability¶
wrenfold is not a full computer algebra system. Instead, we aim to support a limited set of common operations required for applications like robotics, computer vision, numerical optimization, and machine learning. In order to help supplement missing functionality, wrenfold expressions can be converted to-and-from SymPy.
There are a some limitations:
SymPy manipulations may come with a significant performance penalty, since they all occur in python.
Not all expressions have an equivalent (in either direction of conversion). For example, expressions involving custom types have no equivalent in SymPy.
9.1. Example: Computing eigenvalues¶
As a motivating example, suppose we need an expression for the eigenvalues of a 3x3 matrix. There is
no function for this in wrenfold, but SymPy features an eigenvals()
method that can return a
closed form expression.
>>> import sympy as sp
>>> from wrenfold import sym
>>> from wrenfold import sympy_conversion
>>> m = sym.matrix_of_symbols('m', 3, 3)
>>> m
[[m_0_0, m_0_1, m_0_2], [m_1_0, m_1_1, m_1_2], [m_2_0, m_2_1, m_2_2]]
>>> m_sp = sympy_conversion.to_sympy(m, sp=sp) # Convert matrix to SymPy.
>>> m_sp
Matrix([
[m_0_0, m_0_1, m_0_2],
[m_1_0, m_1_1, m_1_2],
[m_2_0, m_2_1, m_2_2]])
>>> ev_sp = m_sp.eigenvals(multiple=True)
>>> sympy_conversion.from_sympy(ev_sp[0], sp=sp) # Convert eigenvalues back to wrenfold.
m_0_0/3 + m_1_1/3 + m_2_2/3 - (3*m_0_1*m_1_0 - 3*m_0_0*m_1_1 + 3*m_0_2*m_2_0 + ...
Given the eigenvalue expressions, we can now substitute the variables in m
with our choice of
expressions.