def test_TensorManager(): Lorentz = TensorIndexType('Lorentz', dummy_fmt='L') LorentzH = TensorIndexType('LorentzH', dummy_fmt='LH') i, j = tensor_indices('i,j', Lorentz) ih, jh = tensor_indices('ih,jh', LorentzH) p, q = tensorhead('p q', [Lorentz], [[1]]) ph, qh = tensorhead('ph qh', [LorentzH], [[1]]) Gsymbol = Symbol('Gsymbol') GHsymbol = Symbol('GHsymbol') TensorManager.set_comm(Gsymbol, GHsymbol, 0) G = tensorhead('G', [Lorentz], [[1]], Gsymbol) assert TensorManager._comm_i2symbol[G.comm] == Gsymbol GH = tensorhead('GH', [LorentzH], [[1]], GHsymbol) ps = G(i) * p(-i) psh = GH(ih) * ph(-ih) t = ps + psh t1 = t * t assert t1 == ps * ps + 2 * ps * psh + psh * psh qs = G(i) * q(-i) qsh = GH(ih) * qh(-ih) assert ps * qsh == qsh * ps assert ps * qs != qs * ps n = TensorManager.comm_symbols2i(Gsymbol) assert TensorManager.comm_i2symbol(n) == Gsymbol assert GHsymbol in TensorManager._comm_symbols2i raises(ValueError, lambda: TensorManager.set_comm(GHsymbol, 1, 2)) TensorManager.set_comms((Gsymbol, GHsymbol, 0), (Gsymbol, 1, 1)) assert TensorManager.get_comm(n, 1) == TensorManager.get_comm(1, n) == 1 TensorManager.clear() assert TensorManager.comm == [{ 0: 0, 1: 0, 2: 0 }, { 0: 0, 1: 1, 2: None }, { 0: 0, 1: None }] assert GHsymbol not in TensorManager._comm_symbols2i nh = TensorManager.comm_symbols2i(GHsymbol) assert GHsymbol in TensorManager._comm_symbols2i
def test_TensorManager(): Lorentz = TensorIndexType('Lorentz', dummy_fmt='L') LorentzH = TensorIndexType('LorentzH', dummy_fmt='LH') i, j = tensor_indices('i,j', Lorentz) ih, jh = tensor_indices('ih,jh', LorentzH) p, q = tensorhead('p q', [Lorentz], [[1]]) ph, qh = tensorhead('ph qh', [LorentzH], [[1]]) Gsymbol = Symbol('Gsymbol') GHsymbol = Symbol('GHsymbol') TensorManager.set_comm(Gsymbol, GHsymbol, 0) G = tensorhead('G', [Lorentz], [[1]], Gsymbol) assert TensorManager._comm_i2symbol[G.comm] == Gsymbol GH = tensorhead('GH', [LorentzH], [[1]], GHsymbol) ps = G(i)*p(-i) psh = GH(ih)*ph(-ih) t = ps + psh t1 = t*t assert t1 == ps*ps + 2*ps*psh + psh*psh qs = G(i)*q(-i) qsh = GH(ih)*qh(-ih) assert ps*qsh == qsh*ps assert ps*qs != qs*ps n = TensorManager.comm_symbols2i(Gsymbol) assert TensorManager.comm_i2symbol(n) == Gsymbol assert GHsymbol in TensorManager._comm_symbols2i raises(ValueError, lambda: TensorManager.set_comm(GHsymbol, 1, 2)) TensorManager.set_comms((Gsymbol,GHsymbol,0),(Gsymbol,1,1)) assert TensorManager.get_comm(n, 1) == TensorManager.get_comm(1, n) == 1 TensorManager.clear() assert TensorManager.comm == [{0:0, 1:0, 2:0}, {0:0, 1:1, 2:None}, {0:0, 1:None}] assert GHsymbol not in TensorManager._comm_symbols2i nh = TensorManager.comm_symbols2i(GHsymbol) assert GHsymbol in TensorManager._comm_symbols2i
expr : TensExpr Symbolic expression of tensors. idxs : TensorIndex Indices that encode the covariance and contravariance of the result. """ if idxs is None: idxs = TensMul(expr).get_free_indices() return expr.replace_with_arrays(ReplacementManager, idxs) def indices(s, metric, is_up=True): """ Create indices using a method similar to ~sympy.symbols. """ if isinstance(s, string_types): a = [x.name for x in symbols(s, seq=True)] else: raise ValueError( "expected a string, received object of type {}".format(type(s))) idxs = [Index(idx, metric, is_up) for idx in a] if len(idxs) == 1: return idxs[0] return idxs # metric tensors and general tensors commute with each other and themselves. TensorManager.set_comm("general", "general", 0) # partial derivatives only commute with themselves. TensorManager.set_comm("partial", "partial", 0)