```-- |
-- Module:      Data.Tensor
-- Copyright:   (c) 2018 Daniel YU
-- Maintainer:  Daniel YU <leptonyu@gmail.com>
-- Stability:   experimental
-- Portability: portable
--
-- Tensor In Haskell
--
-- In ghci
--
-- > λ> :set -XDataKinds
-- > λ> :set -XOverloadedLists
-- > λ> import Data.Tensor
-- > λ> a = identity :: Tensor '[3,3] Int
-- > λ> a
-- > [[1,0,0],
-- > [0,1,0],
-- > [0,0,1]]
-- > λ> b = [1..9] :: Tensor '[3,3] Int
-- > λ> b
-- > [[1,2,3],
-- > [4,5,6],
-- > [7,8,9]]
-- > λ> a + b
-- > [[2,2,3],
-- > [4,6,6],
-- > [7,8,10]]
-- > λ> a - b
-- > [[0,-2,-3],
-- > [-4,-4,-6],
-- > [-7,-8,-8]]
-- > λ> a * b
-- > [[1,0,0],
-- > [0,5,0],
-- > [0,0,9]]
-- > λ> a `dot` b
-- > [[1,2,3],
-- > [4,5,6],
-- > [7,8,9]]
-- > λ> :t a `dyad` b
-- > a `dyad` b :: Tensor '[3, 3, 3, 3] Int
-- > λ> contraction a (i0,i1)
-- > 3
-- > λ> :t contraction a (i0,i1)
-- > contraction a (i0,i1) :: Tensor '[] Int
-- > λ> select a (i0,i0)
-- > [1,0,0]
-- > λ> select a (i0,i1)
-- > [0,1,0]
-- > λ> select a (i0,i2)
-- > [0,0,1]
-- > λ> c = 1 :: Tensor '[3,3] Int
-- > λ> c
-- > [[1,1,1],
-- > [1,1,1],
-- > [1,1,1]]
-- > λ> d = [1..4] :: Tensor '[2,2] Int
-- > λ> d
-- > [[1,2],
-- > [3,4]]
-- > λ> transpose d
-- > [[1,3],
-- > [2,4]]

module Data.Tensor(
-- * Tensor Definition
Tensor
, identity
, Scalar
, Vector
, Matrix
, SimpleTensor
-- ** Tensor Index
, TensorIndex
, Index
-- * Tensor Dimension
, TensorRank
, Shape
, shape
, rank
, HasShape(..)
-- * Tensor Operation
-- ** Reshape Tensor
, reshape
-- ** Clone Tensor
, clone
-- ** Transpose Tensor
, Transpose
, transpose
, Swapaxes
, swapaxes
-- ** Dyadic Tensor
-- ** Tensor Product
, DotTensor
, dot
-- ** Contraction Tensor
, Contraction
, Dimension
, DropIndex
, contraction
-- ** Tensor Selection
, (!)
, CheckDimension
, CheckSelect
, select
, CheckSlice
, Slice
, slice
-- ** Tensor Manipulation
, expand
, CheckConcatenate
, Concatenate
, concatenate
, CheckInsert
, Insert
, insert
, append
-- ** Tensor Space
, linspace
, geospace
, logspace
, grid
, meshgrid2
, meshgrid3
, meshgrid4
, meshgrid5
, meshgrid6
, meshgrid7
, meshgrid8
, meshgrid9
-- * Matrix Operation
, SimpleMatrix
, det
, lu
, det'
, dotM
, trace
, diag
-- * Statistical Functions
, average
, var
, std
-- * Helper
, runTensor
, i0
, i1
, i2
, i3
, i4
, i5
, i6
, i7
, i8
, i9
) where

import           Data.Tensor.Matrix
import           Data.Tensor.Space
import           Data.Tensor.Statistics
import           Data.Tensor.Tensor
import           Data.Tensor.Type
```