yarr 1.3.3.3 → 1.4.0.2
raw patch · 22 files changed
Files
- Data/Yarr/Base.hs +6/−0
- Data/Yarr/Eval.hs +7/−0
- Data/Yarr/Flow.hs +2/−1
- Data/Yarr/Fusion.hs +7/−0
- Data/Yarr/Repr/Delayed.hs +5/−0
- Data/Yarr/Repr/Foreign.hs +13/−6
- Data/Yarr/Repr/Separate.hs +6/−0
- Data/Yarr/Shape.hs +12/−1
- Data/Yarr/Utils/FixedVector.hs +5/−23
- Data/Yarr/Utils/FixedVector/InlinableArity.hs +2/−0
- Data/Yarr/Utils/FixedVector/VecTuple.hs +11/−1
- Data/Yarr/Utils/FixedVector/VecTupleInstances.hs +5/−4
- Data/Yarr/Utils/Fork.hs +2/−0
- Data/Yarr/Utils/LowLevelFlow.hs +5/−0
- Data/Yarr/Utils/Parallel.hs +1/−0
- Data/Yarr/Utils/Primitive.hs +4/−0
- Data/Yarr/Utils/Split.hs +1/−0
- Data/Yarr/Utils/Storable.hs +0/−26
- Data/Yarr/Walk/Internal.hs +3/−0
- Debug/Yarr.hs +6/−0
- changelog.md +9/−0
- yarr.cabal +7/−20
Data/Yarr/Base.hs view
@@ -1,3 +1,9 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-} -- | Core type system module Data.Yarr.Base (
Data/Yarr/Eval.hs view
@@ -1,3 +1,10 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE UndecidableInstances #-} -- | 'Load'ing and computing arrays module Data.Yarr.Eval (
Data/Yarr/Flow.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE FlexibleContexts #-} -- | Dataflow (fusion operations) module Data.Yarr.Flow (@@ -13,7 +14,7 @@ dzipElems, dzipElemsM, -- * High level shortcuts- traverse, zipElems, mapElems, mapElemsM,+ Data.Yarr.Flow.traverse, zipElems, mapElems, mapElemsM, -- ** Cartesian products cartProduct2, icartProduct2, icartProduct2M,
Data/Yarr/Fusion.hs view
@@ -1,3 +1,10 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE UndecidableInstances #-}+ -- | Fusion type system. Use re-exported in "Data.Yarr.Flow" functions. module Data.Yarr.Fusion where
Data/Yarr/Repr/Delayed.hs view
@@ -1,3 +1,8 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverlappingInstances #-} module Data.Yarr.Repr.Delayed ( -- * Delayed source
Data/Yarr/Repr/Foreign.hs view
@@ -1,3 +1,10 @@+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE TypeFamilies #-} module Data.Yarr.Repr.Foreign ( F, FS,@@ -17,7 +24,7 @@ import Foreign import Foreign.ForeignPtr import Foreign.Marshal.Alloc-import Foreign.Marshal.MissingAlloc+import Foreign.Marshal.MissingAlloc as FMMA import Data.Yarr.Base as B import Data.Yarr.Fusion@@ -25,7 +32,6 @@ import Data.Yarr.Repr.Separate import Data.Yarr.Shape -import Data.Yarr.Utils.Storable import Data.Yarr.Utils.FixedVector as V -- | Foreign representation is the heart of Yarr framework.@@ -126,7 +132,7 @@ instance Shape sh => DefaultIFusion FS L D SH sh -instance (Shape sh, Vector v e, Storable e) => VecRegular F FS L sh v e where+instance (Shape sh, Vector v e, Storable e, Storable (v e)) => VecRegular F FS L sh v e where slices (ForeignArray sh fptr ptr) = let esize = sizeOf (undefined :: e) vsize = sizeOf (undefined :: (v e))@@ -136,7 +142,7 @@ ForeignSlice sh vsize feptr (eptr `plusPtr` (i * esize)) {-# INLINE slices #-} -instance (Shape sh, Vector v e, Storable e) => UVecSource F FS L sh v e+instance (Shape sh, Vector v e, Storable e, Storable (v e)) => UVecSource F FS L sh v e instance (Shape sh, Vector v e, Storable e) => UVecSource (SE F) F L sh v e @@ -164,7 +170,7 @@ newEmpty :: (Shape sh, Storable a, Integral a) => sh -> IO (UArray F L sh a) {-# INLINE newEmpty #-} newEmpty sh = do- arr <- internalNew callocBytes sh+ arr <- internalNew FMMA.callocBytes sh arr `deepseq` return () return arr @@ -184,7 +190,8 @@ pokeByteOff ptr (i * vsize) x {-# INLINE linearWrite #-} -instance (Shape sh, Vector v e, Storable e) => UVecTarget F FS L sh v e+instance (Shape sh, Vector v e, Storable e, Storable (v e)) =>+ UVecTarget F FS L sh v e -- | /O(1)/ Returns pointer to memory block used by the given foreign -- array.
Data/Yarr/Repr/Separate.hs view
@@ -1,3 +1,9 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE UndecidableInstances #-} module Data.Yarr.Repr.Separate ( -- * @Separate@ representation
Data/Yarr/Shape.hs view
@@ -1,4 +1,15 @@-{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE BangPatterns #-} module Data.Yarr.Shape ( -- * Flow types hierarchy
Data/Yarr/Utils/FixedVector.hs view
@@ -5,13 +5,17 @@ {-# OPTIONS_GHC -fno-warn-missing-methods #-} {-# OPTIONS_GHC -fno-warn-orphans #-} +{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE FlexibleContexts #-}+ module Data.Yarr.Utils.FixedVector ( -- * Fixed Vector module Data.Vector.Fixed, arity, -- * Missed utility- zipWith3, zipWithM_, apply, zero,+ apply, zero, iifoldl, iifoldM, -- * Aliases and shortcuts@@ -37,8 +41,6 @@ foldl, zipWith, zipWith3, all, any, sequence_, replicate) -import Control.DeepSeq- import Data.Vector.Fixed import Data.Vector.Fixed.Cont ( accum, arity ) @@ -65,26 +67,6 @@ vl_4 :: a -> a -> a -> a -> VecList N4 a {-# INLINE vl_4 #-} vl_4 a b c d = a `Cons` (b `Cons` (c `Cons` (d `Cons` Nil)))---instance (Arity n, NFData e) => NFData (VecList n e) where- rnf = Data.Vector.Fixed.foldl (\r e -> r `seq` rnf e) ()- {-# INLINE rnf #-}-- -zipWith3- :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v (b, c))- => (a -> b -> c -> d)- -> v a -> v b -> v c- -> v d-{-# INLINE zipWith3 #-}-zipWith3 f v1 v2 v3 = zipWith (\a (b, c) -> f a b c) v1 (zipWith (,) v2 v3)--zipWithM_- :: (Vector v a, Vector v b, Vector v c, Monad m, Vector v (m c))- => (a -> b -> m c) -> v a -> v b -> m ()-{-# INLINE zipWithM_ #-}-zipWithM_ f xs ys = sequence_ (zipWith f xs ys) apply :: (Vector v a, Vector v (a -> b), Vector v b)
Data/Yarr/Utils/FixedVector/InlinableArity.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-} module Data.Yarr.Utils.FixedVector.InlinableArity where
Data/Yarr/Utils/FixedVector/VecTuple.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-} module Data.Yarr.Utils.FixedVector.VecTuple ( VecTuple(..), makeVecTupleInstance@@ -15,6 +17,14 @@ inline = pragInlD name Inline ConLike AllPhases in [fd, inline] +#if MIN_VERSION_template_haskell(2,11,0)+newtypeInstD' ctxt tc tys con derivs =+ let kindSig = Nothing+ in newtypeInstD ctxt tc tys kindSig con (cxt derivs)+#else+newtypeInstD' = newtypeInstD+#endif+ makeVecTupleInstance arityType a = do let n = arity a@@ -28,7 +38,7 @@ tupleType = foldl appT (tupleT n) $ replicate n e familyInst <-- newtypeInstD+ newtypeInstD' (cxt []) ''VecTuple [arityType, e]
Data/Yarr/Utils/FixedVector/VecTupleInstances.hs view
@@ -1,8 +1,9 @@--{-# LANGUAGE CPP #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-} module Data.Yarr.Utils.FixedVector.VecTupleInstances where
Data/Yarr/Utils/Fork.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE TypeFamilies #-} module Data.Yarr.Utils.Fork where
Data/Yarr/Utils/LowLevelFlow.hs view
@@ -1,3 +1,8 @@+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE BangPatterns #-} module Data.Yarr.Utils.LowLevelFlow where
Data/Yarr/Utils/Parallel.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} module Data.Yarr.Utils.Parallel where
Data/Yarr/Utils/Primitive.hs view
@@ -1,3 +1,7 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE MagicHash, UnboxedTuples #-}+{-# LANGUAGE CPP #-} module Data.Yarr.Utils.Primitive where
Data/Yarr/Utils/Split.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} module Data.Yarr.Utils.Split where
− Data/Yarr/Utils/Storable.hs
@@ -1,26 +0,0 @@--module Data.Yarr.Utils.Storable where--import Foreign-import Data.Yarr.Utils.FixedVector as V--instance (Storable e, Vector v e) => Storable (v e) where- sizeOf _ =- let esize = sizeOf (undefined :: e)- n = arity (undefined :: (Dim v))- in n * esize-- alignment _ = alignment (undefined :: e)-- peek ptr =- let eptr = castPtr ptr- in V.generateM (\i -> peekElemOff eptr i)-- poke ptr v =- let eptr = castPtr ptr- in imapM_ (\i e -> pokeElemOff eptr i e) v-- {-# INLINE sizeOf #-}- {-# INLINE alignment #-}- {-# INLINE peek #-}- {-# INLINE poke #-}
Data/Yarr/Walk/Internal.hs view
@@ -1,3 +1,6 @@+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-} module Data.Yarr.Walk.Internal where
Debug/Yarr.hs view
@@ -1,3 +1,9 @@+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE UndecidableInstances #-} module Debug.Yarr ( -- * @Checked@ meta repr
changelog.md view
@@ -1,4 +1,13 @@+* Changes in version 0.9.2:+ * Safe folds -- see "Data.Yarr.Walk"+ * Issue with slice-wise loading with unrolled filling function solved+* Changes in 1.3 (ex. 0.9.3):+ * IFusion -- mapping/zipping with index+ * Rename: Work -> Walk * Changes in 1.3.3.1: This now compiles with ghc 7.8.3 but probably won't compile with earlier versions of ghc. Let me know if this is a requirement and I will see what I can do. Even better submit a pull request.+* Changes in 1.4.0.0: This works (and will only work) with the+ breaking change release of fixed-vector 0.8.0.0.+* Changes in 1.4.0.2: Build with GHC 7.10 and 8.0.
yarr.cabal view
@@ -1,5 +1,5 @@ Name: yarr-Version: 1.3.3.3+Version: 1.4.0.2 Synopsis: Yet another array library Description: Yarr is a new blazing fast dataflow framework (array library),@@ -20,18 +20,6 @@ . Shortcoming by design: lack of pure indexing interface. .- /Changes in 1.3 (ex. 0.9.3):/- .- * IFusion -- mapping/zipping with index- .- * Rename: Work -> Walk- .- /Changes in version 0.9.2:/- .- * Safe folds -- see "Data.Yarr.Walk"- .- * Issue with slice-wise loading with unrolled filling function solved- . To start with, read documentation in the root module: "Data.Yarr". . [@Yarr!@] @@ -56,12 +44,12 @@ Library build-depends:- base >=4.6 && <4.8,- ghc-prim == 0.3.*,- deepseq == 1.3.*,- fixed-vector >= 0.7 && < 0.8,- primitive >= 0.2 && < 0.6,- template-haskell >= 2.8 && < 2.10,+ base >= 4.6 && < 4.10,+ ghc-prim >= 0.3 && < 0.6,+ deepseq >= 1.3 && < 1.5,+ fixed-vector >= 0.8 && < 0.9,+ primitive >= 0.6 && < 0.7,+ template-haskell >= 2.8 && < 2.12, missing-foreign == 0.1.1 extensions:@@ -113,5 +101,4 @@ Data.Yarr.WorkTypes Data.Yarr.Walk.Internal- Data.Yarr.Utils.Storable Data.Yarr.Utils.LowLevelFlow