numhask-array 0.9.0 → 0.9.1
raw patch · 8 files changed
+85/−90 lines, 8 filesdep −doctestdep −numhask-arraysetup-changed
Dependencies removed: doctest, numhask-array
Files
- ChangeLog.md +15/−0
- Setup.hs +1/−0
- numhask-array.cabal +7/−25
- readme.md +0/−32
- src/NumHask/Array/Dynamic.hs +23/−4
- src/NumHask/Array/Fixed.hs +29/−8
- src/NumHask/Array/Shape.hs +10/−2
- test/test.hs +0/−19
+ ChangeLog.md view
@@ -0,0 +1,15 @@+0.9.1+===+* GHC 9.0.1 support+* API fixes++0.8.0+=====++* GHC 8.10.2 support+* Removed hmatrix support. See [numhask-hmatrix](https://github.com/tonyday567/numhask-hmatrix)++0.7.0+=====++* GHC 8.10.1 support
Setup.hs view
@@ -1,2 +1,3 @@ import Distribution.Simple+ main = defaultMain
numhask-array.cabal view
@@ -1,8 +1,8 @@ cabal-version: 2.4 name: numhask-array-version: 0.9.0+version: 0.9.1 synopsis:- Multi-dimensional array interface for numhask.+ Multi-dimensional arrays. description: This package provides an interface into the [numhask](https://hackage.haskell.org/package/numhask) API, and both type- and value-level shape manipulation routines. .@@ -35,11 +35,14 @@ license-file: LICENSE tested-with:- GHC==8.10.1 GHC==9.0.1+ GHC ==8.8.4+ || ==8.10.4+ || ==9.0.1+ || ==9.2.0.20210821 build-type: Simple extra-source-files:- readme.md+ ChangeLog.md source-repository head type: git@@ -69,24 +72,3 @@ NumHask.Array.Dynamic NumHask.Array.Shape default-language: Haskell2010-test-suite test- type:- exitcode-stdio-1.0- main-is:- test.hs- hs-source-dirs:- test- default-extensions:- build-depends:- base >=4.11 && <5,- doctest >=0.13 && <0.19,- numhask-array- default-language: Haskell2010- ghc-options:- -Wall- -Wcompat- -Wincomplete-record-updates- -Wincomplete-uni-patterns- -Wredundant-constraints- -fwrite-ide-info- -hiedir=.hie
− readme.md
@@ -1,32 +0,0 @@-numhask-array-===--[](https://travis-ci.org/tonyday567/numhask) -[](https://hackage.haskell.org/package/numhask-array) --This package provides an interface into the numhask API, and both type and value level shape manipulation routines.--Usage-===--``` haskell-{-# LANGUAGE NegativeLiterals #-}-{-# LANGUAGE RebindableSyntax #-}-import NumHask.Prelude-import NumHask.Array-```--In situations where shape is only known at runtime, a clear module configuration is:--``` haskell-import NumHask.Array.Shape-import qualified NumHask.Array.Fixed as F-import qualified NumHask.Array.Dynamic as D-```--Performance-===--Performance experiments are located in [numhask-bench](https://github.com/tonyday567/numhask-bench). [numhask-hmatrix](https://github.com/tonyday567/numhask-hmatrix) provides a more performant and similar interface.--
src/NumHask/Array/Dynamic.hs view
@@ -11,16 +11,17 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoStarIsType #-} {-# OPTIONS_GHC -Wno-redundant-constraints #-}-{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-} {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}+{-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-} -- | Arrays with a dynamic shape. module NumHask.Array.Dynamic- ( -- $setup+ ( -- $usage Array (..), -- * Conversion fromFlatList,+ toFlatList, -- * representable replacements index,@@ -36,6 +37,7 @@ selectsExcept, folds, extracts,+ extractsExcept, joins, maps, concatenate,@@ -78,11 +80,29 @@ -- >>> :set -XOverloadedLists -- >>> :set -XTypeFamilies -- >>> :set -XFlexibleContexts+-- >>> :set -XRebindableSyntax+-- >>> import NumHask.Prelude+-- >>> import NumHask.Array.Dynamic+-- >>> import NumHask.Array.Shape -- >>> let s = fromFlatList [] [1] :: Array Int -- >>> let a = fromFlatList [2,3,4] [1..24] :: Array Int -- >>> let v = fromFlatList [3] [1,2,3] :: Array Int -- >>> let m = fromFlatList [3,4] [0..11] :: Array Int +-- $usage+-- >>> :set -XDataKinds+-- >>> :set -XOverloadedLists+-- >>> :set -XTypeFamilies+-- >>> :set -XFlexibleContexts+-- >>> :set -XRebindableSyntax+-- >>> import NumHask.Prelude+-- >>> import NumHask.Array.Dynamic+-- >>> import NumHask.Array.Shape+-- >>> let s = fromFlatList [] [1] :: Array Int+-- >>> let a = fromFlatList [2,3,4] [1..24] :: Array Int+-- >>> let v = fromFlatList [3] [1,2,3] :: Array Int+-- >>> let m = fromFlatList [3,4] [0..11] :: Array Int+ -- | a multidimensional array with a value-level shape -- -- >>> let a = fromFlatList [2,3,4] [1..24] :: Array Int@@ -424,7 +444,6 @@ -- >>> contract sum [1,2] (apply (fmap (*) b) (transpose b)) -- [[14, 32], -- [32, 77]]--- apply :: Array (a -> b) -> Array a ->@@ -549,7 +568,7 @@ -- | Convert a number to a scalar. -- -- >>> :t toScalar 2--- toScalar 2 :: Num a => Array a+-- toScalar 2 :: FromInteger a => Array a toScalar :: a -> Array a toScalar a = fromFlatList [] [a]
src/NumHask/Array/Fixed.hs view
@@ -15,12 +15,12 @@ {-# LANGUAGE TypeOperators #-} {-# LANGUAGE NoStarIsType #-} {-# OPTIONS_GHC -Wno-redundant-constraints #-}-{-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-} -- | Arrays with a fixed shape. module NumHask.Array.Fixed- ( -- $setup+ ( -- $usage Array (..), -- * Conversion@@ -38,6 +38,7 @@ selectsExcept, folds, extracts,+ extractsExcept, joins, maps, concatenate,@@ -82,6 +83,7 @@ import Data.Distributive (Distributive (..)) import Data.Functor.Rep import Data.List ((!!))+import Data.Proxy import qualified Data.Vector as V import GHC.Exts (IsList (..)) import GHC.Show (Show (..))@@ -89,22 +91,42 @@ import qualified NumHask.Array.Dynamic as D import NumHask.Array.Shape import NumHask.Prelude as P hiding (toList)-import Data.Proxy -- $setup+-- -- >>> :set -XDataKinds -- >>> :set -XOverloadedLists -- >>> :set -XTypeFamilies -- >>> :set -XFlexibleContexts+-- >>> :set -XRebindableSyntax+-- >>> import NumHask.Prelude+-- >>> import GHC.TypeLits (Nat)+-- >>> import Data.Proxy+-- >>> import Data.Functor.Rep -- >>> let s = [1] :: Array ('[] :: [Nat]) Int -- scalar -- >>> let v = [1,2,3] :: Array '[3] Int -- vector -- >>> let m = [0..11] :: Array '[3,4] Int -- matrix -- >>> let a = [1..24] :: Array '[2,3,4] Int --- | a multidimensional array with a type-level shape+-- $usage --+-- >>> :set -XDataKinds+-- >>> :set -XOverloadedLists+-- >>> :set -XTypeFamilies+-- >>> :set -XFlexibleContexts+-- >>> :set -XRebindableSyntax+-- >>> import NumHask.Prelude+-- >>> import NumHask.Array.Fixed+-- >>> import GHC.TypeLits (Nat)+-- >>> let s = [1] :: Array ('[] :: [Nat]) Int -- scalar+-- >>> let v = [1,2,3] :: Array '[3] Int -- vector+-- >>> let m = [0..11] :: Array '[3,4] Int -- matrix -- >>> let a = [1..24] :: Array '[2,3,4] Int--- >>> a++-- | a multidimensional array with a type-level shape+--+-- >>> :set -XDataKinds+-- >>> [1..24] :: Array '[2,3,4] Int -- [[[1, 2, 3, 4], -- [5, 6, 7, 8], -- [9, 10, 11, 12]],@@ -248,6 +270,7 @@ -- | Use a dynamic array in a fixed context. --+-- >>> import qualified NumHask.Array.Dynamic as D -- >>> with (D.fromFlatList [2,3,4] [1..24]) (selects (Proxy :: Proxy '[0,1]) [1,1] :: Array '[2,3,4] Int -> Array '[4] Int) -- [17, 18, 19, 20] with ::@@ -658,7 +681,6 @@ -- >>> contract sum (Proxy :: Proxy '[1,2]) (apply (fmap (*) b) (transpose b)) -- [[14, 32], -- [32, 77]]--- apply :: forall s s' a b. ( HasShape s,@@ -914,7 +936,7 @@ -- | Convert a number to a scalar. -- -- >>> :t toScalar 2--- toScalar 2 :: Num a => Array '[] a+-- toScalar 2 :: FromInteger a => Array '[] a toScalar :: (HasShape ('[] :: [Nat])) => a -> Array ('[] :: [Nat]) a toScalar a = fromList [a] @@ -1023,4 +1045,3 @@ n = fromIntegral $ natVal @n Proxy k = fromIntegral $ natVal @k Proxy {-# INLINE mmult #-}-
src/NumHask/Array/Shape.hs view
@@ -77,11 +77,19 @@ ) where +import Data.Proxy import Data.Type.Bool+import Data.Type.Equality import GHC.TypeLits as L import NumHask.Prelude as P hiding (Last, minimum)-import Data.Proxy-import Data.Type.Equality++-- $setup+-- >>> :set -XDataKinds+-- >>> :set -XOverloadedLists+-- >>> :set -XTypeFamilies+-- >>> :set -XFlexibleContexts+-- >>> :set -XRebindableSyntax+-- >>> import NumHask.Prelude -- | The Shape type holds a [Nat] at type level and the equivalent [Int] at value level. -- Using [Int] as the index for an array nicely represents the practical interests and constraints downstream of this high-level API: densely-packed numbers (reals or integrals), indexed and layered.
− test/test.hs
@@ -1,19 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# OPTIONS_GHC -Wall #-}--module Main where--import Prelude as P-import Test.DocTest--main :: IO ()-main = do- putStrLn "NumHask.Array.Fixed DocTest turned on"- doctest ["src/NumHask/Array/Fixed.hs"]- putStrLn "NumHask.Array.Shape DocTest turned on"- doctest ["src/NumHask/Array/Shape.hs"]- putStrLn "NumHask.Array.Dynamic DocTest turned on"- doctest ["src/NumHask/Array/Dynamic.hs"]