Source code for jordan_form.cli
import sympy as sp
import typer
from rich import print
from sympy.parsing.mathematica import parse_mathematica
from ._jordan_chain import canonical_jordan_chains, sympy_func
app = typer.Typer()
[docs]
@app.command()
def main(expr: str, eigval: float, rtol: float = 1e-3, atol: float = 1e-3) -> None:
"""
Main function to run the script.
Parameters
----------
expr : str
The input function.
eigval : float
The eigenvalue.
rtol : float
The relative tolerance.
atol : float
The absolute tolerance.
"""
mat = sp.Matrix(parse_mathematica(expr))
chains = canonical_jordan_chains(
sympy_func(mat),
eigval,
rtol_norm=rtol,
rtol_rank=rtol,
atol_norm=atol,
atol_rank=atol,
)
print(f"Algebraic multiplicity: {chains.algebraic_multiplicity}")
print(f"Geometric multiplicity: {chains.geometric_multiplicity}")
print(f"Dimension of generalized eigenspace: {chains.dim_generalized_eigenspace}")
print(
"Dimension of ith generalized eigenvectors: "
f"{chains.dim_ith_generalized_eigenvectors}"
)
print(f"Chain lengths: {chains.chain_lengths}")
for i, chain in enumerate(chains.chains):
print(f"Chain {i}:")
print(chain)