This version marks the first steps towards our first major version release. The biggest addition are the newly added uncertainty heads that are now available for all models. That is, it is now possible to train any of the implemented models with probabilistic model heads. For details on these probabilistic model heads, see [Klotz et al. (2021)](https://arxiv.org/abs/2012.14295). The uncertainty heads support all models, also the multi-frequency models like `MTS-LSTM`. The only limitation so far are multi-targets (per-frequency), which is currently not supported but will be added within the next days/weeks. We also plan to release a tutorial around the uncertainty heads soon.
New Features
- The optional embedding of static and dynamic inputs was re-implemented and made more flexible for possible extensions in the future. It is now possible to specify distinct architectures for dynamic and static input embeddings. The config arguments `statics/dynamics_embedding` should now be dictionaries with keys 'type', 'hiddens', 'activation', 'dropout' or None (no embedding). The old way of specifying embeddings via `embedding_hiddens` etc. still works but is deprecated.
- The config argument `lagged_features` does now accept a list of integers (as well as just an integer like before) to specify multiple lagged copies of a single feature.
- The warning message of the metric functions does now include the basin id, if all simulations or observations are NaN, to facilitate the inspection of eventual problems with the model/data.
- Different model heads for uncertainty estimation (see the corresponding publication by [Klotz et al.](https://arxiv.org/abs/2012.14295)). It is now possible to combine any model with different heads (config argument `head`, see [Config arguments](https://neuralhydrology.readthedocs.io/en/latest/usage/config.html)), instead of before only `regression`. The new heads are `cmal`, `umal`, `gmm` (see the linked publication for more details). All heads require special loss functions that are also provided and all models now have a sample function for the different head (e.g. `model.sample_cmal()` for a model trained with CMAL head), to sample from the (trained) model. There are also a couple of new config arguments that are required/optional for those heads, so make sure to checkout the specific sections in the [Documentation](https://neuralhydrology.readthedocs.io/en/latest/usage/config.html)
Fixes
- Missing `raise` in the `dump_config` method of the `Config` class, if the file already exists.
- Problem, when evaluating the validation period outside of the model training process with `log_n_figures` > 0 in the config
- Problem in `continue-training` mode, when specifying `device` as special input argument