srtree 1.0.0.3 → 1.0.0.4
raw patch · 3 files changed
+5/−116 lines, 3 filesdep −criteriondep ~adPVP ok
version bump matches the API change (PVP)
Dependencies removed: criterion
Dependency ranges changed: ad
API changes (from Hackage documentation)
Files
- ChangeLog.md +4/−0
- app/Main.hs +0/−96
- srtree.cabal +1/−20
ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for srtree +## 1.0.0.4++- Removed benchmarking code that demanded more dependencies+ ## 1.0.0.3 - Fixed issue with HUnit test
− app/Main.hs
@@ -1,96 +0,0 @@-module Main where--import Data.SRTree-import Data.SRTree.Print-import Data.SRTree.Random-import Data.SRTree.Recursion hiding (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 )--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 .. 3000.0]-ps = fromList [0.1, 0.2 .. 110.0]--params = P [0,1] (-1.0, 1.0) (-2, 2) [Id] -- , Sin, Cos, Log, Exp]--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--lens :: [Int]-lens = replicate 100 10 <> replicate 100 100 <> replicate 100 1000--g = mkStdGen 42--benchTree f h = do ts <- f g lens params- 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"- [ -- bench "forwardMode" $ nfIO (benchTree runRnd forwardMode)- bench "grad" $ nfIO (benchTree runRnd gradParams)- , bench "grad2" $ nfIO (benchTree runRnd gradParams2)- , bench "autodiff" $ nfIO (benchAutodiff runRnd)- ] ,- bgroup "balanced"- [ -- bench "forwardMode" $ nfIO (benchTree runRndBalance forwardMode)- bench "grad" $ nfIO (benchTree runRndBalance gradParams)- , bench "grad2" $ nfIO (benchTree runRndBalance gradParams2)- , bench "autodiff" $ nfIO (benchAutodiff runRndBalance)- ]- ]--}--mkPySRTree :: Int -> Int -> Fix SRTree-mkPySRTree nvar np = relabelParams $ sum [mkWith ix | ix <- [0 .. nvar-1]]- where- mkWith ix = fst . (!!(np-1)) $ iterate (\(t, i) -> (cos (t + param i), i+1)) $ (cos (var ix + param 0), 1)--genBalancedTree :: Int -> Fix SRTree-genBalancedTree = relabelParams . go- where- go 0 = var 0- go 1 = cos (var 0 + param 0)- go n | even n = go (n `div` 2) * (param 0 + go (n `div` 2 - 1))- | odd n = cos (param 0 + go (n-1))--sizes = (,) <$> [1] <*> [10, 20 .. 1000]---sizes = (,) <$> [1] <*> [500, 600 .. 2000]---tests = map (\(ix, iy) -> (ix, iy, mkPySRTree ix iy)) sizes-tests = map (\(ix, iy) -> (ix, iy, genBalancedTree iy)) sizes--main :: IO ()-main = defaultMain [- bgroup ("PySR " <> show ix <> " " <> show iy)- [ bench "warmup" $ whnf (evalTree xs ps id) t- -- , bench "forwardMode" $ whnf (sum . forwardMode xs ps id) t- , bench "grad" $ whnf (sum . snd . gradParamsFwd xs ps id) t- , bench "grad2" $ whnf (sum . snd . gradParamsRev xs ps id) t- , bench "autodiff" $ whnf (sum . (`autograd` (Data.Vector.toList ps))) t- ] | (ix, iy, t) <- tests- ]--{--comp (x, xs) (y, ys) = ((x + sum xs) - (y + sum ys))^2--main :: IO ()-main = do - let g = mkStdGen 42- trees <- runRndBalance g lens params- mapM_ (\(t,a,b) -> print (showExpr t, a, b, comp a b)) $ filter (\(t,a,b) -> let c = comp a b in not (isNaN c) && c >= 1e-20) [(t, gradParams xs ps id t, gradParams2 xs ps id t) | t' <- trees, let t = relabelParams (fst $ constsToParam t')] --}
srtree.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: srtree-version: 1.0.0.3+version: 1.0.0.4 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@@ -42,25 +42,6 @@ , dlist ==1.0.* , mtl ==2.2.* , random ==1.2.*- , vector >=0.12 && <0.14- default-language: Haskell2010--executable bench-srtree- main-is: Main.hs- other-modules:- Paths_srtree- hs-source-dirs:- app- ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2 -optc-O3- build-depends:- ad >=4.5.0 && <4.6- , base >=4.16 && <4.18- , containers ==0.6.*- , criterion >=1.5.0 && <1.7- , dlist ==1.0.*- , mtl ==2.2.*- , random ==1.2.*- , srtree , vector >=0.12 && <0.14 default-language: Haskell2010