import sys
import subprocess
from IPython.core.display import display_pretty
from sympy import *
from galgebra.ga import Ga
from galgebra.printer import Eprint, Format, xpdf
cga3d = Ga(r'e_1 e_2 e_3 e e_{0}',g='1 0 0 0 0,0 1 0 0 0,0 0 1 0 0,0 0 0 0 -1,0 0 0 -1 0')
print(cga3d.I())
e_1^e_2^e_3^e^e_{0}
If called Eprint()
upfront, print()
will do Enhanced Console Printing(colored printing with ANSI escape sequences):
# Eprint modifies global state, start a new python process to avoid it
# affecting the rest of this notebook.
code = """
from galgebra.ga import Ga
from galgebra.printer import Eprint
Eprint()
cga3d = Ga(r'e_1 e_2 e_3 e e_{0}',g='1 0 0 0 0,0 1 0 0 0,0 0 1 0 0,0 0 0 0 -1,0 0 0 -1 0')
print(cga3d.I())
g3 = Ga('e*1|2|3')
print(g3.g)
"""
result = subprocess.check_output([sys.executable, '-c', code], universal_newlines=True)
display_pretty(result, raw=True)
e_1^e_2^e_3^e^e_{0} Matrix([ [(e_1.e_1), (e_1.e_2), (e_1.e_3)], [(e_1.e_2), (e_2.e_2), (e_2.e_3)], [(e_1.e_3), (e_2.e_3), (e_3.e_3)]])
In a Jupyter Notebook upfront, without calling print()
, it will do LaTeX printing with MathJax for Geometric Algebra expressions.
cga3d.I()
In versions of sympy
from 1.4 onwards, the raw sympy expressions also print in the output:
from sympy import Basic
if not hasattr(Basic, '_repr_latex_'): # sympy < 1.4
def _repr_latex_(self):
from sympy.printing.latex import latex
s = latex(self, mode='plain')
return "$\\displaystyle %s$" % s
Basic._repr_latex_ = _repr_latex_
cga3d.I().obj
Calling sympy.init_printing
enables printing of containers of objects too:
import sympy; sympy.init_printing(use_latex="mathjax")
g3 = Ga('e*1|2|3')
(g3.basis, g3.g)
o3d_no_wedge = Ga('e*1|2|3', g=[1, 1, 1], norm=True, wedge=False)
o3d_no_wedge.blades
If called Format()
upfront and xpdf()
eventually, print()
will do LaTeX printing (internally, the standard output will be redirected to a buffer for later consumption).
Format()
print(cga3d.I())
xpdf(filename='test_latex_output.tex', paper=(9, 10), pdfprog=None)
with open('test_latex_output.tex') as f:
data = f.read()
display_pretty(data, raw=True)
\documentclass[10pt,fleqn]{report} \usepackage[vcentering]{geometry} \geometry{papersize={9in,10in},total={8in,9in}} \pagestyle{empty} \usepackage[latin1]{inputenc} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsbsy} \usepackage{tensor} \usepackage{listings} \usepackage{color} \usepackage{xcolor} \usepackage{bm} \usepackage{breqn} \definecolor{gray}{rgb}{0.95,0.95,0.95} \setlength{\parindent}{0pt} \DeclareMathOperator{\Tr}{Tr} \DeclareMathOperator{\Adj}{Adj} \newcommand{\bfrac}[2]{\displaystyle\frac{#1}{#2}} \newcommand{\lp}{\left (} \newcommand{\rp}{\right )} \newcommand{\paren}[1]{\lp {#1} \rp} \newcommand{\half}{\frac{1}{2}} \newcommand{\llt}{\left <} \newcommand{\rgt}{\right >} \newcommand{\abs}[1]{\left |{#1}\right | } \newcommand{\pdiff}[2]{\bfrac{\partial {#1}}{\partial {#2}}} \newcommand{\lbrc}{\left \{} \newcommand{\rbrc}{\right \}} \newcommand{\W}{\wedge} \newcommand{\prm}[1]{{#1}'} \newcommand{\ddt}[1]{\bfrac{d{#1}}{dt}} \newcommand{\R}{\dagger} \newcommand{\deriv}[3]{\bfrac{d^{#3}#1}{d{#2}^{#3}}} \newcommand{\grade}[1]{\left < {#1} \right >} \newcommand{\f}[2]{{#1}\lp{#2}\rp} \newcommand{\eval}[2]{\left . {#1} \right |_{#2}} \newcommand{\Nabla}{\boldsymbol{\nabla}} \newcommand{\eb}{\boldsymbol{e}} \usepackage{float} \floatstyle{plain} % optionally change the style of the new float \newfloat{Code}{H}{myc} \lstloadlanguages{Python} \begin{document} \begin{equation*} \boldsymbol{e}_{1}\wedge \boldsymbol{e}_{2}\wedge \boldsymbol{e}_{3}\wedge \boldsymbol{e}\wedge \boldsymbol{e}_{{0}} \end{equation*} \end{document}
Format()
xyz_coords = x, y, z = symbols('x y z', real=True)
o3d, ex, ey, ez = Ga.build('e', g=[1, 1, 1], coords=xyz_coords, norm=True)
o3d.blades
def build_ga_from_solution(solution, norm=False):
[metric, coordinate_set, _index_config, cosmological_constant] = solution
return Ga('e', g=metric, coords=coordinate_set, norm=norm)
g4coords = u, x, y, z = symbols("u x y z")
g = [
[0, 0, -exp(-z), 0],
[0, S.Half * u ** 2 * exp(4 * z), 0, 0],
[-exp(-z), 0, 12 * exp(-2 * z), u * exp(-z)],
[0, 0, u * exp(-z), S.Half * u ** 2],
]
g4 = build_ga_from_solution([g, g4coords, None, 0])
# NBVAL_IGNORE_OUTPUT
g4.mv()
# NBVAL_IGNORE_OUTPUT
g4.mvr()
g4.blades
g4.e.obj
g4.bases