In [15]:
from sympy.galgebra.ga import Ga
from sympy.galgebra.printer import Format

In [16]:
from sympy import symbols, sin, cos, init_printing
init_printing()

In [17]:
coords = (r, th, phi) = symbols('r theta phi', real=True)

In [18]:
(sph3d,er,eth,ephi) = Ga.build('e_r e_theta e_phi',g=[1,r**2,(r*sin(th))**2], coords=coords, norm=True)


---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-18-05fc00ac7b29> in <module>()
----> 1 (sph3d,er,eth,ephi) = Ga.build('e_r e_theta e_phi',g=[1,r**2,(r*sin(th))**2], coords=coords, norm=True)

/usr/local/lib/python2.7/dist-packages/sympy-0.7.5_git-py2.7.egg/sympy/galgebra/ga.pyc in build(*kargs, **kwargs)
    168         algebra, basis vectors, and grad operator as a tuple.
    169         """
--> 170         GA = Ga(*kargs, **kwargs)
    171         basis = list(GA.mv())
    172         return tuple([GA] + basis)

/usr/local/lib/python2.7/dist-packages/sympy-0.7.5_git-py2.7.egg/sympy/galgebra/ga.pyc in __init__(self, bases, **kwargs)
    226         if self.coords is not None:
    227             self.coord_vec = sum([coord * base for (coord, base) in zip(self.coords, self.basis)])
--> 228             self.build_reciprocal_basis(self.gsym)
    229             self.Pdop_identity = mv.Pdop({},ga=self)  # Identity Pdop = 1
    230             self.Pdiffs = {}

/usr/local/lib/python2.7/dist-packages/sympy-0.7.5_git-py2.7.egg/sympy/galgebra/ga.pyc in build_reciprocal_basis(self, gsym)
   1240                 rx_j = self.r_symbols[j]
   1241                 if j >= i:
-> 1242                     g_inv[i, j] = self.dot(self.r_basis_dict[rx_i], self.r_basis_dict[rx_j])
   1243                     if not self.is_ortho:
   1244                         g_inv[i, j] /= self.inorm

/usr/local/lib/python2.7/dist-packages/sympy-0.7.5_git-py2.7.egg/sympy/galgebra/ga.pyc in dot(self, A, B)
    989             A = self.remove_scalar_part(A)
    990             B = self.remove_scalar_part(B)
--> 991             return update_and_substitute(A, B, dot_product_basis_blades, self.dot_table_dict)
    992         else:
    993             if self.dot_mode == '<':  # Left contraction

/usr/local/lib/python2.7/dist-packages/sympy-0.7.5_git-py2.7.egg/sympy/galgebra/ga.pyc in update_and_substitute(expr1, expr2, func, mul_dict)
     89                 #Update mul dictionary for future
     90                 if key not in mul_dict:
---> 91                     mul_dict[key] = func(key)
     92                 expr += coef1 * coef2 * mul_dict[key]
     93     return expr

/usr/local/lib/python2.7/dist-packages/sympy-0.7.5_git-py2.7.egg/sympy/galgebra/ga.pyc in dot_product_basis_blades(self, blade12)
    752         # dot product for orthogonal basis
    753         (blade1, blade2) = blade12
--> 754         index1 = self.blades_to_indexes_dict[blade1]
    755         index2 = self.blades_to_indexes_dict[blade2]
    756         index = list(index1 + index2)

KeyError: e_r

In [ ]:
sph3d.grad

In [ ]:
F = sph3d.mv('F','vector',f=True)
f = sph3d.mv('f','scalar',f=True)

In [ ]:
F

In [ ]:
sph3d.grad * F

In [ ]:
lap = sph3d.grad * sph3d.grad
lap

In [ ]:
lap * f

In [ ]: