packages feed

aivika-experiment-chart 1.4 → 2.1

raw patch · 8 files changed

+60/−48 lines, 8 filesdep ~aivikadep ~aivika-experimentPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aivika, aivika-experiment

API changes (from Hackage documentation)

Files

Simulation/Aivika/Experiment/Chart/DeviationChartView.hs view
@@ -110,7 +110,7 @@                        deviationChartDescription = "It shows the Deviation chart by rule 3-sigma.",                        deviationChartWidth       = 640,                        deviationChartHeight      = 480,-                       deviationChartFileName    = UniqueFilePath "$TITLE",+                       deviationChartFileName    = UniqueFilePath "DeviationChart",                        deviationChartTransform   = id,                        deviationChartLeftYSeries  = mempty,                         deviationChartRightYSeries = mempty, @@ -151,8 +151,9 @@                           deviationChartStats :: [IOArray Int (SamplingStats Double)] }    -- | Create a new state of the view.-newDeviationChart :: DeviationChartView -> Experiment -> r -> FilePath -> IO (DeviationChartViewState r)+newDeviationChart :: DeviationChartView -> Experiment -> r -> FilePath -> ExperimentWriter (DeviationChartViewState r) newDeviationChart view exp renderer dir =+  liftIO $    do f <- newIORef Nothing      l <- newMVar ()       r <- newMRef Nothing@@ -183,7 +184,7 @@   (newDeviationChartResults names (deviationChartExperiment st)) $ \results ->   if (names /= deviationChartNames results)   then error "Series with different names are returned for different runs: requireDeviationChartResults"-  else results+  else return results         -- | Simulate the specified series. simulateDeviationChart :: DeviationChartViewState r -> ExperimentData -> Event DisposableEvent@@ -217,7 +218,7 @@                y' `seq` writeArray stats i y'       -- | Plot the deviation chart after the simulation is complete.-finaliseDeviationChart :: WebPageCharting r => DeviationChartViewState r -> IO ()+finaliseDeviationChart :: WebPageCharting r => DeviationChartViewState r -> ExperimentWriter () finaliseDeviationChart st =   do let view = deviationChartView st          title = deviationChartTitle view@@ -232,10 +233,15 @@          plotBottomAxis = deviationChartBottomAxis view          plotLayout = deviationChartLayout view          renderer = deviationChartRenderer st-     results <- readMRef $ deviationChartResults st+     file <- resolveFilePath (deviationChartDir st) $+             mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $+             expandFilePath (deviationChartFileName view) $+             M.fromList [("$TITLE", title)]+     results <- liftIO $ readMRef $ deviationChartResults st      case results of        Nothing -> return ()        Just results ->+         liftIO $          do let times = deviationChartTimes results                 names = deviationChartNames results                 stats = deviationChartStats results@@ -284,10 +290,6 @@                         layoutlr_title .~ plotTitle' $                         layoutlr_plots .~ ps $                         def-            file <- resolveFilePath (deviationChartDir st) $-                    mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $-                    expandFilePath (deviationChartFileName view) $-                    M.fromList [("$TITLE", title)]             renderChart renderer (width, height) file (toRenderable chart)             when (experimentVerbose $ deviationChartExperiment st) $               putStr "Generated file " >> putStrLn file
Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs view
@@ -103,7 +103,7 @@                        finalHistogramDescription = "It shows a histogram by data gathered in the final time points.",                        finalHistogramWidth       = 640,                        finalHistogramHeight      = 480,-                       finalHistogramFileName    = UniqueFilePath "$TITLE",+                       finalHistogramFileName    = UniqueFilePath "FinalHistogram",                        finalHistogramPredicate   = return True,                        finalHistogramBuild       = histogram binSturges,                        finalHistogramTransform   = id,@@ -141,8 +141,9 @@                           finalHistogramValues :: [MRef [Double]] }    -- | Create a new state of the view.-newFinalHistogram :: FinalHistogramView -> Experiment -> r -> FilePath -> IO (FinalHistogramViewState r)+newFinalHistogram :: FinalHistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (FinalHistogramViewState r) newFinalHistogram view exp renderer dir =+  liftIO $   do f <- newIORef Nothing      r <- newMRef Nothing      return FinalHistogramViewState { finalHistogramView       = view,@@ -166,7 +167,7 @@   (newFinalHistogramResults names (finalHistogramExperiment st)) $ \results ->   if (names /= finalHistogramNames results)   then error "Series with different names are returned for different runs: requireFinalHistogramResults"-  else results+  else return results  -- | Simulation of the specified series. simulateFinalHistogram :: FinalHistogramViewState r -> ExperimentData -> Event DisposableEvent@@ -187,10 +188,10 @@        do xs <- forM exts resultExtractData           liftIO $             forM_ (zip xs values) $ \(x, values) ->-            modifyMRef values $ (++) x+            modifyMRef_ values $ return . (++) x       -- | Plot the histogram after the simulation is complete.-finaliseFinalHistogram :: WebPageCharting r => FinalHistogramViewState r -> IO ()+finaliseFinalHistogram :: WebPageCharting r => FinalHistogramViewState r -> ExperimentWriter () finaliseFinalHistogram st =   do let view = finalHistogramView st          title = finalHistogramTitle view@@ -204,10 +205,15 @@          bars = finalHistogramPlotBars view          layout = finalHistogramLayout view          renderer = finalHistogramRenderer st-     results <- readMRef $ finalHistogramResults st+     file <- resolveFilePath (finalHistogramDir st) $+             mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $+             expandFilePath (finalHistogramFileName view) $+             M.fromList [("$TITLE", title)]+     results <- liftIO $ readMRef $ finalHistogramResults st      case results of        Nothing -> return ()        Just results ->+         liftIO $          do let names  = finalHistogramNames results                 values = finalHistogramValues results             xs <- forM values readMRef@@ -231,10 +237,6 @@                         layout_title .~ plotTitle' $                         layout_plots .~ [p] $                         def-            file <- resolveFilePath (finalHistogramDir st) $-                    mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $-                    expandFilePath (finalHistogramFileName view) $-                    M.fromList [("$TITLE", title)]             renderChart renderer (width, height) file (toRenderable chart)             when (experimentVerbose $ finalHistogramExperiment st) $               putStr "Generated file " >> putStrLn file
Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs view
@@ -118,7 +118,7 @@                      finalXYChartDescription = "It shows the XY chart for the results in the final time points.",                      finalXYChartWidth       = 640,                      finalXYChartHeight      = 480,-                     finalXYChartFileName    = UniqueFilePath "$TITLE",+                     finalXYChartFileName    = UniqueFilePath "FinalXYChart",                      finalXYChartPredicate   = return True,                      finalXYChartTransform   = id,                      finalXYChartXSeries     = mempty,@@ -160,8 +160,9 @@                         finalXYChartXY     :: [IOArray Int (Maybe (Double, Double))] }    -- | Create a new state of the view.-newFinalXYChart :: FinalXYChartView -> Experiment -> r -> FilePath -> IO (FinalXYChartViewState r)+newFinalXYChart :: FinalXYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (FinalXYChartViewState r) newFinalXYChart view exp renderer dir =+  liftIO $   do f <- newIORef Nothing      l <- newMVar ()       r <- newMRef Nothing@@ -190,7 +191,7 @@   (newFinalXYChartResults xname ynames (finalXYChartExperiment st)) $ \results ->   if (xname /= finalXYChartXName results) || (ynames /= finalXYChartYNames results)   then error "Series with different names are returned for different runs: requireFinalXYChartResults"-  else results+  else return results         -- | Simulation. simulateFinalXYChart :: FinalXYChartViewState r -> ExperimentData -> Event DisposableEvent@@ -234,7 +235,7 @@             x `seq` y `seq` writeArray xy i $ Just (x, y)       -- | Plot the XY chart after the simulation is complete.-finaliseFinalXYChart :: WebPageCharting r => FinalXYChartViewState r -> IO ()+finaliseFinalXYChart :: WebPageCharting r => FinalXYChartViewState r -> ExperimentWriter () finaliseFinalXYChart st =   do let view = finalXYChartView st           title = finalXYChartTitle view@@ -248,10 +249,15 @@          plotBottomAxis = finalXYChartBottomAxis view          plotLayout = finalXYChartLayout view          renderer = finalXYChartRenderer st-     results <- readMRef $ finalXYChartResults st+     file <- resolveFilePath (finalXYChartDir st) $+             mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $+             expandFilePath (finalXYChartFileName view) $+             M.fromList [("$TITLE", title)]+     results <- liftIO $ readMRef $ finalXYChartResults st      case results of        Nothing -> return ()        Just results ->+         liftIO $          do let xname  = finalXYChartXName results                 ynames = finalXYChartYNames results                 xys    = finalXYChartXY results@@ -282,10 +288,6 @@                         layoutlr_title .~ plotTitle' $                         layoutlr_plots .~ ps $                         def-            file <- resolveFilePath (finalXYChartDir st) $-                    mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $-                    expandFilePath (finalXYChartFileName view) $-                    M.fromList [("$TITLE", title)]             renderChart renderer (width, height) file (toRenderable chart)             when (experimentVerbose $ finalXYChartExperiment st) $               putStr "Generated file " >> putStrLn file
Simulation/Aivika/Experiment/Chart/HistogramView.hs view
@@ -112,7 +112,7 @@                   histogramDescription = "It shows the histogram(s) by data gathered in the integration time points.",                   histogramWidth       = 640,                   histogramHeight      = 480,-                  histogramFileName    = UniqueFilePath "$TITLE - $RUN_INDEX",+                  histogramFileName    = UniqueFilePath "Histogram($RUN_INDEX)",                   histogramPredicate   = return True,                   histogramBuild       = histogram binSturges,                   histogramTransform   = id,@@ -145,7 +145,7 @@                        histogramMap        :: M.Map Int FilePath }    -- | Create a new state of the view.-newHistogram :: WebPageCharting r => HistogramView -> Experiment -> r -> FilePath -> IO (HistogramViewState r)+newHistogram :: WebPageCharting r => HistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (HistogramViewState r) newHistogram view exp renderer dir =   do let n = experimentRunCount exp      fs <- forM [0..(n - 1)] $ \i ->@@ -155,7 +155,7 @@        M.fromList [("$TITLE", histogramTitle view),                    ("$RUN_INDEX", show $ i + 1),                    ("$RUN_COUNT", show n)]-     forM_ fs $ flip writeFile []  -- reserve the file names+     liftIO $ forM_ fs $ flip writeFile []  -- reserve the file names      let m = M.fromList $ zip [0..(n - 1)] fs      return HistogramViewState { histogramView       = view,                                  histogramExperiment = exp,
Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs view
@@ -116,7 +116,7 @@                    timeSeriesDescription = "It shows the Time Series chart(s).",                    timeSeriesWidth       = 640,                    timeSeriesHeight      = 480,-                   timeSeriesFileName    = UniqueFilePath "$TITLE - $RUN_INDEX",+                   timeSeriesFileName    = UniqueFilePath "TimeSeries($RUN_INDEX)",                    timeSeriesPredicate   = return True,                    timeSeriesTransform   = id,                    timeSeriesLeftYSeries  = const mempty,@@ -150,7 +150,7 @@                         timeSeriesMap        :: M.Map Int FilePath }    -- | Create a new state of the view.-newTimeSeries :: WebPageCharting r => TimeSeriesView -> Experiment -> r -> FilePath -> IO (TimeSeriesViewState r)+newTimeSeries :: WebPageCharting r => TimeSeriesView -> Experiment -> r -> FilePath -> ExperimentWriter (TimeSeriesViewState r) newTimeSeries view exp renderer dir =   do let n = experimentRunCount exp      fs <- forM [0..(n - 1)] $ \i ->@@ -160,7 +160,7 @@        M.fromList [("$TITLE", timeSeriesTitle view),                    ("$RUN_INDEX", show $ i + 1),                    ("$RUN_COUNT", show n)]-     forM_ fs $ flip writeFile []  -- reserve the file names+     liftIO $ forM_ fs $ flip writeFile []  -- reserve the file names      let m = M.fromList $ zip [0..(n - 1)] fs      return TimeSeriesViewState { timeSeriesView       = view,                                   timeSeriesExperiment = exp,
Simulation/Aivika/Experiment/Chart/XYChartView.hs view
@@ -124,7 +124,7 @@                 xyChartDescription = "It shows the XY chart(s).",                 xyChartWidth       = 640,                 xyChartHeight      = 480,-                xyChartFileName    = UniqueFilePath "$TITLE - $RUN_INDEX",+                xyChartFileName    = UniqueFilePath "XYChart($RUN_INDEX)",                 xyChartPredicate   = return True,                 xyChartTransform    = id,                 xyChartXSeries      = mempty, @@ -159,7 +159,7 @@                      xyChartMap        :: M.Map Int FilePath }    -- | Create a new state of the view.-newXYChart :: WebPageCharting r => XYChartView -> Experiment -> r -> FilePath -> IO (XYChartViewState r)+newXYChart :: WebPageCharting r => XYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (XYChartViewState r) newXYChart view exp renderer dir =   do let n = experimentRunCount exp      fs <- forM [0..(n - 1)] $ \i ->@@ -169,7 +169,7 @@        M.fromList [("$TITLE", xyChartTitle view),                    ("$RUN_INDEX", show $ i + 1),                    ("$RUN_COUNT", show n)]-     forM_ fs $ flip writeFile []  -- reserve the file names+     liftIO $ forM_ fs $ flip writeFile []  -- reserve the file names      let m = M.fromList $ zip [0..(n - 1)] fs      return XYChartViewState { xyChartView       = view,                                xyChartExperiment = exp,
aivika-experiment-chart.cabal view
@@ -1,5 +1,5 @@ name:            aivika-experiment-chart-version:         1.4+version:         2.1 synopsis:        Simulation experiments with charting for the Aivika library description:     This package complements the Aivika and Aivika Experiment packages with@@ -86,8 +86,8 @@                      lens >= 3.9,                      data-default-class < 0.1,                      colour >= 2.3.3,-                     aivika >= 1.4,-                     aivika-experiment >= 1.4+                     aivika >= 2.1,+                     aivika-experiment >= 2.1      extensions:      FlexibleInstances,                      MultiParamTypeClasses
examples/Financial/Experiment.hs view
@@ -29,32 +29,36 @@ monteCarloGenerators =   [outputView defaultExperimentSpecsView,    outputView $ defaultDeviationChartView {-     deviationChartTitle = "The deviation chart for Net Income and Cash Flow",+     deviationChartTitle = "Chart 1",+     deviationChartPlotTitle = "The deviation chart for Net Income and Cash Flow",      deviationChartLeftYSeries =        resultByName netIncomeName <>        resultByName netCashFlowName },    outputView $ defaultDeviationChartView {-     deviationChartTitle = "The deviation chart for Net Present Value of Income and Cash Flow",+     deviationChartTitle = "Chart 2",+     deviationChartPlotTitle = "The deviation chart for Net Present Value of Income and Cash Flow",      deviationChartLeftYSeries =        resultByName npvIncomeName <>        resultByName npvCashFlowName },    outputView $ defaultFinalHistogramView {-     finalHistogramTitle = "Histogram for Net Income and Cash Flow",+     finalHistogramTitle = "Histogram 1",+     finalHistogramPlotTitle = "Histogram for Net Income and Cash Flow",      finalHistogramSeries =        resultByName netIncomeName <>        resultByName netCashFlowName },    outputView $ defaultFinalHistogramView {-     finalHistogramTitle = "Histogram for Net Present Value of Income and Cash Flow",+     finalHistogramTitle = "Histogram 2",+     finalHistogramPlotTitle = "Histogram for Net Present Value of Income and Cash Flow",      finalHistogramSeries =        resultByName npvIncomeName <>        resultByName npvCashFlowName },    outputView $ defaultFinalStatsView {-     finalStatsTitle = "Summary for Net Income and Cash Flow",+     finalStatsTitle = "Summary 1",      finalStatsSeries =        resultByName netIncomeName <>        resultByName netCashFlowName },    outputView $ defaultFinalStatsView {-     finalStatsTitle = "Summary for Net Present Value of Income and Cash Flow",+     finalStatsTitle = "Summary 2",      finalStatsSeries =        resultByName npvIncomeName <>        resultByName npvCashFlowName } ]@@ -72,12 +76,14 @@ singleGenerators =   [outputView defaultExperimentSpecsView,    outputView $ defaultTimeSeriesView {-     timeSeriesTitle = "Time series of Net Income and Cash Flow",+     timeSeriesTitle = "Time Series 1",+     timeSeriesPlotTitle = "Time series of Net Income and Cash Flow",      timeSeriesLeftYSeries =        resultByName netIncomeName <>        resultByName netCashFlowName },    outputView $ defaultTimeSeriesView {-     timeSeriesTitle = "Time series of Net Present Value for Income and Cash Flow",+     timeSeriesTitle = "Time Series 2",+     timeSeriesPlotTitle = "Time series of Net Present Value for Income and Cash Flow",      timeSeriesLeftYSeries =        resultByName npvIncomeName <>        resultByName npvCashFlowName },