Changelog¶
Version 1.3.2¶
Changes to tested Python and Node.js versions:
Bump Python versions (drop 3.5 from testing, test on 3.6 and 3.8)
Bump Node version (test on current LTS release, 14.15.1)
Fixes:
Update npm dependencies
Version 1.3.1¶
Fixes:
Move unit registration to within UnitAdaptor.simulate (fixes running with custom units)
Update npm dependencies
Version 1.3¶
Features:
Add smif CLI subcommands: decide, before_step, step
Add –dry-run option when running a whole model run - prints a list of step subcommands
Allow concrete instances of Model, SectorModel
Include only sector_models and model_dependencies in job graphs (reduces logging noise)
Include hundredths of a second in log timings
Fixes: - Handle one-dimensional DataArray to Dataframe conversions (could mis-sort data with unordered
labels in conversion to/from xarray - see pydata/xarray#3798)
Update npm dependencies
Relax ruamel.yaml requirement to >=15.50
Fix Travis/Appveyor tests under Python 3.5 (install/pin dependencies)
Version 1.2.1¶
Fixes:
Fix warm start re-run
Update npm module dependencies in React app
Fix docs build
Version 1.2¶
Features:
Warm start avoids re-running models within a partially-complete timestep
DAFNI scheduler plugin
Convert CSV to Parquet store
Create model runs corresponding to all variants in a scenario
Results object gives access to all model run results (helper wrapper around a Store)
Fixes:
Handle missing dims in dependency validation
Clear results before new run
Update pytest and fix testing for error messages
Fix spec/data mismatch when reading scenario data
Config update may be required:
Data file references in YAML configs should not include extensions (.csv or .parquet) in order to support conversion between data store implementations.
Version 1.1¶
Features:
DecisionModule now handles the state of the system of systems
correctly; refactored pre-spec planning out of DecisionModule
Results_Handle provides read-only access to state
Can read and write empty state to and from store without errors
Added documentation on how to use pre-specified planning
Find out model runs which have results available
Identify missing results
Programmatically access results
Version 1.0.8¶
Features:
Add a port argument to cli for smif app
Version 1.0.7¶
Fixes:
Fix ambiguous smif cli verbosity arguments
Version 1.0.6¶
Fixes:
smif app bugfix
Version 1.0.5¶
Minor updates:
Convert custom units with UnitAdaptor
Cache coefficients by dimension pairs for greater reuse
Handle and test for duplicate data rows on read
Improve error message if file data is missing timestep
Improve DataArray.from_df validation and messages
Use gzip compression for smaller parquet files
Faster comparison of dim names using python set
Fixes:
Debug messages with non-str interval names in IntervalAdaptor
Store dimensions as CSV, special-case convention for intervals
Handle raw Exception from xarray v0.10
Ensure DataHandle.get_data returns DataArray named as the input spec
Version 1.0.4¶
Fixes:
built-in adaptors calling ndim on DataArray
Version 1.0.3¶
Minor updates:
Update npm packages
Fixes:
Fix missing method on datahandle for read and write coefficients
Catch and reraise index error with more information when reading narratives
Version 1.0.2¶
Minor updates:
Update smif app readme
Bump babel and webpack major versions, update other npm packages
Validate self-dependencies (between timesteps is okay)
Add validation methods for narratives
Make illegal parameters visible in narrative configuration
Pass path to binary filestore, extract method to parent class
Allow adaptors to be directly included in a system of systems model
Provide useful error message when there are missing data in a data array
Add profiling to some places in the program, provide summary at end of modelrun
Don’t read dimension elements through API
Fixes:
Fix and test reading from timeseries, including zero-d case
Fix API calling old store methods
Pin libgcc as possible cause of shared library import errors
Fix up test_validate to use conftest configs
Fix react-icons imports, drop reactstrap
Silence mocha deprecation warning.
Ensure smif npm package is private
Fix update_model method store
Adopt fix for DataFrame.to_dict(‘records’) from future pandas
Version 1.0¶
Functionality:
GUI improved usability
Forms now ask users to discard or save changes
Configuration lists can be sorted and filtered
Single click navigation between linked configurations
First steps of input validation (in SosModel configurations)
Define model data (inputs/parameters/outputs) using arbitrary dimensions (may be spatial, temporal, categorical)
Dimension conversions can be performed by an
Adaptor, represented as anotherSectorModelwithin aSosModel
Data layer refactor to enable various Store implementations, separately for configuration data, metadata and input/parameter/results and interventions/decisions/state data.
DataArrayandSpechandle input/parameter/results data and metadataGroundwork for a PostgreSQL
DbConfigStoreimplementation
Separation of
SosModelconstruction and configuration fromModelRunrunning: introduce aJobSchedulerthat runs directed graphs of simulation jobs, connected by dependency edges.Initial
JobScheduleris purely serialRemove
ModelSet, removing the capability to handle within-timestep dependency loopsIntroduce explicit between-timestep dependencies (including model self-dependency)
Version 0.8¶
Functionality:
GUI redesiged to include sidebar, jobs, modelrun scheduler
Decision architecture reaches maturity
Initial conditions and pre-specified planning concepts merged
Pre-Specified Planning strategies can be defined in model run
Strategy contains a list of planning decisions (name, build_year) tuples
Interventions file contains list of interventions
Interventions can be defined in yml or csv format
CSV format is parsed so that <attribute_name>_value and <attribute_name>_unit suffixes to column names populate a nested dict
{attribute_name: {'value': x, 'unit': y}}in memoryyml format is declared using
attribute_name: {'value': x, 'unit': y}}structure
CLI code refactored out to seperate build, execute, load and setup modules in a new
smif.controllersubpackage
Version 0.7¶
Functionality:
Renamed ScenarioSets parameters to facets which constrain the dimensions of data defined in Scenarios
Numerous functionality and usability improvements to the smif GUI
Refactored and generalised conversion of space and time to use numpy operations
Conversion coefficients are cached and loaded instead of being regenerated each run
Added a warm start argument
--warmto the smif command line inteface which resumes a model run from the last successfully completed time interval of a runAdded timestamps to results
Add a binary file interface
-iargument to the command line interface that writes intermediate model results using pyarrow resulting in much smaller file sizes than csv and a great speedupWrite out a link to the
smif appin the console, instead of opening the app in the default browser automatically
Bugs:
Fixes to the GUI to avoid locking due to threading
Fixed a bug in datafileinterface where an infinite loop was entered when an interval definition did not exist
Datafileinterface validates data from the set of unique interval and region names
Updated SectorModel calls to region register to return lists of intervals and regions in same order as the datafileinterface
Fixes to the GUI server to enable port-forwarding through a virtual machine
Fixes bug in smif –warm, where certain keywords caused the warm start to not being able to find previous modelrun results
Fixes loading modelruns interactively, resolve error when loading duplicate region/interval definitions
Fixes region and interval columns of scenario data files are read as integers from csv but IDs of regions and intervals could be read as strings or integers from shapefiles and csvs respectively raising validation errors
Version 0.6¶
Functionality:
Getting started documentation updated to reflect new concepts and folder structure
First version of web app GUI suitable for configuring simulation models, system of system models and model runs
Implemented HTTP API whcih exposes smif data interface to the GUI
Added
smif appcommand to start the GUI server and open web package from the command lineAdded
smif setupcommand to copy bundled example project to user folderAdded functionality to SectorModel wrapper which enables introspection of configuration data - managed by the
DataHandleclass and accessed at runtime in SectorModel.simulate() via theself.dataproperty. This gives access to timesteps, input data, region and interval sets, model parameters.Added unit conversion and the ability to load custom units from a file, the location to which is specified under the
unitskey in the project file
Development:
Build documentation using better-api package to better order and display the code on readthedocs
Added class diagram for data DataHandle class
Migrated code coverage to codecov.io
Updated pyscaffold dependency to v3.0 (removes pbr which causes issues with e.g. submodules among other things)
GUI is now built on travis in deploy stage
Travis build stages are used to separate testing and deployment
Bugs:
Fixed incorrect datetime parsing
Fixed assumption over http app location for debug
Fixed lack of error warning when running a modelrun when no timesteps defined
Version 0.5¶
Complete reconfiguration of project folder structure
Implemented a datalayer
Datafileinterface provides read and write methods to file system
Databaseinterface will provides read and write methods to database
Model parameters are passed into a simulation model from narratives
Added a code of conduct
Reconfigured builders expect contained objects to be constructed
Scenario data filtered on available timesteps at runtime
Updated documentation
Added prototype (template) smif GUI using web app (in progress)
Updated command line interface with new commands
listandrunIntroduced concepts of simulation model, scenario model, system-of-systems model, narratives and model run.
Version 0.4¶
Implemented continuous deployment to PyPi using Travis CI
Uses numpy arrays for passing data between scenarios and models
Refactored space-time convertor functions
Read ModelSet convergence settings from model configuration data
Added units to model metadata class and require as well as spatial and temporal resolutions
Added UML class diagrams to documentation
Refactored to create discrete model objects which inherit from an abstractclass
Complete restructuring of package
Version 0.3¶
Fast, more compact YAML
Input, output and pre-specified planning files can now be empty
State is passed between successive time steps
Interdependencies (cycles in dependencies) are now supported, models are run in cycles stopping at convergence or timeout
Non-unique time interval definitions are supported
Version 0.2¶
Basic conversion of time intervals (aggregation, disaggregation, remapping) and regions (aggregation, disaggregation)
Results are written out in a yaml dump with the
-oflag e.g.smif run -o results.yaml model.yamlSingle one-way dependencies with spatio-temporal conversion are supported
Simplified and harmonised implementation of model inputs and outputs
Version 0.1¶
Run a single simulation model for a single timestep
Provide a model with scenario data and planned interventions
Configure a model with sets of regions and sets of time intervals for within- timestep simulation