data EinsumSpec { } #
EinsumSpec { esInputs :: ![[Char]], esOutput :: ![Char] }
data ContractionOrder { } #
Contract Int Int ContractionOrder
Leaf Int
Contraction order (which tensors to contract first).
parseEinsum :: String -> Either String EinsumSpec { } #
Parse einsum specification string.
allIndices :: EinsumSpec -> [Char] { } #
Get all unique indices from a spec.
contractionIndices :: EinsumSpec -> [Char] { } #
Get contraction indices (in inputs but not output).
batchIndices :: EinsumSpec -> [Char] { } #
Get batch indices (in all inputs and output).
optimizeOrder :: EinsumSpec -> [[Int]] -> ContractionOrder { } #
Optimize contraction order to minimize FLOPs.
greedyOrder :: EinsumSpec -> [[Int]] -> ContractionOrder { } #
contractionCost :: EinsumSpec -> [Int] -> [Int] -> Int { } #
resultShape :: EinsumSpec -> [Char] -> [Int] -> [Char] -> [Int] -> [Int] { } #
einsum :: VU.Unbox a { } #
Execute einsum with single input.
einsum2 :: (VU.Unbox a, Num a) { } #
Execute einsum with two inputs.
einsum3 :: (VU.Unbox a, Num a) { } #
Execute einsum with three inputs.
executeEinsum1 :: (VU.Unbox a, Num a) { } #
outputStrides :: { } #
srcIndices :: { } #
srcMap :: { } #
dstFlat :: { } #
val :: { } #
srcIndices :: { } #
srcMap :: { } #
allEqual :: { } #
dstFlat :: { } #
val :: { } #
when :: { } #
executeEinsum2 :: (VU.Unbox a, Num a) { } #
outputIdx :: { } #
shape1 :: { } #
shape2 :: { } #
dimMap :: { } #
outputShape :: { } #
outputSize :: { } #
commonIdx :: { } #
contractionIdx :: { } #
allIdx :: { } #
allDims :: { } #
totalIter :: { } #
idxVals :: { } #
idxMap :: { } #
inBounds1 :: { } #
inBounds2 :: { } #
val1 :: { } #
val2 :: { } #
prod :: { } #
dstFlat :: { } #
when :: { } #
executeEinsum3 :: (VU.Unbox a, Num a) { } #
matmul :: (VU.Unbox a, Num a) { } #
Matrix multiplication via einsum.
batchMatmul :: (VU.Unbox a, Num a) { } #
Batch matrix multiplication.
dot :: (VU.Unbox a, Num a) { } #
Dot product via einsum.
outer :: (VU.Unbox a, Num a) { } #
Outer product via einsum.
trace :: (VU.Unbox a, Num a) { } #
Trace via einsum.
diag :: (VU.Unbox a, Num a) { } #
Extract diagonal via einsum.
transpose :: (VU.Unbox a, Num a) { } #
Transpose via einsum.
computeStrides :: [Int] -> [Int] { } #
unflattenIndex :: [Int] -> Int -> [Int] { } #
flattenIndex :: [Int] -> [Int] -> Int { } #