# CHANGELOG

## [2.0.0] (2025-02-05)
### Requirements
* Set `matplotlib` version back to 3.7.3 to ensure stability in combination with seaborn

### Added
Features
* `caculate_moments` method in `Meta_Model` class for a general calculation of the moments 
* `PCEGPR` class for combining polynomial chaos and gaussian processes 

Tests
* Tests for `GPE` class 
* Tests for `calculate_moments` method in `Meta_Model` and `GPESkl` classes 
* Tests for `PCEGPR` class 
* Tests for `PostProcessing`class

Examples
* Example `analytical_function_pcegpr.py` to show application of the combined class `PCEGPR`

### Changed 
* Split surrogate classes into template class `MetaModel` and child classes `PCE` and `GPESklearn`
* Changed Exception format in `GPE` class to more specific Exceptions 
* Extend `Inputs.add_marginals` to allow direct setting of marginal properties
* Move Sobol' calculation to `PCE.calculate_sobol`
* Clean `PostProcessing` class and update for general `MetaModel` objects
* Split `BayesInference`class into `BayesInference`, template class `PostSampler` and child class `RejectionSampler`
* Class `MCMC` child class of `PostSampler`
* Split `BayesInference.create_inference()` into `BayesInference.run_inference()`and `BayesInference.run_validation()`
* Plot in `PCE.adaptive_regression` is saved automatically
* Moved `adaptPlot()` to be `Engine.plot_adapt()`

Renaming
* Renamed attributes of classes `BayesInference`, `BMC`, `MCMC`, `SeqDesign` and `Engine` following from structure reworking
* Renamed attribues and functions to snake-style naming: 
    * `*.Discrepancy` to `*.discrepancy`
    * `surrogate_models.py` to `meta_model.py` 
    * `*.MetaModel` to `*.meta_model`
    * `*.ExpDesign` to `*.exp_design`
    * `*.Model` to `*.model`
    * `*LCerror` to `*lc_error`
    * `*.InputSpace` to `*.input_space`
    * `*.Marginals` to `*.marginals`
    * `*.Rosenblatt` to `*.rosenblatt`
    * `*.add_InputSpace` to `*.add_input_space`
    * `*.InputObj` to `*.input_object`
    * `*.JDist` to `*.j_dist`
    * `._autoSelect` to `*._auto_select`
    * `ExpDesigns.generate_ED` to `ExpDesigns.generate_ed`
    * `ExpDesigns.X` to `ExpDesigns.x`
    * `ExpDesigns.Y` to `ExpDesigns.y`
    * `PyLinkForwardModel.Output` to `PyLinkForwardModel.output`
* Class `auto_vivification` to `AutoVivification`

Bug fixes
* `ExpDesign` always uses user-defined samples when given
* `ExpDesign` n_init_samples can be user-defined
* Fixed pce-loocv calculation for few training samples
* Two-step coefficient estimation for `LARS` PCE training options

### Removed
* Input `n_samples` for `ExpDesign.generate_ED()`
* Reduced `Discrepancy` options to only `total_sigma2`

## [1.1.0]
### Requirements
* numpy >= 1.23.5

### Added
Features
* class `SeqDesign` for sequential training
* `Engine` can be built without a surrogate
* `BayesInference` and `BayesModelComparison` can be performed on an `Engine` object without a surrogate

Examples
* Example `user_guide` to go along with the user guide on the website
* Example `principal_component_analysis` to show application of pca on metamodel outputs
* Example 'only_model' for use of inference and model comparison without a metamodel

### Changed
* Moved functions for sequential training from `Engine` to `SeqDesign`
* Moved `hellinger_distance`, `logpdf`, `subdomain` into `surrogate_models/seq_design`
* Early stop in `BayesInf` for improved performance of `BayesModelComp`
* Allow singular matrices in exploitation with `BayesActDesign` 
* `ExpDesign.generate_ED` no longer needs `transform`

Bug fixes
* Import of `ExpDesign` allowed
* Images in `PostProcessing` only saved, not opened
* Fixed option `MetaModel.dim_red_method = 'pca'`


### Removed
* Disabled exploration with `voronoi`
* `BayesModelComp.just_n_meas`

## [1.0.0]
### Requirements
* numpy now at 1.23.3
* ....

### Added
Features
* PyLinkForwardModel has new link_type 'umbridge' for UM-Bridge type models
* class `InputSpace` as parent class to `ExpDesigns`
* `MetaModel` has option to train with OLS+constraints

Examples
* Example `umbridge_tsunamitutorial` to show two options of using UM-Bridge type models
* Example `convergence_tests` for the constraints

### Changed
General
* Independent functions moved out of classes
* Constructors of `PostProcessing`, `BayesInference`, `BayesModelComp` are to be given the engine instead of the metamodel
* Constructor of `Exploration` to be given `ExpDesigns` instead of `MetaModel`

Engine
* `MetaModelEngine` renamed to `Engine`
* Split `run()` into `train_normal()` and `train_sequential()`
* `opt_SeqDesign()` renamed to `choose_next_sample()`

MetaModel
* `MetaModel` fully independent of model
* `MetaModel` uses `InputSpace` instead of `ExpDesigns`
* `create_metamodel()` split into `build_metamodel()` and `fit()`
* `fit()` renamed to `regression()`
* `eval_metamodel()` only runs on given samples, full functionality retained in `Engine.eval_metamodel()`
* Polynomial related functions moved from `MetaModelEngine` to `MetaModel`

PyLinkForwardModel
* Read-in of MC-references now performed by `PyLinkForwardModel.read_observation()`

ExpDesigns
* Parameters related to sequential training were moved from `MetaModel` to `ExpDesigns` (`Seq*`, `valid_model_runs`)
 
### Removed
* Class `SequentialDesign`
* `ExpDesigns.method` 
* `MetaModel.create_basis_indices()`