-
Notifications
You must be signed in to change notification settings - Fork 10
Roadmap
Benoit Bovy edited this page Jun 11, 2017
·
9 revisions
-
Provide a small framework for creating computational models (
Modelobjects) that are built from collections of re-usable model components (Processsubclasses). EachProcesssubclass:- has a declarative interface that consists of a set of variables (
Variable,ForeignVariable,VariableList,VariableGroupobjects) as class attributes ; - implements specific methods like
.initialize(),.run_step(),.finalize_step()and/orfinalize(), which use/set values for the variables declared in the Process.
- has a declarative interface that consists of a set of variables (
-
Provide an xarray extension (
Dataset.simlabaccessor) that allows:- Adding new data variables and/or coordinates to a xarray
Datasetas inputs and time steps of a givenModel; - Running the model with the
ds.simlab.run()method, which returns a new Dataset with both model input and output data.
- Adding new data variables and/or coordinates to a xarray
-
Write tests and documentation.
- For large simulations, save model outputs (snapshots) to disk as the simulation proceed and then return
the new
Datasetas an open file (currently all snapshots are kept in memory). - Add logging and progress status of a simulation. Maybe use the
loggingmodule (add a logger that can be used in each process). - Allow the processes in a
Modelto be run in parallel (using Dask?) at each time step during a simulation, and also during initialization and finalization. This should be quite straightforward as the processes in aModeland their inter-dependencies together form a Directed Acyclic Graph (DAG). - Run multiple models in parallel (using dask?) with different model input values, using a single
Datasetobject (model inputs have dimensions). This may be simply achieved using a new method that might look likeds.simlab.run_multi('input_values_dim')whereinput_values_dimis a multi-index dimension that represents all combinations of model input values. - Provide a command-line interface to run models and also to automatically generate input files (use YAML, toml or other formats).
- Add a settings system, e.g., to enable/disable logging or display a progress bar, to enable/disable setting default value when input is not provided, etc. Also provide a context manager.