srtree 1.0.0.0 → 1.0.0.1
raw patch · 3 files changed
+32/−14 lines, 3 filesdep ~addep ~criteriondep ~vectorPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: ad, criterion, vector
API changes (from Hackage documentation)
Files
- ChangeLog.md +5/−0
- app/Main.hs +20/−8
- srtree.cabal +7/−6
ChangeLog.md view
@@ -1,5 +1,10 @@ # Changelog for srtree +## 1.0.0.1++- Fix `vector` version bounds+- Included benchmarking of `ad` package+ ## 1.0.0.0 - Complete refactoring of source
app/Main.hs view
@@ -4,18 +4,25 @@ import Data.SRTree.Print import Data.SRTree.Random import Data.SRTree.Recursion hiding (fromList)-import Data.Vector (fromList)+import Data.Vector (fromList, toList) import System.Random import Control.Monad.Reader import Control.Monad.State import Criterion.Main+import Numeric.AD.Double ( grad ) -t = 1 + var 0 * (3.1 + param 0 * var 1 + var 0 * param 1) - var 0+autograd t = grad (cata alg t)+ where+ alg (Var ix) = const 0+ alg (Param ix) = \xs -> xs !! ix+ alg (Const v) = const 1.0+ alg (Bin op l r) = \xs -> evalOp op (l xs) (r xs)+ alg (Uni f t) = \xs -> evalFun f (t xs) xs = fromList [1.0, 2.0]-ps = fromList [0.5, 0.3]+ps = fromList [0.1, 0.2 .. 30.0] -params = P [0,1] (-1.0, 1.0) (-2, 2) [Id ..] +params = P [0,1] (-1.0, 1.0) (-2, 2) [Id ..] runRnd g ns p = flip evalStateT g $ traverse (\n -> runReaderT (randomTree n) p) ns runRndBalance g ns p = flip evalStateT g $ traverse (\n -> runReaderT (randomTreeBalanced n) p) ns@@ -26,16 +33,21 @@ g = mkStdGen 42 benchTree f h = do ts <- f g lens params- pure $ map (h xs ps id) ts+ pure $ map (h xs ps id . relabelParams . fst . constsToParam) ts +benchAutodiff f = do ts <- f g lens params+ let ps' = Data.Vector.toList ps+ pure $ map ((`autograd` ps') . relabelParams . fst . constsToParam) ts main :: IO () main = defaultMain [- bgroup "unbalanced" + bgroup "unbalanced" [ bench "forwardMode" $ nfIO (benchTree runRnd forwardMode) , bench "grad" $ nfIO (benchTree runRnd gradParams)+ , bench "autodiff" $ nfIO (benchAutodiff runRnd) ] ,- bgroup "balanced" + bgroup "balanced" [ bench "forwardMode" $ nfIO (benchTree runRndBalance forwardMode) , bench "grad" $ nfIO (benchTree runRndBalance gradParams)- ] + , bench "autodiff" $ nfIO (benchAutodiff runRndBalance)+ ] ]
srtree.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: srtree-version: 1.0.0.0+version: 1.0.0.1 synopsis: A general framework to work with Symbolic Regression expression trees. description: A Symbolic Regression Tree data structure to work with mathematical expressions with support to first order derivative and simplification; category: Math, Data, Data Structures@@ -41,7 +41,7 @@ , containers ==0.6.* , mtl ==2.2.* , random ==1.2.*- , vector >=0.12 && <=0.13+ , vector >=0.12 && <0.14 default-language: Haskell2010 executable bench-srtree@@ -52,13 +52,14 @@ app ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2 -optc-O3 build-depends:- base >=4.16 && <4.18+ ad >=4.5.0 && <4.6+ , base >=4.16 && <4.18 , containers ==0.6.*- , criterion >=1.6.0 && <1.7+ , criterion >=1.5.0 && <1.7 , mtl ==2.2.* , random ==1.2.* , srtree- , vector >=0.12 && <=0.13+ , vector >=0.12 && <0.14 default-language: Haskell2010 test-suite srtree-test@@ -77,5 +78,5 @@ , mtl ==2.2.* , random ==1.2.* , srtree- , vector >=0.12 && <=0.13+ , vector >=0.12 && <0.14 default-language: Haskell2010