More flexible API for model creation and customization
An alternative (or orthogonal) option to #52, inspired by PyMC3 and Keras Sequential model:
with xs.Model() as model:
model.add(Grid, name='grid')
model.add(Flow, name='flow')
in_ds = xs.create_setup(...)
out_ds.xsimlab.run()
The advantages of this approach:
- Combine model creation/customization and setup/run within a same context block.
- Allows to customize models in a more imperative style (i.e., track the order in which
gridandfloware defined in the example above), which is sometimes necessary. - Possibility to add options to
Model.add(), e.g., for setting user-defined process dependencies or resetting foreign variables.
This possible feature looks very interesting, and might be helpful for my workflow.
To understand the aim correctly: Is the order that processes are added to the model recorded, and the processes will be initialized in that order at runtime? Or is this order only related to foreign variables and process dependencies?
To understand the aim correctly: Is the order that processes are added to the model recorded, and the processes will be initialized in that order at runtime? Or is this order only related to foreign variables and process dependencies?
It should enable both. This is discussed in https://github.com/xarray-contrib/xarray-simlab/issues/164#issuecomment-803196865 and in #177, although using a different API that is a bit more flexible than the one here above.