packages feed

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 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-===--[![Build Status](https://travis-ci.org/tonyday567/numhask.svg)](https://travis-ci.org/tonyday567/numhask) -[![Hackage](https://img.shields.io/hackage/v/numhask-array.svg)](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"]