-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | n-dimensional arrays -- -- n-dimensional arrays founded on numhask. @package numhask-array @version 0.3 module NumHask.Array.Constraints type family IsValidConcat i (a :: [Nat]) (b :: [Nat]) :: Bool type family Squeeze (a :: [Nat]) type family Concatenate i (a :: [Nat]) (b :: [Nat]) :: [Nat] type family IsValidTranspose (p :: [Nat]) (a :: [Nat]) :: Bool -- | Reduces axis i in shape s. Does not maintain singlton dimension. type family Fold i (s :: [Nat]) -- | Reduces axis i in shape s. Maintains singlton dimension type family FoldAlong i (s :: [Nat]) type family TailModule i (s :: [Nat]) type family HeadModule i (s :: [Nat]) type family Transpose a -- | numbers with a shape module NumHask.Shape -- | Not everything that has a shape is representable. -- -- todo: Structure is a useful alternative concept/naming convention class HasShape f where { type family Shape f; } shape :: HasShape f => f a -> Shape f -- | A Functor f is Representable if tabulate -- and index witness an isomorphism to (->) x. -- -- Every Distributive Functor is actually -- Representable. -- -- Every Representable Functor from Hask to Hask is a right -- adjoint. -- --
--   tabulate . index  ≡ id
--   index . tabulate  ≡ id
--   tabulate . returnreturn
--   
class Distributive f => Representable (f :: Type -> Type) where { -- | If no definition is provided, this will default to GRep. type family Rep (f :: Type -> Type) :: Type; } -- |
--   fmap f . tabulatetabulate . fmap f
--   
-- -- If no definition is provided, this will default to gtabulate. tabulate :: Representable f => (Rep f -> a) -> f a -- | If no definition is provided, this will default to gindex. index :: Representable f => f a -> Rep f -> a -- | Experimental api following -- https://pechersky.github.io/haskell-numpy-docs/quickstart.basics.html module NumHask.Array.Example module NumHask.Array -- | an array polymorphic in container and shape -- --
--   >>> a
--   [[[1, 2, 3, 4],
--     [5, 6, 7, 8],
--     [9, 10, 11, 12]],
--    [[13, 14, 15, 16],
--     [17, 18, 19, 20],
--     [21, 22, 23, 24]]]
--   
data family Array (c :: Type -> Type) (ds :: [k]) (a :: Type) -- | an array with dimensions represented at the value level newtype AnyArray c a AnyArray :: ([Int], c a) -> AnyArray c a -- | convert an array with type-level shape to value-level shape anyArray :: Dimensions ds => Array c (ds :: [Nat]) a -> AnyArray c a -- | a sweet class of container with attributes necessary to supply the set -- of operations here class (Functor f) => Container f generate :: Container f => Int -> (Int -> a) -> f a idx :: Container f => f a -> Int -> a cslice :: Container f => Int -> Int -> f a -> f a zipWith :: Container f => (a -> a -> a) -> f a -> f a -> f a chunkItUp :: Container f => [f a] -> Int -> f a -> [f a] cfoldl' :: Container f => (b -> a -> b) -> b -> f a -> b cfoldr :: Container f => (a -> b -> b) -> b -> f a -> b cconcat :: Container f => [f a] -> f a -- | convert from n-dim shape index to a flat index -- --
--   >>> ind [2,3,4] [1,1,1]
--   17
--   
ind :: [Int] -> [Int] -> Int -- | convert from a flat index to a shape index -- --
--   >>> unind [2,3,4] 17
--   [1,1,1]
--   
unind :: [Int] -> Int -> [Int] -- | convert the top layer of a SomeArray to a [SomeArray] flatten1 :: Container c => AnyArray c a -> [AnyArray c a] type Vector c n = Array c '[n] type Matrix c m n = Array c '[m, n] -- | outer product -- -- todo: reconcile with numhask version -- --
--   >>> v NumHask.Array.>< v
--   [[1, 2, 3],
--    [2, 4, 6],
--    [3, 6, 9]]
--   
(><) :: forall c (r :: [Nat]) (s :: [Nat]) a. (Container c, CommutativeRing a, Dimensions r, Dimensions s, Dimensions ((++) r s)) => Array c r a -> Array c s a -> Array c ((++) r s) a -- | matrix multiplication -- --
--   >>> let a = [1, 2, 3, 4] :: Array [] '[2, 2] Int
--   
--   >>> let b = [5, 6, 7, 8] :: Array [] '[2, 2] Int
--   
--   >>> a
--   [[1, 2],
--    [3, 4]]
--   
-- --
--   >>> b
--   [[5, 6],
--    [7, 8]]
--   
-- --
--   >>> mmult a b
--   [[19, 22],
--    [43, 50]]
--   
mmult :: forall c m n k a. (Hilbert (Vector c k a), Dimensions '[m, k], Dimensions '[k, n], Dimensions '[m, n], Container c) => Matrix c (m :: Nat) (k :: Nat) a -> Matrix c k n a -> Matrix c m n a -- | extract the row of a matrix row :: forall c i a m n. (Dimensions '[m, n], Container c, KnownNat i, (<) i m ~ 'True) => Proxy i -> Matrix c m n a -> Vector c n a rank2Shape :: Dimensions '[m, n] => Matrix c (m :: Nat) (n :: Nat) a -> (Int, Int) unsafeRow :: forall c a m n. (Container c, Dimensions '[m, n]) => Int -> Matrix c (m :: Nat) (n :: Nat) a -> Vector c n a unsafeCol :: forall c a m n. (Container c, Dimensions '[m, n]) => Int -> Matrix c (m :: Nat) (n :: Nat) a -> Vector c m a -- | extract the column of a matrix col :: forall c j a m n. (Dimensions '[m, n], Container c, KnownNat j, (<) j n ~ 'True) => Proxy j -> Matrix c m n a -> Vector c m a -- |
--   >>> unsafeIndex a [0,2,1]
--   10
--   
unsafeIndex :: (Container c, Dimensions r) => Array c (r :: [Nat]) a -> [Int] -> a -- |
--   >>> unsafeSlice [[0,1],[2],[1,2]] a :: Array [] '[2,1,2] Int
--   [[[10, 11]],
--    [[22, 23]]]
--   
unsafeSlice :: (Container c, IsList (c a), Item (c a) ~ a, Dimensions r, Dimensions r0) => [[Int]] -> Array c (r :: [Nat]) a -> Array c (r0 :: [Nat]) a -- | todo: an ambiguous type variable has snuck in here somewhere -- --
--   slice (Proxy :: Proxy '[ '[0,1],'[2],'[1,2]]) a
--   
-- -- slice :: (SingKind a1, SingI a2, Container c, IsList (c a3), Dimensions r, Dimensions r0, Item (c a3) ~# a3, Demote a1 ~# Integer) => proxy a2 -> Array c r a3 -> Array c r0 a3 -- |
--   >>> foldAlong (Proxy :: Proxy 1) (\_ -> ([0..3] :: Array [] '[4] Int)) a
--   [[0, 1, 2, 3],
--    [0, 1, 2, 3]]
--   
-- -- todo: resolution of a primitive and a scalar eg Expected type: Array -- '[10] Int -> Array '[] Int Actual type: Array '[10] (Array '[] Int) -- -> Array '[] Int foldAlong :: forall c s vw uvw uw w a. (Container c, KnownNat s, Dimensions uvw, uw ~ Fold s uvw, w ~ Drop 1 vw, vw ~ TailModule s uvw) => Proxy s -> (Array c vw a -> Array c w a) -> Array c uvw a -> Array c uw a -- | todo: No instance for (Container (Array [] '[]) error -- --
--   mapAlong (Proxy :: Proxy 0) (\x -> NumHask.Array.zipWith (*) x x) a
--   
-- -- mapAlong :: forall c s uvw vw a. (Container c, KnownNat s, Dimensions uvw, vw ~ HeadModule s uvw) => Proxy s -> (Array c vw a -> Array c vw a) -> Array c uvw a -> Array c uvw a -- |
--   >>> concatenate (Proxy :: Proxy 2) a a
--   [[[1, 2, 3, 4, 1, 2, 3, 4],
--     [5, 6, 7, 8, 5, 6, 7, 8],
--     [9, 10, 11, 12, 9, 10, 11, 12]],
--    [[13, 14, 15, 16, 13, 14, 15, 16],
--     [17, 18, 19, 20, 17, 18, 19, 20],
--     [21, 22, 23, 24, 21, 22, 23, 24]]]
--   
concatenate :: forall c s r t a. (Container c, SingI s, Dimensions r, Dimensions t, IsValidConcat s t r ~ 'True) => Proxy s -> Array c r a -> Array c t a -> Array c (Concatenate s t r) a -- |
--   >>> NumHask.Array.transpose a
--   [[[1, 2],
--     [3, 4],
--     [5, 6]],
--    [[7, 8],
--     [9, 10],
--     [11, 12]],
--    [[13, 14],
--     [15, 16],
--     [17, 18]],
--    [[19, 20],
--     [21, 22],
--     [23, 24]]]
--   
transpose :: forall c s t a. (t ~ Transpose s, Container c, Dimensions s, Dimensions t) => Array c (s :: [Nat]) a -> Array c (t :: [Nat]) a -- |
--   >>> let a = [1..24] :: Array [] '[2,1,3,4,1] Int
--   
--   >>> a
--   [[[[[1],
--       [2],
--       [3],
--       [4]],
--      [[5],
--       [6],
--       [7],
--       [8]],
--      [[9],
--       [10],
--       [11],
--       [12]]]],
--    [[[[13],
--       [14],
--       [15],
--       [16]],
--      [[17],
--       [18],
--       [19],
--       [20]],
--      [[21],
--       [22],
--       [23],
--       [24]]]]]
--   
--   >>> squeeze a
--   [[[1, 2, 3, 4],
--     [5, 6, 7, 8],
--     [9, 10, 11, 12]],
--    [[13, 14, 15, 16],
--     [17, 18, 19, 20],
--     [21, 22, 23, 24]]]
--   
squeeze :: forall c s t a. t ~ Squeeze s => Array c s a -> Array c t a singleton :: (Dimensions r, Container c) => a -> Array c (r :: [Nat]) a instance Data.Foldable.Foldable c => Data.Foldable.Foldable (NumHask.Array.Array c ds) instance GHC.Base.Functor c => GHC.Base.Functor (NumHask.Array.Array c ds) instance NumHask.Array.Container Data.Vector.Vector instance NumHask.Array.Container [] instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c) => Data.Distributive.Distributive (NumHask.Array.Array c r) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c) => Data.Functor.Rep.Representable (NumHask.Array.Array c r) instance (GHC.Show.Show a, GHC.Show.Show (GHC.Exts.Item (c a)), NumHask.Array.Container c, GHC.Exts.IsList (c a)) => GHC.Show.Show (NumHask.Array.AnyArray c a) instance (GHC.Show.Show a, GHC.Show.Show (GHC.Exts.Item (c a)), GHC.Exts.IsList (c a), NumHask.Array.Container c, Numeric.Dimensions.Dims.Dimensions ds) => GHC.Show.Show (NumHask.Array.Array c ds a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Additive.Additive a) => NumHask.Algebra.Abstract.Additive.Additive (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Additive.Subtractive a) => NumHask.Algebra.Abstract.Additive.Subtractive (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Multiplicative a) => NumHask.Algebra.Abstract.Multiplicative.Multiplicative (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Divisive a) => NumHask.Algebra.Abstract.Multiplicative.Divisive (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Multiplicative a, NumHask.Algebra.Abstract.Additive.Additive a) => NumHask.Algebra.Abstract.Ring.Distributive (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Ring.IntegralDomain a) => NumHask.Algebra.Abstract.Ring.IntegralDomain (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Field.Field a) => NumHask.Algebra.Abstract.Field.Field (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Field.ExpField a) => NumHask.Algebra.Abstract.Field.ExpField (NumHask.Array.Array c r a) instance (Data.Foldable.Foldable (NumHask.Array.Array c r), Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Field.UpperBoundedField a) => NumHask.Algebra.Abstract.Field.UpperBoundedField (NumHask.Array.Array c r a) instance (Data.Foldable.Foldable (NumHask.Array.Array c r), Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Field.LowerBoundedField a) => NumHask.Algebra.Abstract.Field.LowerBoundedField (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Multiplicative a, NumHask.Analysis.Metric.Signed a) => NumHask.Analysis.Metric.Signed (NumHask.Array.Array c r a) instance (GHC.Classes.Eq (c a), Data.Foldable.Foldable (NumHask.Array.Array c r), Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Analysis.Metric.Epsilon a) => NumHask.Analysis.Metric.Epsilon (NumHask.Array.Array c r a) instance (Data.Foldable.Foldable (NumHask.Array.Array c r), Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Field.ExpField a, NumHask.Algebra.Abstract.Additive.Subtractive a, NumHask.Analysis.Metric.Normed a a) => NumHask.Analysis.Metric.Metric (NumHask.Array.Array c r a) a instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Data.Integral.Integral a) => NumHask.Data.Integral.Integral (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Multiplicative a) => NumHask.Algebra.Linear.Hadamard.HadamardMultiplication (NumHask.Array.Array c r) a instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Divisive a) => NumHask.Algebra.Linear.Hadamard.HadamardDivision (NumHask.Array.Array c r) a instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Additive.Additive a) => NumHask.Algebra.Abstract.Action.AdditiveAction (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Additive.Subtractive a) => NumHask.Algebra.Abstract.Action.SubtractiveAction (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Multiplicative a) => NumHask.Algebra.Abstract.Action.MultiplicativeAction (NumHask.Array.Array c r a) instance (Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Multiplicative.Divisive a) => NumHask.Algebra.Abstract.Action.DivisiveAction (NumHask.Array.Array c r a) instance (NumHask.Algebra.Abstract.Action.Actor (NumHask.Array.Array c r a) Data.Type.Equality.~ a, Data.Foldable.Foldable (NumHask.Array.Array c r), NumHask.Algebra.Abstract.Ring.Distributive a, NumHask.Algebra.Abstract.Ring.CommutativeRing a, NumHask.Algebra.Abstract.Ring.Semiring a, Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c) => NumHask.Analysis.Banach.Hilbert (NumHask.Array.Array c r a) instance (Data.Foldable.Foldable (NumHask.Array.Array c r), Numeric.Dimensions.Dims.Dimensions r, NumHask.Array.Container c, NumHask.Algebra.Abstract.Ring.CommutativeRing a, NumHask.Algebra.Abstract.Multiplicative.Multiplicative a) => NumHask.Algebra.Abstract.TensorProduct.TensorProduct (NumHask.Array.Array c r a) instance (GHC.Classes.Eq (c a), NumHask.Array.Container c, Numeric.Dimensions.Dims.Dimensions r, NumHask.Algebra.Abstract.Lattice.JoinSemiLattice a) => NumHask.Algebra.Abstract.Lattice.JoinSemiLattice (NumHask.Array.Array c r a) instance (GHC.Classes.Eq (c a), NumHask.Array.Container c, Numeric.Dimensions.Dims.Dimensions r, NumHask.Algebra.Abstract.Lattice.MeetSemiLattice a) => NumHask.Algebra.Abstract.Lattice.MeetSemiLattice (NumHask.Array.Array c r a) instance (GHC.Classes.Eq (c a), NumHask.Array.Container c, Numeric.Dimensions.Dims.Dimensions r, NumHask.Algebra.Abstract.Lattice.BoundedJoinSemiLattice a) => NumHask.Algebra.Abstract.Lattice.BoundedJoinSemiLattice (NumHask.Array.Array c r a) instance (GHC.Classes.Eq (c a), NumHask.Array.Container c, Numeric.Dimensions.Dims.Dimensions r, NumHask.Algebra.Abstract.Lattice.BoundedMeetSemiLattice a) => NumHask.Algebra.Abstract.Lattice.BoundedMeetSemiLattice (NumHask.Array.Array c r a) instance forall k (c :: * -> *) (ds :: [k]) t. Control.DeepSeq.NFData (NumHask.Array.Array c ds t) instance Numeric.Dimensions.Dims.Dimensions r => NumHask.Shape.HasShape (NumHask.Array.Array c r) instance (GHC.Classes.Eq (c t), Numeric.Dimensions.Dims.Dimensions ds) => GHC.Classes.Eq (NumHask.Array.Array c ds t) instance (GHC.Exts.Item (NumHask.Array.Array c r a) Data.Type.Equality.~ GHC.Exts.Item (c a), Numeric.Dimensions.Dims.Dimensions r, NumHask.Algebra.Abstract.Additive.Additive a, GHC.Exts.IsList (c a)) => GHC.Exts.IsList (NumHask.Array.Array c r a) instance (GHC.Base.Functor (NumHask.Array.Array c r), Data.Foldable.Foldable (NumHask.Array.Array c r), NumHask.Algebra.Abstract.Additive.Additive (NumHask.Array.Array c r a), NumHask.Analysis.Metric.Normed a a, NumHask.Algebra.Abstract.Field.ExpField a) => NumHask.Analysis.Metric.Normed (NumHask.Array.Array c r a) a