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__"
36 | (~~>) : AxisName -> Nat -> Axis
37 | (~~>) axisName n = axisName ~> Vect n
41 | data IsCubical : Axis -> Type where
42 | MkIsCubical : (name : AxisName) -> (n : Nat) -> IsCubical (name ~~> n)
46 | toContCubical : {0 a : Axis} -> IsCubical a -> IsCubical a.cont
47 | toContCubical (MkIsCubical _ n) = MkIsCubical n
51 | dimHelper : {0 a : Axis} -> IsCubical a -> Nat
52 | dimHelper (MkIsCubical _ n) = n
56 | dim : (0 a : Axis) -> IsCubical a => Nat
57 | dim _ @{ic} = dimHelper ic
61 | dimsHelper : {0 shape : Vect r Axis} ->
62 | All IsCubical shape -> List Nat
64 | dimsHelper (ic :: ns) = dimHelper ic :: dimsHelper ns
68 | dims : (0 shape : Vect r Axis) -> All IsCubical shape => List Nat
69 | dims _ @{ac} = dimsHelper ac
73 | size : (0 shape : Vect r Axis) -> (ac : All IsCubical shape) => Nat
74 | size shape = prod (dims shape)
79 | data IsNaperian : Axis -> Type where
80 | MkIsNaperian : (name : AxisName) -> (pos : Type) ->
81 | IsNaperian (name ~> Nap pos)
86 | toContNaperian : {0 a : Axis} -> IsNaperian a -> IsNaperian a.cont
87 | toContNaperian (MkIsNaperian _ pos) = MkIsNaperian pos
91 | LogHelper : {0 a : Axis} -> IsNaperian a => Type
92 | LogHelper @{MkIsNaperian _ pos} = pos
96 | Log : (0 a : Axis) -> IsNaperian a => Type
97 | Log a @{inn} = LogHelper @{inn}
99 | namespace IsConcrete
101 | data IsConcrete : Axis -> Type where
102 | MkIsConcrete : (name : AxisName) -> IsConcrete c -> IsConcrete (name ~> c)
105 | toContConcrete : {0 a : Axis} -> IsConcrete a -> IsConcrete a.cont
106 | toContConcrete (MkIsConcrete _ ic) = ic