0 | module Data.Tensor.Shape.Axis
2 | import Data.Vect.Quantifiers
4 | import Data.Container.Base
19 | public export infixr 0 ~>
20 | public export infixr 0 ~~>
23 | rename : Axis -> AxisName -> Axis
24 | rename a str = str ~> a.cont
30 | TTInternalName : AxisName
31 | TTInternalName = "__tensortype_tempaxis__"
35 | At : (ax : Axis) -> ax.cont.Shp -> Axis
36 | At ax s = ax.name ~> ax.cont `At` s
41 | (~~>) : AxisName -> Nat -> Axis
42 | (~~>) axisName n = axisName ~> Vect n
46 | data IsCubical : Axis -> Type where
47 | MkIsCubical : (name : AxisName) -> (n : Nat) -> IsCubical (name ~~> n)
51 | toContCubical : {0 a : Axis} -> IsCubical a -> IsCubical a.cont
52 | toContCubical (MkIsCubical _ n) = Via n
56 | dimHelper : {0 a : Axis} -> IsCubical a -> Nat
57 | dimHelper (MkIsCubical _ n) = n
61 | (.dim) : (0 a : Axis) -> IsCubical a => Nat
62 | (.dim) _ @{ic} = dimHelper ic
66 | dimsHelper : {0 shape : Vect r Axis} ->
67 | All IsCubical shape -> List Nat
69 | dimsHelper (ic :: ns) = dimHelper ic :: dimsHelper ns
73 | dims : (0 shape : Vect r Axis) -> All IsCubical shape => List Nat
74 | dims _ @{ac} = dimsHelper ac
78 | size : (0 shape : Vect r Axis) -> (ac : All IsCubical shape) => Nat
79 | size shape = prod (dims shape)
84 | data IsNaperian : Axis -> Type where
85 | MkIsNaperian : (name : AxisName) -> (pos : Type) ->
86 | IsNaperian (name ~> Nap pos)
91 | toContNaperian : {0 a : Axis} -> IsNaperian a -> IsNaperian a.cont
92 | toContNaperian (MkIsNaperian _ pos) = Via pos
96 | LogHelper : {0 a : Axis} -> IsNaperian a => Type
97 | LogHelper @{MkIsNaperian _ pos} = pos
101 | Log : (0 a : Axis) -> IsNaperian a => Type
102 | Log a @{inn} = LogHelper @{inn}
104 | namespace IsConcrete
106 | data IsConcrete : Axis -> Type where
107 | MkIsConcrete : (name : AxisName) -> IsConcrete c -> IsConcrete (name ~> c)
110 | toContConcrete : {0 a : Axis} -> IsConcrete a -> IsConcrete a.cont
111 | toContConcrete (MkIsConcrete _ ic) = ic