easytensor 2.1.0.0 → 2.1.1.0
raw patch · 16 files changed
+335/−79 lines, 16 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Numeric.DataFrame.Type: data TypedList (f :: k -> Type) (xs :: [k]) :: forall k. () => k -> Type -> [k] -> Type
- Numeric.DataFrame.Type: instance forall k l (t :: l) (ds :: [k]). Numeric.PrimBytes.PrimBytes (Numeric.DataFrame.Type.DataFrame t ds) => Foreign.Storable.Storable (Numeric.DataFrame.Type.DataFrame t ds)
- Numeric.DataFrame.Type: instance forall k l (t :: l) (xs :: [k]). (Data.Data.Data (Numeric.DataFrame.Type.DataFrame t xs), Data.Typeable.Internal.Typeable t, Data.Typeable.Internal.Typeable xs, Data.Typeable.Internal.Typeable k, Data.Typeable.Internal.Typeable l) => Data.Data.Data (Numeric.DataFrame.Type.DataFrame' xs t)
- Numeric.DataFrame.Type: instance forall l (xns :: [Numeric.Dimensions.Dim.XNat]) (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Enum.Bounded (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Enum.Bounded (Numeric.DataFrame.Type.DataFrame ts xns)
- Numeric.DataFrame.Type: instance forall l (xns :: [Numeric.Dimensions.Dim.XNat]) (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Float.Floating (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Float.Floating (Numeric.DataFrame.Type.DataFrame ts xns)
- Numeric.DataFrame.Type: instance forall l (xns :: [Numeric.Dimensions.Dim.XNat]) (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Num.Num (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Num.Num (Numeric.DataFrame.Type.DataFrame ts xns)
- Numeric.DataFrame.Type: instance forall l (xns :: [Numeric.Dimensions.Dim.XNat]) (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Real.Fractional (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Real.Fractional (Numeric.DataFrame.Type.DataFrame ts xns)
- Numeric.DataFrame.Type: instance forall l (xns :: [Numeric.Dimensions.Dim.XNat]) (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), Numeric.PrimBytes.PrimBytes (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => Numeric.PrimBytes.PrimBytes (Numeric.DataFrame.Type.DataFrame ts xns)
- Numeric.DataFrame.Type: instance forall l (xns :: [Numeric.Dimensions.Dim.XNat]) (ts :: l). (xns Data.Type.Equality.~ Data.Type.List.Map 'Numeric.Dimensions.Dim.N (Numeric.Dimensions.Dim.DimsBound xns), GHC.Classes.Eq (Numeric.DataFrame.Type.DataFrame ts xns), GHC.Classes.Ord (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Classes.Ord (Numeric.DataFrame.Type.DataFrame ts xns)
- Numeric.DataFrame.Type: instance forall l (xns :: [Numeric.Dimensions.Dim.XNat]) (ts :: l). (xns Data.Type.Equality.~ Data.Type.List.Map 'Numeric.Dimensions.Dim.N (Numeric.Dimensions.Dim.DimsBound xns), Numeric.ProductOrd.ProductOrder (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => Numeric.ProductOrd.ProductOrder (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: data Dim (x :: k)
+ Numeric.DataFrame.Type: data Idx (d :: k)
+ Numeric.DataFrame.Type: data TypedList (f :: k -> Type) (xs :: [k])
+ Numeric.DataFrame.Type: instance forall (xns :: [Numeric.Dimensions.Dim.XNat]) l (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Enum.Bounded (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Enum.Bounded (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: instance forall (xns :: [Numeric.Dimensions.Dim.XNat]) l (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Float.Floating (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Float.Floating (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: instance forall (xns :: [Numeric.Dimensions.Dim.XNat]) l (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Num.Num (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Num.Num (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: instance forall (xns :: [Numeric.Dimensions.Dim.XNat]) l (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), GHC.Real.Fractional (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Real.Fractional (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: instance forall (xns :: [Numeric.Dimensions.Dim.XNat]) l (ts :: l). (Numeric.Dimensions.Dim.Dimensions xns, Numeric.DataFrame.Type.KnownBackends ts (Numeric.Dimensions.Dim.DimsBound xns), Numeric.PrimBytes.PrimBytes (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => Numeric.PrimBytes.PrimBytes (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: instance forall (xns :: [Numeric.Dimensions.Dim.XNat]) l (ts :: l). (xns GHC.Types.~ Data.Type.List.Map 'Numeric.Dimensions.Dim.N (Numeric.Dimensions.Dim.DimsBound xns), GHC.Classes.Eq (Numeric.DataFrame.Type.DataFrame ts xns), GHC.Classes.Ord (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => GHC.Classes.Ord (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: instance forall (xns :: [Numeric.Dimensions.Dim.XNat]) l (ts :: l). (xns GHC.Types.~ Data.Type.List.Map 'Numeric.Dimensions.Dim.N (Numeric.Dimensions.Dim.DimsBound xns), Numeric.ProductOrd.ProductOrder (Numeric.DataFrame.Type.DataFrame ts (Numeric.Dimensions.Dim.DimsBound xns))) => Numeric.ProductOrd.ProductOrder (Numeric.DataFrame.Type.DataFrame ts xns)
+ Numeric.DataFrame.Type: instance forall l (t :: l) k (xs :: [k]). (Data.Data.Data (Numeric.DataFrame.Type.DataFrame t xs), Data.Typeable.Internal.Typeable t, Data.Typeable.Internal.Typeable xs, Data.Typeable.Internal.Typeable k, Data.Typeable.Internal.Typeable l) => Data.Data.Data (Numeric.DataFrame.Type.DataFrame' xs t)
+ Numeric.DataFrame.Type: instance forall l k (t :: l) (ds :: [k]). Numeric.PrimBytes.PrimBytes (Numeric.DataFrame.Type.DataFrame t ds) => Foreign.Storable.Storable (Numeric.DataFrame.Type.DataFrame t ds)
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes (GHC.Ptr.FunPtr a)
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes (GHC.Stable.StablePtr a)
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CBool
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CChar
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CClock
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CDouble
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CFloat
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CInt
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CIntMax
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CIntPtr
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CLLong
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CLong
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CPtrdiff
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CSChar
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CSUSeconds
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CShort
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CSigAtomic
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CSize
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CTime
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CUChar
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CUInt
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CUIntMax
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CUIntPtr
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CULLong
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CULong
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CUSeconds
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CUShort
+ Numeric.PrimBytes: instance Numeric.PrimBytes.PrimBytes Foreign.C.Types.CWchar
- Numeric.DataFrame.IO: SomeIODataFrame :: IODataFrame t ns -> SomeIODataFrame
+ Numeric.DataFrame.IO: SomeIODataFrame :: IODataFrame t ns -> SomeIODataFrame (t :: Type)
- Numeric.DataFrame.Internal.Backend: Backend :: backend -> Backend
+ Numeric.DataFrame.Internal.Backend: Backend :: backend -> Backend (i :: Type) (t :: Type) (ds :: [Nat]) (backend :: Type)
- Numeric.DataFrame.Internal.Backend: [_getBackend] :: Backend -> backend
+ Numeric.DataFrame.Internal.Backend: [_getBackend] :: Backend (i :: Type) (t :: Type) (ds :: [Nat]) (backend :: Type) -> backend
- Numeric.DataFrame.ST: SomeSTDataFrame :: STDataFrame s t ns -> SomeSTDataFrame s
+ Numeric.DataFrame.ST: SomeSTDataFrame :: STDataFrame s t ns -> SomeSTDataFrame s (t :: Type)
- Numeric.DataFrame.Type: SomeDataFrame :: DataFrame t ns -> SomeDataFrame
+ Numeric.DataFrame.Type: SomeDataFrame :: DataFrame t ns -> SomeDataFrame (t :: l)
- Numeric.DataFrame.Type: pattern Dn :: forall (d :: XNat). KnownDimType d => forall (n :: Nat). (KindOf d ~ XNat, d ~ N n) => Dim n -> Dim d
+ Numeric.DataFrame.Type: pattern Dn :: KnownDimType d => d ~~ N n => Dim n -> Dim d
- Numeric.DataFrame.Type: pattern XDims :: forall (ds :: [XNat]). KnownDimKind (KindOfEl ds) => forall (ns :: [Nat]). (KindOfEl ds ~ XNat, FixedDims ds ns) => Dims ns -> Dims ds
+ Numeric.DataFrame.Type: pattern XDims :: KnownDimKind (KindOfEl ds) => FixedDims ds ns => Dims ns -> Dims ds
- Numeric.DataFrame.Type: pattern XIdxs :: forall (ds :: [XNat]) (ns :: [Nat]). (FixedDims ds ns, Dimensions ns) => () => Idxs ns -> Idxs ds
+ Numeric.DataFrame.Type: pattern XIdxs :: (FixedDims ds ns, Dimensions ns) => Idxs ns -> Idxs ds
- Numeric.DataFrame.Type: pattern TypeList :: forall k (xs :: [k]). () => RepresentableList xs => TypeList xs
+ Numeric.DataFrame.Type: pattern TypeList :: () => RepresentableList xs => TypeList xs
- Numeric.DataFrame.Type: pattern U :: forall k (f :: k -> Type) (xs :: [k]). () => xs ~ ([] :: [k]) => TypedList f xs
+ Numeric.DataFrame.Type: pattern U :: () => xs ~ ('[] :: [k]) => TypedList f xs
- Numeric.DataFrame.Type: pattern (:*) :: forall k (f :: k -> Type) (xs :: [k]). () => forall (y :: k) (ys :: [k]). xs ~ (y : ys) => f y -> TypedList f ys -> TypedList f xs
+ Numeric.DataFrame.Type: pattern (:*) :: forall k f xs (y :: k) ys. () => xs ~ (y : ys) => f y -> TypedList f ys -> TypedList f xs
- Numeric.DataFrame.Type: type Dims = TypedList (Dim :: k -> Type)
+ Numeric.DataFrame.Type: type Dims = TypedList Dim :: k -> Type
- Numeric.DataFrame.Type: type Idxs = TypedList (Idx :: k -> Type)
+ Numeric.DataFrame.Type: type Idxs = TypedList Idx :: k -> Type
- Numeric.DataFrame.Type: type N = N
+ Numeric.DataFrame.Type: type N = 'N
- Numeric.DataFrame.Type: type XN = XN
+ Numeric.DataFrame.Type: type XN = 'XN
- Numeric.Matrix.Bidiagonal: BiDiag :: Matrix t n n -> Scalar t -> Vector t (Min n m) -> Vector t (Min n m) -> Matrix t m m -> Scalar t -> BiDiag
+ Numeric.Matrix.Bidiagonal: BiDiag :: Matrix t n n -> Scalar t -> Vector t (Min n m) -> Vector t (Min n m) -> Matrix t m m -> Scalar t -> BiDiag (t :: Type) (n :: Nat) (m :: Nat)
- Numeric.Matrix.Bidiagonal: [bdAlpha] :: BiDiag -> Vector t (Min n m)
+ Numeric.Matrix.Bidiagonal: [bdAlpha] :: BiDiag (t :: Type) (n :: Nat) (m :: Nat) -> Vector t (Min n m)
- Numeric.Matrix.Bidiagonal: [bdBeta] :: BiDiag -> Vector t (Min n m)
+ Numeric.Matrix.Bidiagonal: [bdBeta] :: BiDiag (t :: Type) (n :: Nat) (m :: Nat) -> Vector t (Min n m)
- Numeric.Matrix.Bidiagonal: [bdUDet] :: BiDiag -> Scalar t
+ Numeric.Matrix.Bidiagonal: [bdUDet] :: BiDiag (t :: Type) (n :: Nat) (m :: Nat) -> Scalar t
- Numeric.Matrix.Bidiagonal: [bdU] :: BiDiag -> Matrix t n n
+ Numeric.Matrix.Bidiagonal: [bdU] :: BiDiag (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t n n
- Numeric.Matrix.Bidiagonal: [bdVDet] :: BiDiag -> Scalar t
+ Numeric.Matrix.Bidiagonal: [bdVDet] :: BiDiag (t :: Type) (n :: Nat) (m :: Nat) -> Scalar t
- Numeric.Matrix.Bidiagonal: [bdV] :: BiDiag -> Matrix t m m
+ Numeric.Matrix.Bidiagonal: [bdV] :: BiDiag (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t m m
- Numeric.Matrix.LU: LU :: Matrix t n n -> Matrix t n n -> Matrix t n n -> Scalar t -> LU
+ Numeric.Matrix.LU: LU :: Matrix t n n -> Matrix t n n -> Matrix t n n -> Scalar t -> LU (t :: Type) (n :: Nat)
- Numeric.Matrix.LU: [luLower] :: LU -> Matrix t n n
+ Numeric.Matrix.LU: [luLower] :: LU (t :: Type) (n :: Nat) -> Matrix t n n
- Numeric.Matrix.LU: [luPermDet] :: LU -> Scalar t
+ Numeric.Matrix.LU: [luPermDet] :: LU (t :: Type) (n :: Nat) -> Scalar t
- Numeric.Matrix.LU: [luPerm] :: LU -> Matrix t n n
+ Numeric.Matrix.LU: [luPerm] :: LU (t :: Type) (n :: Nat) -> Matrix t n n
- Numeric.Matrix.LU: [luUpper] :: LU -> Matrix t n n
+ Numeric.Matrix.LU: [luUpper] :: LU (t :: Type) (n :: Nat) -> Matrix t n n
- Numeric.Matrix.QR: LQ :: Matrix t n m -> Matrix t m m -> Scalar t -> LQ
+ Numeric.Matrix.QR: LQ :: Matrix t n m -> Matrix t m m -> Scalar t -> LQ (t :: Type) (n :: Nat) (m :: Nat)
- Numeric.Matrix.QR: QR :: Matrix t n n -> Scalar t -> Matrix t n m -> QR
+ Numeric.Matrix.QR: QR :: Matrix t n n -> Scalar t -> Matrix t n m -> QR (t :: Type) (n :: Nat) (m :: Nat)
- Numeric.Matrix.QR: [lqL] :: LQ -> Matrix t n m
+ Numeric.Matrix.QR: [lqL] :: LQ (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t n m
- Numeric.Matrix.QR: [lqQDet] :: LQ -> Scalar t
+ Numeric.Matrix.QR: [lqQDet] :: LQ (t :: Type) (n :: Nat) (m :: Nat) -> Scalar t
- Numeric.Matrix.QR: [lqQ] :: LQ -> Matrix t m m
+ Numeric.Matrix.QR: [lqQ] :: LQ (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t m m
- Numeric.Matrix.QR: [qrQDet] :: QR -> Scalar t
+ Numeric.Matrix.QR: [qrQDet] :: QR (t :: Type) (n :: Nat) (m :: Nat) -> Scalar t
- Numeric.Matrix.QR: [qrQ] :: QR -> Matrix t n n
+ Numeric.Matrix.QR: [qrQ] :: QR (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t n n
- Numeric.Matrix.QR: [qrR] :: QR -> Matrix t n m
+ Numeric.Matrix.QR: [qrR] :: QR (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t n m
- Numeric.Matrix.SVD: SVD :: Matrix t n n -> Vector t (Min n m) -> Matrix t m m -> SVD
+ Numeric.Matrix.SVD: SVD :: Matrix t n n -> Vector t (Min n m) -> Matrix t m m -> SVD (t :: Type) (n :: Nat) (m :: Nat)
- Numeric.Matrix.SVD: [svdS] :: SVD -> Vector t (Min n m)
+ Numeric.Matrix.SVD: [svdS] :: SVD (t :: Type) (n :: Nat) (m :: Nat) -> Vector t (Min n m)
- Numeric.Matrix.SVD: [svdU] :: SVD -> Matrix t n n
+ Numeric.Matrix.SVD: [svdU] :: SVD (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t n n
- Numeric.Matrix.SVD: [svdV] :: SVD -> Matrix t m m
+ Numeric.Matrix.SVD: [svdV] :: SVD (t :: Type) (n :: Nat) (m :: Nat) -> Matrix t m m
Files
- bench/misc.hs +3/−0
- easytensor.cabal +3/−3
- src-base/Numeric/DataFrame/Internal/Backend/Family.hs +2/−1
- src/Numeric/DataFrame/Internal/Mutable.hs +2/−1
- src/Numeric/DataFrame/Type.hs +42/−15
- src/Numeric/Matrix/Internal.hs +3/−2
- src/Numeric/Matrix/QR.hs +8/−3
- src/Numeric/PrimBytes.hs +141/−22
- src/Numeric/Subroutine/Sort.hs +5/−2
- test/Numeric/Arbitraries.hs +9/−1
- test/Numeric/Matrix/BidiagonalTest.hs +5/−2
- test/Numeric/Matrix/LUTest.hs +3/−0
- test/Numeric/Matrix/QRTest.hs +6/−1
- test/Numeric/Matrix/SVDTest.hs +4/−1
- test/Numeric/PrimBytesTest.hs +82/−24
- test/Spec/Util.hs +17/−1
bench/misc.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeApplications #-}@@ -39,7 +40,9 @@ -- Amazing inference! -- m :: KnownNat k => DataFrame '[k,2,4] -> print $ m %* vec4 1 2.25 3 0.162+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) _ -> print "Failed to construct a DataFrame!"+#endif putStrLn "Constructing larger matrices" let x :: DataFrame Double '[4,5,2] x = DF4 (transpose $ DF2
easytensor.cabal view
@@ -1,13 +1,13 @@ cabal-version: 1.24 --- This file has been generated from package.yaml by hpack version 0.31.1.+-- This file has been generated from package.yaml by hpack version 0.33.0. -- -- see: https://github.com/sol/hpack ----- hash: 75fa5546720cb775f5ce9a26382fcd60253bba851441e469156242ee52655f97+-- hash: 3c6d02c6fd2233f54c11cad29fb86ebe9dd802a64c7a3d880ee6d3bd047673ca name: easytensor-version: 2.1.0.0+version: 2.1.1.0 synopsis: Pure, type-indexed haskell vector, matrix, and tensor library. description: Pure, type-indexed haskell vector, matrix, and tensor library. Features dimensionality type-checking for all operations. Generic n-dimensional versions are implemented using low-level prim ops. Allows ad-hoc replacement with fixed low-dimensionality vectors and matrices without changing user interface. Please see the README on GitHub at <https://github.com/achirkin/easytensor#readme> category: math, geometry
src-base/Numeric/DataFrame/Internal/Backend/Family.hs view
@@ -34,7 +34,8 @@ import Data.Constraint-import GHC.Base+import GHC.Base (Type)+import GHC.Exts (unsafeCoerce#) import Numeric.DataFrame.Internal.Backend.Family.ArrayBase import Numeric.DataFrame.Internal.Backend.Family.DoubleX2
src/Numeric/DataFrame/Internal/Mutable.hs view
@@ -40,7 +40,8 @@ , getDataFrameSteps# ) where -import GHC.Base+import GHC.Base (Type)+import GHC.Exts import Numeric.DataFrame.Internal.PrimArray import Numeric.DataFrame.Type import Numeric.Dimensions
src/Numeric/DataFrame/Type.hs view
@@ -88,7 +88,8 @@ import Numeric.DataFrame.Internal.BackendI (DFBackend, KnownBackend) import qualified Numeric.DataFrame.Internal.BackendI as Backend -+-- See dimensions:Numeric.Dimensions.Dim+#define IS_UNSOUND_MATCHING_810_900 (MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) && !MIN_VERSION_GLASGOW_HASKELL(9,1,0,0)) -- | Keep data in a primitive data frame -- and maintain information about Dimensions in the type system@@ -241,7 +242,7 @@ | D :* (Dims :: Dims ns) <- dims `inSpaceOf` df , Dict <- inferKnownBackend @t @ns = XFrame (df ! i)- (!) _ _ = error "IndexFrame: impossible pattern"+ (!) _ _ = error "IndexFrame: impossible arguments" instance (RepresentableList ts, All PrimBytes ts) => IndexFrame (ts :: [Type]) (xd :: XNat) xds where@@ -259,7 +260,7 @@ getTsEvs ((_ :: Proxy a) :* as') | Dict <- getTsEvs @_ @d @ds as' , Dict <- inferKnownBackend @a @ds = Dict- (!) _ _ = error "IndexFrame: impossible pattern"+ (!) _ _ = error "IndexFrame: impossible arguments" {- | This type family describes two strategies for dealing with dimensions when@@ -496,6 +497,9 @@ = Read.parens . Read.prec 10 $ do Read.lift . Read.expect . Read.Ident $ "DF" ++ show (dimVal d) packDF' (<*> Read.step (readPrecFixedDF ds)) pure+#if IS_UNSOUND_MATCHING_810_900+readPrecFixedDF _ = error "Numeric.DataFrame.Type.readPrecFixedDF: impossible arguments"+#endif {- The first argument is, in fact, a @dimsBound@, but covered in the same @[XNat]@@@ -621,6 +625,9 @@ xs <- readFixedMultiDF ts (dims @ns) case inferKnownBackend @ts @ns of Dict -> return $ XFrame (x :*: xs)+#if IS_UNSOUND_MATCHING_810_900+readBoundedMultiDF _ _ = error "Numeric.DataFrame.Type.readBoundedMultiDF: impossible arguments"+#endif readSomeMultiDF :: forall (ts :: [Type]) . (All Read ts, All PrimBytes ts)@@ -811,7 +818,7 @@ , Dict <- inferKnownBackend @t @(d ': ds) , Dict <- inferKnownBackend @t @ds = go d- | otherwise = error "Numeric.DataFrame.Type.packDF: impossible args"+ | otherwise = error "Numeric.DataFrame.Type.packDF: impossible arguments" where go :: (Dimensions ds, KnownBackend t ds, KnownBackend t (d ': ds)) => Dim d@@ -876,7 +883,7 @@ unpackDF c | d :* Dims <- dims @(d ': ds) = unpackDF' (go d)- | otherwise = error "Numeric.DataFrame.Type.unpackDF: impossible args"+ | otherwise = error "Numeric.DataFrame.Type.unpackDF: impossible arguments" where go :: forall a . (a ~ Dict (Dimensions ds, KnownBackend t ds)) => Dim d -> a@@ -906,7 +913,9 @@ packDF' k z | d :* _ <- dims @(d ': ds) = go d (z (packDF @t @d @ds))- | otherwise = error "Numeric.DataFrame.Type.packDF': impossible args"+#if !MIN_VERSION_GLASGOW_HASKELL(9,0,0,0)+ | otherwise = error "Numeric.DataFrame.Type.packDF': impossible arguments"+#endif where go :: forall n . Dim n -> c (PackDF t ds n (DataFrame t (d ': ds))) -> c (DataFrame t (d ': ds))@@ -949,7 +958,7 @@ f consume (I# o) = consume (I# (o -# td)) (fromElems cd o arr) in k Dict f (I# (off +# td *# (n -# 1#))) )- | otherwise = error "Numeric.DataFrame.Type.unpackDF: impossible args"+ | otherwise = error "Numeric.DataFrame.Type.unpackDF: impossible arguments" -- | Append one DataFrame to another, sum up the first dimension.@@ -968,7 +977,9 @@ , Dict <- inferKnownBackend @t @(m :+ ds) , Dict <- inferKnownBackend @t @((n + m) :+ ds) = unsafeAppendPB- | otherwise = error "Numeri.DataFrame.Type/appendDF: impossible arguments"+#if !MIN_VERSION_GLASGOW_HASKELL(9,0,0,0)+ | otherwise = error "Numeri.DataFrame.Type.appendDF: impossible arguments"+#endif -- | Append a small DataFrame to a big DataFrame on the left. --@@ -986,7 +997,9 @@ , Dict <- inferKnownBackend @t @ds , Dict <- inferKnownBackend @t @((n + 1) :+ ds) = unsafeAppendPB- | otherwise = error "Numeri.DataFrame.Type/consDF: impossible arguments"+#if !MIN_VERSION_GLASGOW_HASKELL(9,0,0,0)+ | otherwise = error "Numeri.DataFrame.Type.consDF: impossible arguments"+#endif -- | Append a small DataFrame to a big DataFrame on the right. --@@ -1004,8 +1017,9 @@ , Dict <- inferKnownBackend @t @ds , Dict <- inferKnownBackend @t @((n + 1) :+ ds) = unsafeAppendPB- | otherwise = error "Numeri.DataFrame.Type/snocDF: impossible arguments"-+#if !MIN_VERSION_GLASGOW_HASKELL(9,0,0,0)+ | otherwise = error "Numeri.DataFrame.Type.snocDF: impossible arguments"+#endif -- | Unsafely copy two PrimBytes values into a third one. unsafeAppendPB :: forall x y z@@ -1049,14 +1063,15 @@ => [DataFrame t ds] -> DataFrame t (XN 0 ': xds) fromList xs | Dx (D :: Dim n) <- someDimVal . fromIntegral $ length xs+ , Dict <- Dict @(ds ~ UnMap N xds) -- just to make GHC not complain about unused constraints. , Dict <- inferKnownBackend @t @(n ': ds) , Dict <- unsafeEqTypes @_ @ds @(DimsBound xds) , Dict <- inferExactFixedDims (dims @ds) = XFrame (fromListWithDefault @t @n @ds undefined xs)+#if !MIN_VERSION_GLASGOW_HASKELL(9,0,0,0) | otherwise- = case Dict @(ds ~ UnMap N xds) of- Dict -> -- just make GHC not complain about unused constraints.- error "Numeri.DataFrame.Type/fromList: impossible arguments"+ = error "Numeri.DataFrame.Type.fromList: impossible arguments"+#endif -- | Try to convert between @XNat@-indexed DataFrames. --@@ -1112,7 +1127,7 @@ ) of (# _, r #) -> fromElems steps 0# r | otherwise- = error "Numeri.DataFrame.Type/asDiag: impossible arguments"+ = error "Numeri.DataFrame.Type.asDiag: impossible arguments" {-# INLINE asDiag #-} -- Need this for @packDF'@ to make @Int -> c z@ a proper second-order type@@ -1136,10 +1151,16 @@ (\g -> Off . f $ k . runOff g) (Off . const . z) ) v+#if IS_UNSOUND_MATCHING_810_900+ _ -> error "DataFrame.gfoldl: impossible arguments"+#endif gunfold k z _ = case typeableDims @ds of U -> k (z S) D :* (Dims :: Dims ns) -> case inferTypeableCons @ds of Dict -> packDF' k z+#if IS_UNSOUND_MATCHING_810_900+ _ -> error "DataFrame.gunfold: impossible arguments"+#endif toConstr _ = case typeableDims @ds of U -> scalarFrameConstr d :* _ -> singleFrameConstr $ dimVal d@@ -1241,6 +1262,9 @@ where d2 = divDim d D2 d2' = d2 `plusDim` modDim d D2+#if IS_UNSOUND_MATCHING_810_900+fromSingleFrame _ _ = error "fromSingleFrame: impossible arguments"+#endif toSingleFrame :: forall (t :: Type) (ds :: [Nat]) (x :: Type) . PrimBytes t@@ -1280,6 +1304,9 @@ where d2 = divDim d D2 d2' = d2 `plusDim` modDim d D2+#if IS_UNSOUND_MATCHING_810_900+toSingleFrame _ _ = error "toSingleFrame: impossible arguments"+#endif {-# INLINE toSingleFrame #-} type family MultiFrameRepNil (ts :: [Type]) :: (Type -> Type) where
src/Numeric/Matrix/Internal.hs view
@@ -1,12 +1,11 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-}-{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}@@ -205,7 +204,9 @@ | ((D :: Dim n) :* (D :: Dim m) :* U) <- dims @ns , Dict <- inferPrimElem df = XFrame (transpose df :: Matrix t m n)+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) transpose _ = error "MatrixTranspose/transpose: impossible argument"+#endif instance (KnownDim n, PrimArray t (Matrix t n n), Num t) => SquareMatrix t n where
src/Numeric/Matrix/QR.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}@@ -173,7 +174,9 @@ solveLowerTriangularR lqL (subDataFrameView i0 xPtr) (transpose lqQ %*) <$> unsafeFreezeDataFrame xPtr -- NB: make a stateful product for transposed mat- _ -> error "qrSolveR: impossible pattern"+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0)+ _ -> error "Numeric.Matrix.QR.qrSolveR: impossible pattern"+#endif where dn = dim @n dm = dim @m@@ -224,8 +227,10 @@ solveLowerTriangularL xPtr lqL ewmap @t @ds @'[n] (sslice i0) <$> unsafeFreezeDataFrame xPtr- _ -> error "qrSolveL/compareDim: impossible pattern"- | otherwise = error "qrSolveL: impossible pattern"+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0)+ _ -> error "Numeric.Matrix.QR.qrSolveL/compareDim: impossible pattern"+#endif+ | otherwise = error "Numeric.Matrix.QR.qrSolveL: impossible pattern" where dn = dim @n dm = dim @m
src/Numeric/PrimBytes.hs view
@@ -1,20 +1,22 @@-{-# LANGUAGE AllowAmbiguousTypes #-}-{-# LANGUAGE CPP #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DefaultSignatures #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE MagicHash #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PolyKinds #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE UnboxedTuples #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DefaultSignatures #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeInType #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE UndecidableInstances #-} {- | Module : Numeric.PrimBytes Copyright : (c) Artem Chirkin@@ -86,10 +88,12 @@ import Data.Type.Equality ((:~:) (..)) import qualified Data.Type.List as L import Data.Type.Lits+import Foreign.C.Types import GHC.Exts import GHC.Generics import GHC.Int import GHC.IO (IO (..))+import GHC.Stable import GHC.Word import Numeric.Dimensions import qualified Numeric.Tuple.Lazy as TL@@ -304,7 +308,7 @@ . ( PrimBytes a, Elem name (PrimFields a) , KnownSymbol name, Num b) => a -> b-bFieldOffsetOf a = fromIntegral (I# (byteFieldOffset (proxy# @Symbol @name) a))+bFieldOffsetOf a = fromIntegral (I# (byteFieldOffset (proxy# :: Proxy# name) a)) -- | Same as `Foreign.Storable.peekElemOff`: peek an element @a@ by the offset -- measured in @byteSize a@.@@ -494,7 +498,11 @@ gwriteAddr p = coerce (gwriteAddr @f p) gbyteSize p = coerce (gbyteSize @f p) gbyteAlign p = coerce (gbyteAlign @f p)- gbyteFieldOffset p = coerce (gbyteFieldOffset @f p)+ gbyteFieldOffset p = coerce' (gbyteFieldOffset @f p)+ where+ coerce' :: (Word# -> Int# -> Proxy# name -> f p -> Int#)+ -> Word# -> Int# -> Proxy# name -> M1 i c f p -> Int#+ coerce' = coerce instance (GPrimBytes f, GPrimBytes g) => GPrimBytes (f :*: g) where gfromBytes p t ps i ba = x :*: y@@ -932,7 +940,6 @@ writeArray mba i (D# x) = writeDoubleArray# mba i x {-# INLINE writeArray #-} - instance PrimBytes (Ptr a) where type PrimFields (Ptr a) = '[] getBytes (Ptr x) = case runRW#@@ -970,7 +977,80 @@ writeArray mba i (Ptr x) = writeAddrArray# mba i x {-# INLINE writeArray #-} +instance PrimBytes (FunPtr a) where+ type PrimFields (FunPtr a) = '[]+ getBytes (FunPtr x) = case runRW#+ ( \s0 -> case newByteArray# SIZEOF_HSFUNPTR# s0 of+ (# s1, marr #) -> case writeAddrArray# marr 0# x s1 of+ s2 -> unsafeFreezeByteArray# marr s2+ ) of (# _, a #) -> a+ {-# NOINLINE getBytes #-}+ fromBytes off ba+ = FunPtr (indexWord8ArrayAsAddr# ba off)+ {-# INLINE fromBytes #-}+ readBytes mba off s+ = case readWord8ArrayAsAddr# mba off s of (# s', r #) -> (# s', FunPtr r #)+ {-# INLINE readBytes #-}+ writeBytes mba off (FunPtr x)+ = writeWord8ArrayAsAddr# mba off x+ {-# INLINE writeBytes #-}+ readAddr a s+ = case readAddrOffAddr# a 0# s of (# s', x #) -> (# s', FunPtr x #)+ {-# INLINE readAddr #-}+ writeAddr (FunPtr x) a+ = writeAddrOffAddr# a 0# x+ {-# INLINE writeAddr #-}+ byteSize _ = SIZEOF_HSFUNPTR#+ {-# INLINE byteSize #-}+ byteAlign _ = ALIGNMENT_HSFUNPTR#+ {-# INLINE byteAlign #-}+ byteFieldOffset _ _ = negateInt# 1#+ {-# INLINE byteFieldOffset #-}+ indexArray ba i = FunPtr (indexAddrArray# ba i)+ {-# INLINE indexArray #-}+ readArray mba i s+ = case readAddrArray# mba i s of (# s', x #) -> (# s', FunPtr x #)+ {-# INLINE readArray #-}+ writeArray mba i (FunPtr x) = writeAddrArray# mba i x+ {-# INLINE writeArray #-} +instance PrimBytes (StablePtr a) where+ type PrimFields (StablePtr a) = '[]+ getBytes (StablePtr x) = case runRW#+ ( \s0 -> case newByteArray# SIZEOF_HSSTABLEPTR# s0 of+ (# s1, marr #) -> case writeStablePtrArray# marr 0# x s1 of+ s2 -> unsafeFreezeByteArray# marr s2+ ) of (# _, a #) -> a+ {-# NOINLINE getBytes #-}+ fromBytes off ba+ = StablePtr (indexWord8ArrayAsStablePtr# ba off)+ {-# INLINE fromBytes #-}+ readBytes mba off s+ = case readWord8ArrayAsStablePtr# mba off s of (# s', r #) -> (# s', StablePtr r #)+ {-# INLINE readBytes #-}+ writeBytes mba off (StablePtr x)+ = writeWord8ArrayAsStablePtr# mba off x+ {-# INLINE writeBytes #-}+ readAddr a s+ = case readStablePtrOffAddr# a 0# s of (# s', x #) -> (# s', StablePtr x #)+ {-# INLINE readAddr #-}+ writeAddr (StablePtr x) a+ = writeStablePtrOffAddr# a 0# x+ {-# INLINE writeAddr #-}+ byteSize _ = SIZEOF_HSSTABLEPTR#+ {-# INLINE byteSize #-}+ byteAlign _ = ALIGNMENT_HSSTABLEPTR#+ {-# INLINE byteAlign #-}+ byteFieldOffset _ _ = negateInt# 1#+ {-# INLINE byteFieldOffset #-}+ indexArray ba i = StablePtr (indexStablePtrArray# ba i)+ {-# INLINE indexArray #-}+ readArray mba i s+ = case readStablePtrArray# mba i s of (# s', x #) -> (# s', StablePtr x #)+ {-# INLINE readArray #-}+ writeArray mba i (StablePtr x) = writeStablePtrArray# mba i x+ {-# INLINE writeArray #-}+ instance PrimBytes Int8 where type PrimFields Int8 = '[] getBytes (I8# x) = case runRW#@@ -1325,6 +1405,33 @@ writeArray = unsafeCoerce# (writeArray @Word) {-# INLINE writeArray #-} +deriving instance PrimBytes CChar+deriving instance PrimBytes CSChar+deriving instance PrimBytes CUChar+deriving instance PrimBytes CShort+deriving instance PrimBytes CUShort+deriving instance PrimBytes CInt+deriving instance PrimBytes CUInt+deriving instance PrimBytes CLong+deriving instance PrimBytes CULong+deriving instance PrimBytes CPtrdiff+deriving instance PrimBytes CSize+deriving instance PrimBytes CWchar+deriving instance PrimBytes CSigAtomic+deriving instance PrimBytes CLLong+deriving instance PrimBytes CULLong+deriving instance PrimBytes CBool+deriving instance PrimBytes CIntPtr+deriving instance PrimBytes CUIntPtr+deriving instance PrimBytes CIntMax+deriving instance PrimBytes CUIntMax+deriving instance PrimBytes CClock+deriving instance PrimBytes CTime+deriving instance PrimBytes CUSeconds+deriving instance PrimBytes CSUSeconds+deriving instance PrimBytes CFloat+deriving instance PrimBytes CDouble+ anyList :: forall (k :: Type) (xs :: [k]) . RepresentableList xs => [Any] anyList = unsafeCoerce# (tList @xs)@@ -1463,10 +1570,10 @@ where go :: L.All PrimBytes ds => MutableByteArray# s -> Int# -> TS.Tuple ds -> TypeList ds -> State# s -> State# s- go _ _ _ Empty s = s go mb n (TS.Id x :* xs) (_ :* ts@TypeList) s | n' <- roundUpInt n (byteAlign x) = go mb (n' +# byteSize x) xs ts (writeBytes mb (off +# n') x s)+ go _ _ _ _ s = s {-# INLINE writeBytes #-} readAddr addr = go 0# (tList @xs) where@@ -1484,10 +1591,10 @@ where go :: L.All PrimBytes ds => Int# -> TS.Tuple ds -> TypeList ds -> State# s -> State# s- go _ _ Empty s = s go n (TS.Id x :* xs) (_ :* ts@TypeList) s | n' <- roundUpInt n (byteAlign x) = go (n' +# byteSize x) xs ts (writeAddr x (plusAddr# addr n') s)+ go _ _ _ s = s {-# INLINE writeAddr #-} byteSize _ = go 0# 1# (tList @xs) where@@ -1652,6 +1759,10 @@ writeWord8ArrayAsAddr# mba off = writeAddrArray# mba (uncheckedIShiftRL# off OFFSHIFT_P#) {-# INLINE writeWord8ArrayAsAddr# #-} +writeWord8ArrayAsStablePtr# :: MutableByteArray# d -> Int# -> StablePtr# a -> State# d -> State# d+writeWord8ArrayAsStablePtr# mba off = writeStablePtrArray# mba (uncheckedIShiftRL# off OFFSHIFT_P#)+{-# INLINE writeWord8ArrayAsStablePtr# #-}+ writeWord8ArrayAsFloat# :: MutableByteArray# d -> Int# -> Float# -> State# d -> State# d writeWord8ArrayAsFloat# mba off = writeFloatArray# mba (uncheckedIShiftRL# off OFFSHIFT_F#) {-# INLINE writeWord8ArrayAsFloat# #-}@@ -1700,6 +1811,10 @@ readWord8ArrayAsAddr# mba off = readAddrArray# mba (uncheckedIShiftRL# off OFFSHIFT_P#) {-# INLINE readWord8ArrayAsAddr# #-} +readWord8ArrayAsStablePtr# :: MutableByteArray# d -> Int# -> State# d -> (# State# d, StablePtr# a #)+readWord8ArrayAsStablePtr# mba off = readStablePtrArray# mba (uncheckedIShiftRL# off OFFSHIFT_P#)+{-# INLINE readWord8ArrayAsStablePtr# #-}+ readWord8ArrayAsFloat# :: MutableByteArray# d -> Int# -> State# d -> (# State# d, Float# #) readWord8ArrayAsFloat# mba off = readFloatArray# mba (uncheckedIShiftRL# off OFFSHIFT_F#) {-# INLINE readWord8ArrayAsFloat# #-}@@ -1747,6 +1862,10 @@ indexWord8ArrayAsAddr# :: ByteArray# -> Int# -> Addr# indexWord8ArrayAsAddr# ba off = indexAddrArray# ba (uncheckedIShiftRL# off OFFSHIFT_P#) {-# INLINE indexWord8ArrayAsAddr# #-}++indexWord8ArrayAsStablePtr# :: ByteArray# -> Int# -> StablePtr# a+indexWord8ArrayAsStablePtr# ba off = indexStablePtrArray# ba (uncheckedIShiftRL# off OFFSHIFT_P#)+{-# INLINE indexWord8ArrayAsStablePtr# #-} indexWord8ArrayAsFloat# :: ByteArray# -> Int# -> Float# indexWord8ArrayAsFloat# ba off = indexFloatArray# ba (uncheckedIShiftRL# off OFFSHIFT_F#)
src/Numeric/Subroutine/Sort.hs view
@@ -1,10 +1,10 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-}-{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-}@@ -50,6 +50,7 @@ -> XFrame (sortBy compare df') | otherwise -> error "sort/DimXNat -- impossible pattern"+{-# ANN sort "HLint: ignore Use sort" #-} -- | Sort a @DataFrame@ along the first dimension using given comparison function. sortBy :: forall (t :: Type) n ns@@ -110,7 +111,7 @@ instance SortBy 3 where sortByInplace cmp xs = join $- go <$> (unsafeDupableInterleaveST (oneMoreDataFrame a))+ go <$> unsafeDupableInterleaveST (oneMoreDataFrame a) <*> cmp a b <*> cmp b c <*> cmp a c where a = subDataFrameView' (Idx 0 :* U) xs@@ -220,7 +221,9 @@ sortByInplace cmp (XSTFrame xs) | D :* _ <- dims `inSpaceOf` xs = sortByInplace (\x y -> cmp (castDataFrame x) (castDataFrame y)) xs+#if !MIN_VERSION_GLASGOW_HASKELL(9,0,0,0) | otherwise = error "sortByInplace: impossible pattern"+#endif -- | Swap contents of two DataFrames
test/Numeric/Arbitraries.hs view
@@ -7,7 +7,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs #-}-{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PartialTypeSignatures #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE QuasiQuotes #-}@@ -41,6 +40,9 @@ import qualified Numeric.Tuple.Lazy as LT import qualified Numeric.Tuple.Strict as ST +-- See dimensions:Numeric.Dimensions.Dim+#define IS_UNSOUND_MATCHING_810_900 (MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) && !MIN_VERSION_GLASGOW_HASKELL(9,1,0,0))+ -- | Maximum number of elements in SomeDims lists maxDims :: Word maxDims = 5@@ -514,6 +516,9 @@ case ds of (Dims :: Dims ds) -> case inferKnownBackend @ts @ds of Dict -> SomeDataFrame <$> arbitrary @(DataFrame ts ds)+#if IS_UNSOUND_MATCHING_810_900+ _ -> error "Numeric.Arbitraries.Arbitrary.arbitratry/ds: impossible pattern"+#endif shrink (SomeDataFrame df) = SomeDataFrame <$> shrink df @@ -534,6 +539,9 @@ case ds of XDims (Dims :: Dims ds) -> case inferKnownBackend @ts @ds of Dict -> XFrame <$> arbitrary @(DataFrame ts ds)+#if IS_UNSOUND_MATCHING_810_900+ _ -> error "Numeric.Arbitraries.Arbitrary.arbitratry/ds: impossible pattern"+#endif shrink (XFrame df) = XFrame <$> shrink df
test/Numeric/Matrix/BidiagonalTest.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-}@@ -99,9 +100,9 @@ v = bdV prop_bidiagonalSimple :: Property-prop_bidiagonalSimple = once . conjoin $ map prop_bidiagonal $ xs+prop_bidiagonalSimple = once . conjoin $ map prop_bidiagonal xs where- mkM :: Dims ([n,m]) -> [Double] -> DataFrame Double '[XN 1, XN 1]+ mkM :: Dims [n,m] -> [Double] -> DataFrame Double '[XN 1, XN 1] mkM ds | Just (XDims ds'@Dims) <- constrainDims ds :: Maybe (Dims '[XN 1, XN 1]) = XFrame . fromFlatList ds' 0@@ -133,7 +134,9 @@ | n@D :* m@D :* U <- dims `inSpaceOf` x , D <- minDim n m = validateBidiagonal x (bidiagonalHouseholder x)+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) prop_bidiagonal _ = property False+#endif
test/Numeric/Matrix/LUTest.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-}@@ -86,7 +87,9 @@ where mkM :: Dim (n :: Nat) -> [t] -> SomeSquareMatrix AnyMatrix t mkM (d@D :: Dim n) = SSM . fromFlatList (d :* d :* U) 0+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) mkM _ = error "manualMats: bad dims"+#endif variants :: Num a => [a] -> [[a]] variants as = rotateList as ++ rotateList (map negate as)
test/Numeric/Matrix/QRTest.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-}@@ -115,7 +116,7 @@ ] ] where- mkM :: Dims ([n,m]) -> [Double] -> DataFrame Double '[XN 1, XN 1]+ mkM :: Dims [n,m] -> [Double] -> DataFrame Double '[XN 1, XN 1] mkM ds | Just (XDims ds'@Dims) <- constrainDims ds :: Maybe (Dims '[XN 1, XN 1]) = XFrame . fromFlatList ds' 0@@ -131,7 +132,9 @@ | n@D :* m@D :* U <- dims `inSpaceOf` x , D <- minDim n m = validateLQ x (lq x)+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) prop_lq _ = property False+#endif prop_qrSimple :: Property prop_qrSimple = once . conjoin $ map prop_qr manualMats@@ -141,7 +144,9 @@ | n@D :* m@D :* U <- dims `inSpaceOf` x , D <- minDim n m = validateQR x (qr x)+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) prop_qr _ = property False+#endif testQRSolve :: forall t n m
test/Numeric/Matrix/SVDTest.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-}@@ -142,7 +143,7 @@ dfs :: [DataFrame Double '[XN 1, XN 1]] dfs = xs where- mkM :: Dims ([n,m]) -> [Double] -> DataFrame Double '[XN 1, XN 1]+ mkM :: Dims [n,m] -> [Double] -> DataFrame Double '[XN 1, XN 1] mkM ds | Just (XDims ds'@Dims) <- constrainDims ds :: Maybe (Dims '[XN 1, XN 1]) = XFrame . fromFlatList ds' 0@@ -173,7 +174,9 @@ prop_svd (XFrame x) | n@D :* m@D :* U <- dims `inSpaceOf` x , D <- minDim n m = validateSVD 1 x (svd x)+#if !MIN_VERSION_GLASGOW_HASKELL(8,10,0,0) prop_svd _ = error "prop_svd: impossible pattern"+#endif return []
test/Numeric/PrimBytesTest.hs view
@@ -1,3 +1,4 @@+{-# OPTIONS_GHC -Wno-orphans #-} {-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DefaultSignatures #-}@@ -22,6 +23,7 @@ import Data.Int import Data.Type.Lits import Data.Word+import Foreign.C.Types import Foreign.Marshal import Foreign.Ptr import Foreign.Storable@@ -107,6 +109,9 @@ peek = bPeek poke = bPoke +instance Arbitrary CBool where+ arbitrary = CBool <$> arbitrary+ instance Arbitrary (Ptr Dummy) where arbitrary = intPtrToPtr . IntPtr <$> arbitrary @@ -300,13 +305,13 @@ , off <- byteOffset v = conjoin [ counterexample "pos" $ pos v === fromBytes- (off +# byteFieldOffset (proxy# @Symbol @"pos") v) ba+ (off +# byteFieldOffset (proxy# :: Proxy# "pos") v) ba , counterexample "norm" $ norm v === fromBytes- (off +# byteFieldOffset (proxy# @Symbol @"norm") v) ba+ (off +# byteFieldOffset (proxy# :: Proxy# "norm") v) ba , counterexample "tex" $ tex v === fromBytes- (off +# byteFieldOffset (proxy# @Symbol @"tex") v) ba+ (off +# byteFieldOffset (proxy# :: Proxy# "tex") v) ba , counterexample "extraFloats" $ extraFloats v === fromBytes- (off +# byteFieldOffset (proxy# @Symbol @"extraFloats") v) ba+ (off +# byteFieldOffset (proxy# :: Proxy# "extraFloats") v) ba ] @@ -316,6 +321,12 @@ '[ Word8, Word16, Word32, Word64, Word , Int8, Int16, Int32, Int64, Int , Char, Double, Float+ , CChar, CSChar, CUChar, CShort, CUShort+ , CInt, CUInt, CLong, CULong+ , CPtrdiff, CSize, CWchar, CSigAtomic+ , CLLong, CULLong, CBool, CIntPtr, CUIntPtr+ , CIntMax, CUIntMax, CClock, CTime+ , CUSeconds, CSUSeconds, CFloat, CDouble , Vertex Double Float Char , Vertex Word8 Double Int16 , Vertex Word16 Word32 Word64@@ -343,34 +354,74 @@ , '(Word16, Word32, Word64) , '(Int64, Int8, Int32) , '(Float, Char, Char)+ , '(CChar, CInt, CPtrdiff)+ , '(CSChar, CUInt, CSize)+ , '(CUChar, CLong, CWchar)+ , '(CShort, CULong, CSigAtomic)+ , '(CUShort, CLLong, CIntMax)+ , '(CULLong, CUIntMax, CUSeconds)+ , '(CBool, CClock, CSUSeconds)+ , '(CIntPtr, CTime, CFloat)+ , '(CUIntPtr, CDouble, CDouble) ] -instance SamePrimRep a (ST.Tuple '[a]) where- convert a = a ST.:$ U-instance SamePrimRep (a,b) (ST.Tuple '[a,b]) where- convert (a, b) = a ST.:$ b ST.:$ U-instance SamePrimRep (a,b,c) (ST.Tuple '[a,b,c]) where- convert (a, b, c) = a ST.:$ b ST.:$ c ST.:$ U-instance SamePrimRep (a,b,c,d) (ST.Tuple '[a,b,c,d]) where- convert (a, b, c, d) = a ST.:$ b ST.:$ c ST.:$ d ST.:$ U-instance SamePrimRep (a,b,c,d,e) (ST.Tuple '[a,b,c,d,e]) where- convert (a, b, c, d, e) = a ST.:$ b ST.:$ c ST.:$ d ST.:$ e ST.:$ U+instance SamePrimRep a a where+ convert = id -instance SamePrimRep a (LT.Tuple '[a]) where- convert a = a LT.:$ U-instance SamePrimRep (a,b) (LT.Tuple '[a,b]) where- convert (a, b) = a LT.:$ b LT.:$ U-instance SamePrimRep (a,b,c) (LT.Tuple '[a,b,c]) where- convert (a, b, c) = a LT.:$ b LT.:$ c LT.:$ U-instance SamePrimRep (a,b,c,d) (LT.Tuple '[a,b,c,d]) where- convert (a, b, c, d) = a LT.:$ b LT.:$ c LT.:$ d LT.:$ U-instance SamePrimRep (a,b,c,d,e) (LT.Tuple '[a,b,c,d,e]) where- convert (a, b, c, d, e) = a LT.:$ b LT.:$ c LT.:$ d LT.:$ e LT.:$ U+instance SamePrimRep a a' => SamePrimRep a (ST.Tuple '[a']) where+ convert a = convert a ST.:$ U+instance (SamePrimRep a a', SamePrimRep b b') => SamePrimRep (a,b) (ST.Tuple '[a',b']) where+ convert (a, b) = convert a ST.:$ convert b ST.:$ U+instance (SamePrimRep a a', SamePrimRep b b', SamePrimRep c c') => SamePrimRep (a,b,c) (ST.Tuple '[a',b',c']) where+ convert (a, b, c) = convert a ST.:$ convert b ST.:$ convert c ST.:$ U+instance (SamePrimRep a a', SamePrimRep b b', SamePrimRep c c', SamePrimRep d d') => SamePrimRep (a,b,c,d) (ST.Tuple '[a',b',c',d']) where+ convert (a, b, c, d) = convert a ST.:$ convert b ST.:$ convert c ST.:$ convert d ST.:$ U+instance (SamePrimRep a a', SamePrimRep b b', SamePrimRep c c', SamePrimRep d d', SamePrimRep e e') => SamePrimRep (a,b,c,d,e) (ST.Tuple '[a',b',c',d',e']) where+ convert (a, b, c, d, e) = convert a ST.:$ convert b ST.:$ convert c ST.:$ convert d ST.:$ convert e ST.:$ U +instance SamePrimRep a a' => SamePrimRep a (LT.Tuple '[a']) where+ convert a = convert a LT.:$ U+instance (SamePrimRep a a', SamePrimRep b b') => SamePrimRep (a,b) (LT.Tuple '[a',b']) where+ convert (a, b) = convert a LT.:$ convert b LT.:$ U+instance (SamePrimRep a a', SamePrimRep b b', SamePrimRep c c') => SamePrimRep (a,b,c) (LT.Tuple '[a',b',c']) where+ convert (a, b, c) = convert a LT.:$ convert b LT.:$ convert c LT.:$ U+instance (SamePrimRep a a', SamePrimRep b b', SamePrimRep c c', SamePrimRep d d') => SamePrimRep (a,b,c,d) (LT.Tuple '[a',b',c',d']) where+ convert (a, b, c, d) = convert a LT.:$ convert b LT.:$ convert c LT.:$ convert d LT.:$ U+instance (SamePrimRep a a', SamePrimRep b b', SamePrimRep c c', SamePrimRep d d', SamePrimRep e e') => SamePrimRep (a,b,c,d,e) (LT.Tuple '[a',b',c',d',e']) where+ convert (a, b, c, d, e) = convert a LT.:$ convert b LT.:$ convert c LT.:$ convert d LT.:$ convert e LT.:$ U+ instance SamePrimRep (Maybe a) (Either () a) where convert (Just a) = Right a convert Nothing = Left () +instance SamePrimRep CChar Int8 where convert (CChar v) = v+instance SamePrimRep CSChar Int8 where convert (CSChar v) = v+instance SamePrimRep CSChar CChar where convert (CSChar v) = CChar v+instance SamePrimRep CUChar Word8 where convert (CUChar v) = v+instance SamePrimRep CShort Int16 where convert (CShort v) = v+instance SamePrimRep CUShort Word16 where convert (CUShort v) = v+instance SamePrimRep CInt Int32 where convert (CInt v) = v+instance SamePrimRep CUInt Word32 where convert (CUInt v) = v+instance SamePrimRep CLong Int64 where convert (CLong v) = v+instance SamePrimRep CULong Word64 where convert (CULong v) = v+instance SamePrimRep CPtrdiff Int64 where convert (CPtrdiff v) = v+instance SamePrimRep CSize Word64 where convert (CSize v) = v+instance SamePrimRep CWchar Int32 where convert (CWchar v) = v+instance SamePrimRep CSigAtomic Int32 where convert (CSigAtomic v) = v+instance SamePrimRep CLLong Int64 where convert (CLLong v) = v+instance SamePrimRep CULLong Word64 where convert (CULLong v) = v+instance SamePrimRep CBool Word8 where convert (CBool v) = v+instance SamePrimRep CIntPtr Int64 where convert (CIntPtr v) = v+instance SamePrimRep CUIntPtr Word64 where convert (CUIntPtr v) = v+instance SamePrimRep CIntMax Int64 where convert (CIntMax v) = v+instance SamePrimRep CUIntMax Word64 where convert (CUIntMax v) = v+instance SamePrimRep CClock Int64 where convert (CClock v) = v+instance SamePrimRep CTime Int64 where convert (CTime v) = v+instance SamePrimRep CUSeconds Word32 where convert (CUSeconds v) = v+instance SamePrimRep CSUSeconds Int64 where convert (CSUSeconds v) = v+instance SamePrimRep CFloat Float where convert (CFloat v) = v+instance SamePrimRep CDouble Double where convert (CDouble v) = v+ type SamePrimRepTypes = '[ '( (Word, Double), ST.Tuple '[Word, Double] ) , '( (Double, Word8, Word8, Word8, Maybe Float)@@ -379,6 +430,13 @@ , LT.Tuple '[Word8, Int16, Word32, Either (Either Double Float) Int] ) , '( Maybe Float, Either () Float) , '( Maybe Double, Either () Double)+ , '( (CChar, CSChar, CSChar, CUChar), ST.Tuple '[Int8, Int8, CChar, Word8] )+ , '( (CShort, CUShort, CInt, CUInt), LT.Tuple '[Int16, Word16, Int32, Word32] )+ , '( (CLong, CULong, CPtrdiff, CSize), ST.Tuple '[Int64, Word64, Int64, Word64] )+ , '( (CWchar, CSigAtomic, CLLong, CULLong), LT.Tuple '[Int32, Int32, Int64, Word64] )+ , '( (CBool, CIntPtr, CUIntPtr, CIntMax, CUIntMax), ST.Tuple '[Word8, Int64, Word64, Int64, Word64] )+ , '( (CClock, CTime, CUSeconds, CSUSeconds), LT.Tuple '[Int64, Int64, Word32, Int64] )+ , '( (CFloat, CDouble), ST.Tuple '[Float, Double] ) ] return [] -- this is for $testWithTypes
test/Spec/Util.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} @@ -29,7 +30,9 @@ where mkProp :: [Type] -> Exp -> ExpQ mkProp ts ex- = let qe = pure ex :: ExpQ+ = let qe :: ExpQ+ qe = pure ex+ qs :: ExpQ qs = litE . stringL $ unlines ["Tested with types:", pprint ts] in [e| property ( counterexample $qs $qe ) |] @@ -87,6 +90,7 @@ funTypes :: [TypeQ] funTypes = (\ns -> fmap (subtTyVars (map ConT ns)) ) <$> tyNames <*> [infoType <$> reify fName]+ mkDecl :: Q Name -> Q Type -> Q Exp -> DecsQ mkDecl qn qt qe = do n <- qn sequence@@ -124,10 +128,17 @@ substTyVar x y (ForallT vs ctx t) = ForallT (remVar vs) (ctx >>= substOrRemove) (substTyVar x y t) where+#if __GLASGOW_HASKELL__ >= 900+ thisVar :: TyVarBndr a -> Bool+ thisVar (PlainTV n _) = n == x+ thisVar (KindedTV n _ _) = n == x+ remVar :: [TyVarBndr a] -> [TyVarBndr a]+#else thisVar :: TyVarBndr -> Bool thisVar (PlainTV n) = n == x thisVar (KindedTV n _) = n == x remVar :: [TyVarBndr] -> [TyVarBndr]+#endif remVar = filter (not . thisVar) substOrRemove p = let p' = substTyVar x y p@@ -141,8 +152,13 @@ substTyVar _ _ t = t findFirstTyVar :: Type -> Maybe Name+#if __GLASGOW_HASKELL__ >= 900+findFirstTyVar (ForallT (PlainTV n _:_) _ _) = Just n+findFirstTyVar (ForallT (KindedTV n _ _:_) _ _) = Just n+#else findFirstTyVar (ForallT (PlainTV n:_) _ _) = Just n findFirstTyVar (ForallT (KindedTV n _:_) _ _) = Just n+#endif findFirstTyVar (ForallT [] ctx t) = getFirst (foldMap (First . findFirstTyVar) ctx) <|> findFirstTyVar t findFirstTyVar (AppT t1 t2) = findFirstTyVar t1 <|> findFirstTyVar t2