from sympy import symbols, sin, cos, Abs
from galgebra.ga import Ga
from galgebra.printer import Format, Fmt
from IPython.display import Latex
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.g
f = o3d.mv('f', 'scalar', f=True)
f
F = o3d.mv('F', 'vector', f=True)
lap = o3d.grad*o3d.grad
lap.Fmt(1,r'\nabla^{2}')
lap.Fmt(1,r'\nabla^{2}')
lapf = lap*f
lapf
lapf = o3d.grad | (o3d.grad * f)
lapf.Fmt(1,r'\nabla \cdot (\nabla f)')
divF = o3d.grad|F
divF.Fmt(1,'x =')
gradF = o3d.grad * F
gradF.Fmt(1,r'\nabla F')
sph_coords = (r, th, phi) = symbols('r theta phi', real=True)
(sp3d, er, eth, ephi) = Ga.build('e', g=[1, r**2, r**2 * sin(th)**2], coords=sph_coords, norm=True)
sp3d.g_raw
sp3d.grad.Fmt(1,r'\nabla')
f = sp3d.mv('f', 'scalar', f=True)
F = sp3d.mv('F', 'vector', f=True)
B = sp3d.mv('B', 'bivector', f=True)
sp3d.grad.Fmt(1,r'\nabla')
lap = sp3d.grad*sp3d.grad
lap.Fmt(1,r'\nabla^{2} ')
Lapf = lap*f
Lapf.Fmt(1,r'\nabla^{2} f')
lapf = sp3d.grad | (sp3d.grad * f)
lapf.Fmt(1,r'\nabla \cdot (\nabla f)')
dviF = sp3d.grad | F
divF.Fmt(1,r'\nabla F')
curlF = sp3d.grad ^ F
curlF.Fmt(1,r'\nabla \wedge F')
divB = sp3d.grad | B
divB.Fmt(1,r'\nabla \cdot B')
F
F.Fmt(3,'F')
F.norm()