comfort-array 0.5.1 → 0.5.1.1
raw patch · 6 files changed
+96/−76 lines, 6 filesdep ~transformersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: transformers
API changes (from Hackage documentation)
Files
- comfort-array.cabal +5/−3
- src/Data/Array/Comfort/Shape.hs +7/−0
- src/Data/Array/Comfort/Storable.hs +4/−0
- src/Data/Array/Comfort/Storable/Unchecked.hs +1/−1
- test/DocTest/Data/Array/Comfort/Shape.hs +57/−57
- test/DocTest/Data/Array/Comfort/Storable.hs +22/−15
comfort-array.cabal view
@@ -1,5 +1,5 @@ Name: comfort-array-Version: 0.5.1+Version: 0.5.1.1 License: BSD3 License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -75,6 +75,8 @@ . * Fast Fourier Transforms using the package @comfort-fftw@ .+ * Fast Linear Programming using the package @comfort-glpk@+ . * Efficient Array Processing via LLVM Just-In-Time code generation using the package @knead@. .@@ -90,7 +92,7 @@ test-module.list Source-Repository this- Tag: 0.5.1+ Tag: 0.5.1.1 Type: darcs Location: https://hub.darcs.net/thielema/comfort-array/ @@ -113,7 +115,7 @@ QuickCheck >=2 && <3, semigroups >=0.18.3 && <1.0, containers >=0.4 && <0.7,- transformers >=0.3 && <0.6,+ transformers >=0.3 && <0.7, non-empty >=0.3.2 && <0.4, utility-ht >=0.0.10 && <0.1, prelude-compat >=0.0 && <0.1,
src/Data/Array/Comfort/Shape.hs view
@@ -540,6 +540,13 @@ You can use an arbitrary 'Set' of indices as shape. The array elements are ordered according to the index order in the 'Set'. +An @Array (Set k) a@ is isomorphic to a @Map k a@,+however it is missing most 'Map' operations like @insert@, @delete@ and @union@.+An @Array (Set k, Set j) a@ has a cartesian structure+and thus is not isomorphic to @Map (k,j) a@.+This means, if the array has two elements with indices @(k0,j0)@ and @(k1,j1)@+it has also an element with index @(k0,j1)@.+ Disadvantage is that combinators of different Set indexed arrays have to compare whole sets. However, the Set implementation may have low-level optimizations
src/Data/Array/Comfort/Storable.hs view
@@ -140,6 +140,10 @@ mapShape f arr = reshape (f $ shape arr) arr +{- |+>>> Array.fromList (Shape.ZeroBased (5::Int)) ['a'..]+StorableArray.fromList (ZeroBased {zeroBasedSize = 5}) "abcde"+-} fromList :: (Shape.C sh, Storable a) => sh -> [a] -> Array sh a fromList sh arr = runST (MutArrayNC.unsafeFreeze =<< MutArray.fromList sh arr)
src/Data/Array/Comfort/Storable/Unchecked.hs view
@@ -123,7 +123,7 @@ withForeignPtr a $ \srcAPtr -> withForeignPtr b $ \srcBPtr -> sequence_ $ List.take (Shape.size sh) $- zipWith3+ List.zipWith3 (\srcA srcB dst -> poke dst =<< liftA2 f (peek srcA) (peek srcB)) (iterate (flip advancePtr 1) srcAPtr) (iterate (flip advancePtr 1) srcBPtr)
test/DocTest/Data/Array/Comfort/Shape.hs view
@@ -56,22 +56,22 @@ {-# LINE 491 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices (Shape.Enumeration :: Shape.Enumeration Ordering)) [ExpectedLine [LineChunk "[LT,EQ,GT]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:548: "-{-# LINE 548 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:555: "+{-# LINE 555 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 548 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 555 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices (Set.fromList "comfort")) [ExpectedLine [LineChunk "\"cfmort\""]]- DocTest.printPrefix "Data.Array.Comfort.Shape:584: "-{-# LINE 584 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:591: "+{-# LINE 591 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 584 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 591 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ fmap Shape.ZeroBased $ Map.fromList [('b', (0::Int)), ('a', 5), ('c', 2)]) [ExpectedLine [LineChunk "[('a',0),('a',1),('a',2),('a',3),('a',4),('c',0),('c',1)]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:649: "-{-# LINE 649 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:656: "+{-# LINE 656 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 649 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 656 "src/Data/Array/Comfort/Shape.hs" #-} ( let sh2 = (Shape.ZeroBased (2::Int), Shape.ZeroBased (2::Int)) in let sh3 = (Shape.ZeroBased (3::Int), Shape.ZeroBased (3::Int)) in@@ -80,98 +80,98 @@ Shape.indexFromOffset (Shape.Deferred sh2) 3) ) [ExpectedLine [LineChunk "(4,3)"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:749: "-{-# LINE 749 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:756: "+{-# LINE 756 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 749 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 756 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices (Shape.ZeroBased (3::Int), Shape.ZeroBased (3::Int))) [ExpectedLine [LineChunk "[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:849: "-{-# LINE 849 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:856: "+{-# LINE 856 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 849 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 856 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.Square $ Shape.ZeroBased (3::Int)) [ExpectedLine [LineChunk "[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:892: "-{-# LINE 892 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:899: "+{-# LINE 899 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 892 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 899 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.Cube $ Shape.ZeroBased (2::Int)) [ExpectedLine [LineChunk "[(0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:951: "-{-# LINE 951 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:958: "+{-# LINE 958 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 951 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 958 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.Triangular Shape.Upper $ Shape.ZeroBased (3::Int)) [ExpectedLine [LineChunk "[(0,0),(0,1),(0,2),(1,1),(1,2),(2,2)]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:953: "-{-# LINE 953 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:960: "+{-# LINE 960 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 953 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 960 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.Triangular Shape.Lower $ Shape.ZeroBased (3::Int)) [ExpectedLine [LineChunk "[(0,0),(1,0),(1,1),(2,0),(2,1),(2,2)]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1085: "-{-# LINE 1085 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1092: "+{-# LINE 1092 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1085 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1092 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexAscending (replicate 3 Shape.AllDistinct) $ Shape.ZeroBased (4::Int)) [ExpectedLine [LineChunk "[[0,1,2],[0,1,3],[0,2,3],[1,2,3]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1087: "-{-# LINE 1087 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1094: "+{-# LINE 1094 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1087 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1094 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexAscending (replicate 3 Shape.SomeRepetitive) $ Shape.ZeroBased (3::Int)) [ExpectedLine [LineChunk "[[0,0,0],[0,0,1],[0,0,2],[0,1,1],[0,1,2],[0,2,2],[1,1,1],[1,1,2],[1,2,2],[2,2,2]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1089: "-{-# LINE 1089 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1096: "+{-# LINE 1096 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1089 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1096 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexAscending [Shape.Repetitive,Shape.Distinct,Shape.Repetitive] $ Shape.ZeroBased (4::Int)) [ExpectedLine [LineChunk "[[0,0,1],[0,0,2],[0,0,3],[0,1,2],[0,1,3],[0,2,3],[1,1,2],[1,1,3],[1,2,3],[2,2,3]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1091: "-{-# LINE 1091 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1098: "+{-# LINE 1098 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1091 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1098 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexAscending [Shape.Repetitive,Shape.Distinct,Shape.Distinct] $ Shape.ZeroBased (4::Int)) [ExpectedLine [LineChunk "[[0,0,1],[0,0,2],[0,0,3],[0,1,2],[0,1,3],[0,2,3],[1,1,2],[1,1,3],[1,2,3],[2,2,3]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1094: "-{-# LINE 1094 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1101: "+{-# LINE 1101 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1094 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1101 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexDescending (replicate 3 Shape.AllDistinct) $ Shape.ZeroBased (4::Int)) [ExpectedLine [LineChunk "[[2,1,0],[3,1,0],[3,2,0],[3,2,1]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1096: "-{-# LINE 1096 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1103: "+{-# LINE 1103 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1096 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1103 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexDescending (replicate 3 Shape.SomeRepetitive) $ Shape.ZeroBased (3::Int)) [ExpectedLine [LineChunk "[[0,0,0],[1,0,0],[1,1,0],[1,1,1],[2,0,0],[2,1,0],[2,1,1],[2,2,0],[2,2,1],[2,2,2]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1098: "-{-# LINE 1098 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1105: "+{-# LINE 1105 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1098 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1105 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexDescending [Shape.Repetitive,Shape.Distinct,Shape.Repetitive] $ Shape.ZeroBased (4::Int)) [ExpectedLine [LineChunk "[[1,1,0],[2,1,0],[2,2,0],[2,2,1],[3,1,0],[3,2,0],[3,2,1],[3,3,0],[3,3,1],[3,3,2]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1100: "-{-# LINE 1100 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1107: "+{-# LINE 1107 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1100 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1107 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices $ Shape.simplexDescending [Shape.Repetitive,Shape.Distinct,Shape.Distinct] $ Shape.ZeroBased (4::Int)) [ExpectedLine [LineChunk "[[1,1,0],[2,1,0],[2,2,0],[2,2,1],[3,1,0],[3,2,0],[3,2,1],[3,3,0],[3,3,1],[3,3,2]]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1334: "-{-# LINE 1334 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1341: "+{-# LINE 1341 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.property-{-# LINE 1334 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1341 "src/Data/Array/Comfort/Shape.hs" #-} (let shape = Shape.Cyclic (10::Int) in Shape.offset shape (-1) == Shape.offset shape 9)- DocTest.printPrefix "Data.Array.Comfort.Shape:1339: "-{-# LINE 1339 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1346: "+{-# LINE 1346 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1339 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1346 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices (Shape.Cyclic (7::Int))) [ExpectedLine [LineChunk "[0,1,2,3,4,5,6]"]]- DocTest.printPrefix "Data.Array.Comfort.Shape:1383: "-{-# LINE 1383 "src/Data/Array/Comfort/Shape.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Shape:1390: "+{-# LINE 1390 "src/Data/Array/Comfort/Shape.hs" #-} DocTest.example-{-# LINE 1383 "src/Data/Array/Comfort/Shape.hs" #-}+{-# LINE 1390 "src/Data/Array/Comfort/Shape.hs" #-} (Shape.indices (Shape.ZeroBased (3::Int) ::+ Shape.Range 'a' 'c')) [ExpectedLine [LineChunk "[Left 0,Left 1,Left 2,Right 'a',Right 'b',Right 'c']"]]
test/DocTest/Data/Array/Comfort/Storable.hs view
@@ -3,6 +3,7 @@ module DocTest.Data.Array.Comfort.Storable where +import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest {-# LINE 84 "src/Data/Array/Comfort/Storable.hs" #-}@@ -54,28 +55,34 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Data.Array.Comfort.Storable:243: "-{-# LINE 243 "src/Data/Array/Comfort/Storable.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Storable:144: "+{-# LINE 144 "src/Data/Array/Comfort/Storable.hs" #-}+ DocTest.example+{-# LINE 144 "src/Data/Array/Comfort/Storable.hs" #-}+ (Array.fromList (Shape.ZeroBased (5::Int)) ['a'..])+ [ExpectedLine [LineChunk "StorableArray.fromList (ZeroBased {zeroBasedSize = 5}) \"abcde\""]]+ DocTest.printPrefix "Data.Array.Comfort.Storable:247: "+{-# LINE 247 "src/Data/Array/Comfort/Storable.hs" #-} DocTest.property-{-# LINE 243 "src/Data/Array/Comfort/Storable.hs" #-}+{-# LINE 247 "src/Data/Array/Comfort/Storable.hs" #-} (QC.forAll genNonEmptyArray2 $ \xs -> QC.forAll (QC.elements $ Shape.indices $ Array.shape xs) $ \(ix0,ix1) -> Array.pick xs ix0 ! ix1 == xs!(ix0,ix1))- DocTest.printPrefix "Data.Array.Comfort.Storable:261: "-{-# LINE 261 "src/Data/Array/Comfort/Storable.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Storable:265: "+{-# LINE 265 "src/Data/Array/Comfort/Storable.hs" #-} DocTest.property-{-# LINE 261 "src/Data/Array/Comfort/Storable.hs" #-}+{-# LINE 265 "src/Data/Array/Comfort/Storable.hs" #-} (QC.forAll genArray2 $ \xs -> xs == Array.fromRowArray (snd $ Array.shape xs) (Array.toRowArray xs))- DocTest.printPrefix "Data.Array.Comfort.Storable:278: "-{-# LINE 278 "src/Data/Array/Comfort/Storable.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Storable:282: "+{-# LINE 282 "src/Data/Array/Comfort/Storable.hs" #-} DocTest.property-{-# LINE 278 "src/Data/Array/Comfort/Storable.hs" #-}+{-# LINE 282 "src/Data/Array/Comfort/Storable.hs" #-} (forAllNonEmpty $ \xs -> Array.minimum xs ==? minimum (Array.toList xs))- DocTest.printPrefix "Data.Array.Comfort.Storable:286: "-{-# LINE 286 "src/Data/Array/Comfort/Storable.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Storable:290: "+{-# LINE 290 "src/Data/Array/Comfort/Storable.hs" #-} DocTest.property-{-# LINE 286 "src/Data/Array/Comfort/Storable.hs" #-}+{-# LINE 290 "src/Data/Array/Comfort/Storable.hs" #-} (forAllNonEmpty $ \xs -> Array.maximum xs ==? maximum (Array.toList xs))- DocTest.printPrefix "Data.Array.Comfort.Storable:298: "-{-# LINE 298 "src/Data/Array/Comfort/Storable.hs" #-}+ DocTest.printPrefix "Data.Array.Comfort.Storable:302: "+{-# LINE 302 "src/Data/Array/Comfort/Storable.hs" #-} DocTest.property-{-# LINE 298 "src/Data/Array/Comfort/Storable.hs" #-}+{-# LINE 302 "src/Data/Array/Comfort/Storable.hs" #-} (forAllNonEmpty $ \xs -> Array.limits xs ==? (Array.minimum xs, Array.maximum xs))