packages feed

egison-5.0.0: lib/math/algebra/tensor.egi

--
--
-- Tensor
--
--

infixl expression 7 .
infixl expression 7 .'

def tensorOrder {a} (A: Tensor a) : Integer := length (tensorShape A)

def unitTensor (ns: [Integer]) : Tensor Integer := generateTensor kroneckerDelta ns

def scalarToTensor {Num a} (x: a) (ns: [Integer]) : Tensor a := x * unitTensor ns

def zeroTensor (ns: [Integer]) : Tensor Integer := generateTensor (\_ -> 0) ns

def (.') (t1: Tensor MathExpr) (t2: Tensor MathExpr) : Tensor MathExpr := 
  foldl1 (+') (contract (t1 *' t2))

def (.) {Num a} (t1: Tensor a) (t2: Tensor a) : Tensor a := 
  foldl1 (+) (contract (t1 * t2))