- **Release highlight:** Heterogeneous treatment effects (GATE, CATE, Quantile effects, ...)
- Add out-of-sample RMSE and targets for nuisance elements and implement nuisance estimation
evaluation via `evaluate_learners()`. [182](https://github.com/DoubleML/doubleml-for-py/pull/182) [#188](https://github.com/DoubleML/doubleml-for-py/pull/188)
- Implement `gate()` and `cate()` methods for `DoubleMLIRM` class. Both are
based on the new `DoubleMLBLP` class. [169](https://github.com/DoubleML/doubleml-for-py/pull/169)
- Implement different type of quantile models [179](https://github.com/DoubleML/doubleml-for-py/pull/179)
- Potential quantiles (PQ) in class `DoubleMLPQ`
- Local potential quantiles (LPQ) in class `DoubleMLLPQ`
- Conditional value at risk (CVaR) in class `DoubleMLCVAR`
- Quantile treatment effects (QTE) in class `DoubleMLQTE`
- Extend clustering to nonlinear scores [190](https://github.com/DoubleML/doubleml-for-py/pull/190)
- Add `ipw_normalization` option to `DoubleMLIRM` and `DoubleMLIIVM` [186](https://github.com/DoubleML/doubleml-for-py/pull/186)
- Implement an abstract base class for data backends [173](https://github.com/DoubleML/doubleml-for-py/pull/173)
- Code refactorings, bug fixes, docu updates, unit test extensions and continuous integration [183](https://github.com/DoubleML/doubleml-for-py/pull/183) [#192](https://github.com/DoubleML/doubleml-for-py/pull/192) [#195](https://github.com/DoubleML/doubleml-for-py/pull/195) [#196](https://github.com/DoubleML/doubleml-for-py/pull/196)
- Change License to BSD 3-Clause [198](https://github.com/DoubleML/doubleml-for-py/pull/198)
- Maintenance [174](https://github.com/DoubleML/doubleml-for-py/pull/174) [#178](https://github.com/DoubleML/doubleml-for-py/pull/178) [#181](https://github.com/DoubleML/doubleml-for-py/pull/181)