openstef 4.2.2__tar.gz → 4.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. {openstef-4.2.2 → openstef-4.3.0}/PKG-INFO +15 -15
  2. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/guides/probabilistic_forecasting.rst +38 -1
  3. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/quantile_calibration.ipynb +113 -27
  4. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/quantile_calibration.py +88 -25
  5. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/pyproject.toml +1 -1
  6. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/metrics/metrics_deterministic.py +70 -9
  7. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/test_timeseries_visualization.py +7 -2
  8. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/metrics/test_metrics_deterministic.py +35 -0
  9. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/pyproject.toml +2 -3
  10. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/datasets/test_timeseries_dataset.py +5 -0
  11. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/pyproject.toml +1 -1
  12. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/pyproject.toml +1 -1
  13. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/conftest.py +1 -1
  14. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/pyproject.toml +1 -1
  15. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/mlflow/mlflow_storage.py +44 -3
  16. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/median_forecaster.py +4 -1
  17. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/presets/forecasting_workflow.py +16 -1
  18. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/postprocessing/__init__.py +7 -1
  19. openstef-4.3.0/packages/openstef-models/src/openstef_models/transforms/postprocessing/conformalized_quantile_calibrator.py +115 -0
  20. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/utils/data_split.py +1 -1
  21. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/mlflow/test_mlflow_storage.py +20 -1
  22. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/conftest.py +1 -1
  23. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_median_forecaster.py +6 -1
  24. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_dimensionality_reducer.py +1 -1
  25. openstef-4.3.0/packages/openstef-models/tests/unit/transforms/postprocessing/test_conformalized_quantile_calibrator.py +141 -0
  26. {openstef-4.2.2 → openstef-4.3.0}/pyproject.toml +15 -15
  27. {openstef-4.2.2 → openstef-4.3.0}/uv.lock +65 -70
  28. {openstef-4.2.2 → openstef-4.3.0}/.github/CODEOWNERS +0 -0
  29. {openstef-4.2.2 → openstef-4.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {openstef-4.2.2 → openstef-4.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  31. {openstef-4.2.2 → openstef-4.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  32. {openstef-4.2.2 → openstef-4.3.0}/.github/ISSUE_TEMPLATE/task.md +0 -0
  33. {openstef-4.2.2 → openstef-4.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  34. {openstef-4.2.2 → openstef-4.3.0}/.github/dependabot.yml +0 -0
  35. {openstef-4.2.2 → openstef-4.3.0}/.github/pr-labeler.yml +0 -0
  36. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/_job_quality_check.yaml +0 -0
  37. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/check.yaml +0 -0
  38. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/citations.yaml +0 -0
  39. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/codeql.yaml +0 -0
  40. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/docs-check.yaml +0 -0
  41. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/docs.yaml +0 -0
  42. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/pr-labeler.yaml +0 -0
  43. {openstef-4.2.2 → openstef-4.3.0}/.github/workflows/release-v4.yaml +0 -0
  44. {openstef-4.2.2 → openstef-4.3.0}/.gitignore +0 -0
  45. {openstef-4.2.2 → openstef-4.3.0}/.python-version +0 -0
  46. {openstef-4.2.2 → openstef-4.3.0}/CITATION.cff +0 -0
  47. {openstef-4.2.2 → openstef-4.3.0}/COMMITTERS.md +0 -0
  48. {openstef-4.2.2 → openstef-4.3.0}/LICENSE.md +0 -0
  49. {openstef-4.2.2 → openstef-4.3.0}/LICENSES/MPL-2.0.txt +0 -0
  50. {openstef-4.2.2 → openstef-4.3.0}/README.md +0 -0
  51. {openstef-4.2.2 → openstef-4.3.0}/REUSE.toml +0 -0
  52. {openstef-4.2.2 → openstef-4.3.0}/THIRD_PARTY_NOTICES.md +0 -0
  53. {openstef-4.2.2 → openstef-4.3.0}/docs/.gitkeep +0 -0
  54. {openstef-4.2.2 → openstef-4.3.0}/docs/README.md +0 -0
  55. {openstef-4.2.2 → openstef-4.3.0}/docs/automation.yml +0 -0
  56. {openstef-4.2.2 → openstef-4.3.0}/docs/autosummary_cache.py +0 -0
  57. {openstef-4.2.2 → openstef-4.3.0}/docs/autosummary_helpers.py +0 -0
  58. {openstef-4.2.2 → openstef-4.3.0}/docs/pages.yml +0 -0
  59. {openstef-4.2.2 → openstef-4.3.0}/docs/pyproject.toml +0 -0
  60. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_figures/generate_concept_figures.py +0 -0
  61. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_figures/generate_guide_figures.py +0 -0
  62. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_static/css/.gitkeep +0 -0
  63. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_static/css/custom.css +0 -0
  64. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_static/versions.json +0 -0
  65. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_static/versions.json.license +0 -0
  66. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_templates/custom_class.rst +0 -0
  67. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_templates/custom_class_noindex.rst +0 -0
  68. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_templates/custom_function.rst +0 -0
  69. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_templates/module_overview.rst +0 -0
  70. {openstef-4.2.2 → openstef-4.3.0}/docs/source/_templates/package_overview.rst +0 -0
  71. {openstef-4.2.2 → openstef-4.3.0}/docs/source/api/beam.rst +0 -0
  72. {openstef-4.2.2 → openstef-4.3.0}/docs/source/api/core.rst +0 -0
  73. {openstef-4.2.2 → openstef-4.3.0}/docs/source/api/foundation_models.rst +0 -0
  74. {openstef-4.2.2 → openstef-4.3.0}/docs/source/api/index.rst +0 -0
  75. {openstef-4.2.2 → openstef-4.3.0}/docs/source/api/meta.rst +0 -0
  76. {openstef-4.2.2 → openstef-4.3.0}/docs/source/api/models.rst +0 -0
  77. {openstef-4.2.2 → openstef-4.3.0}/docs/source/conf.py +0 -0
  78. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/_getting_help.rst +0 -0
  79. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/code_of_conduct.rst +0 -0
  80. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/code_style_guide.rst +0 -0
  81. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/contributing_guide.rst +0 -0
  82. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/development_setup.rst +0 -0
  83. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/development_workflow.rst +0 -0
  84. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/document.rst +0 -0
  85. {openstef-4.2.2 → openstef-4.3.0}/docs/source/contribute/index.rst +0 -0
  86. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/beam_diagram_1.mmd +0 -0
  87. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/beam_diagram_1.mmd.license +0 -0
  88. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/component_splitting_diagram_1.mmd +0 -0
  89. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/component_splitting_diagram_1.mmd.license +0 -0
  90. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/intro_to_energy_forecasting_diagram_1.mmd +0 -0
  91. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/intro_to_energy_forecasting_diagram_1.mmd.license +0 -0
  92. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/metalearning_diagram_1.mmd +0 -0
  93. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/metalearning_diagram_1.mmd.license +0 -0
  94. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/metalearning_diagram_2.mmd +0 -0
  95. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/metalearning_diagram_2.mmd.license +0 -0
  96. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/metalearning_diagram_3.mmd +0 -0
  97. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/metalearning_diagram_3.mmd.license +0 -0
  98. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/models_diagram_1.mmd +0 -0
  99. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/concepts/models_diagram_1.mmd.license +0 -0
  100. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/getting_started/migration_diagram_1.mmd +0 -0
  101. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/getting_started/migration_diagram_1.mmd.license +0 -0
  102. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/datasets_diagram_1.mmd +0 -0
  103. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/datasets_diagram_1.mmd.license +0 -0
  104. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/datasets_diagram_2.mmd +0 -0
  105. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/datasets_diagram_2.mmd.license +0 -0
  106. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/deployment_diagram_1.mmd +0 -0
  107. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/deployment_diagram_1.mmd.license +0 -0
  108. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/deployment_diagram_2.mmd +0 -0
  109. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/deployment_diagram_2.mmd.license +0 -0
  110. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/forecasting_diagram_1.mmd +0 -0
  111. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/forecasting_diagram_1.mmd.license +0 -0
  112. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/probabilistic_forecasting_diagram_1.mmd +0 -0
  113. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/probabilistic_forecasting_diagram_1.mmd.license +0 -0
  114. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/reliability_fallback_diagram_1.mmd +0 -0
  115. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/reliability_fallback_diagram_1.mmd.license +0 -0
  116. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/reliability_fallback_diagram_2.mmd +0 -0
  117. {openstef-4.2.2 → openstef-4.3.0}/docs/source/diagrams/user_guide/guides/reliability_fallback_diagram_2.mmd.license +0 -0
  118. {openstef-4.2.2 → openstef-4.3.0}/docs/source/examples.rst +0 -0
  119. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/aggregation_comparison.svg +0 -0
  120. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/aggregation_comparison.svg.license +0 -0
  121. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/backtesting_simulation.gif +0 -0
  122. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/backtesting_simulation.gif.license +0 -0
  123. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/forecast_confidence_bands.svg +0 -0
  124. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/forecast_confidence_bands.svg.license +0 -0
  125. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/weekly_load_profile.svg +0 -0
  126. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/concepts/weekly_load_profile.svg.license +0 -0
  127. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/calibration_plot.svg +0 -0
  128. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/calibration_plot.svg.license +0 -0
  129. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/flatline_detection.svg +0 -0
  130. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/flatline_detection.svg.license +0 -0
  131. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/liander2024_rcrps_by_group.png +0 -0
  132. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/liander2024_rcrps_by_group.png.license +0 -0
  133. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/probabilistic_fan_chart.svg +0 -0
  134. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/guides/probabilistic_fan_chart.svg.license +0 -0
  135. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/methodology_train_predict.pptx +0 -0
  136. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/methodology_train_predict.pptx.license +0 -0
  137. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/methodology_train_predict.svg +0 -0
  138. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/methodology_train_predict.svg.license +0 -0
  139. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/uncertainty_estimation.svg +0 -0
  140. {openstef-4.2.2 → openstef-4.3.0}/docs/source/images/uncertainty_estimation.svg.license +0 -0
  141. {openstef-4.2.2 → openstef-4.3.0}/docs/source/index.rst +0 -0
  142. {openstef-4.2.2 → openstef-4.3.0}/docs/source/js/.gitkeep +0 -0
  143. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/favicon.ico +0 -0
  144. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/favicon.ico.license +0 -0
  145. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/logo_openstef_small.png +0 -0
  146. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/logo_openstef_small.png.license +0 -0
  147. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/openstef-horizontal-color.svg +0 -0
  148. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/openstef-horizontal-color.svg.license +0 -0
  149. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/openstef-horizontal-white.svg +0 -0
  150. {openstef-4.2.2 → openstef-4.3.0}/docs/source/logos/openstef-horizontal-white.svg.license +0 -0
  151. {openstef-4.2.2 → openstef-4.3.0}/docs/source/project/citing.rst +0 -0
  152. {openstef-4.2.2 → openstef-4.3.0}/docs/source/project/governance.rst +0 -0
  153. {openstef-4.2.2 → openstef-4.3.0}/docs/source/project/index.rst +0 -0
  154. {openstef-4.2.2 → openstef-4.3.0}/docs/source/project/license.rst +0 -0
  155. {openstef-4.2.2 → openstef-4.3.0}/docs/source/project/support.rst +0 -0
  156. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/concepts/beam.rst +0 -0
  157. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/concepts/component_splitting.rst +0 -0
  158. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/concepts/foundation_models.rst +0 -0
  159. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/concepts/index.rst +0 -0
  160. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/concepts/intro_to_energy_forecasting.rst +0 -0
  161. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/concepts/metalearning.rst +0 -0
  162. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/concepts/models.rst +0 -0
  163. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/external_resources.rst +0 -0
  164. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/getting_started/index.rst +0 -0
  165. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/getting_started/installation.rst +0 -0
  166. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/getting_started/migration.rst +0 -0
  167. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/guides/benchmark_results.rst +0 -0
  168. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/guides/deployment.rst +0 -0
  169. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/guides/forecasting.rst +0 -0
  170. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/guides/index.rst +0 -0
  171. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/guides/reliability_fallback.rst +0 -0
  172. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/index.rst +0 -0
  173. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/intro/index.rst +0 -0
  174. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/intro/methodology_train_predict.rst +0 -0
  175. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/logging.rst +0 -0
  176. {openstef-4.2.2 → openstef-4.3.0}/docs/source/user_guide/tutorials.rst +0 -0
  177. {openstef-4.2.2 → openstef-4.3.0}/docs/sync_sources.py +0 -0
  178. {openstef-4.2.2 → openstef-4.3.0}/examples/.gitkeep +0 -0
  179. {openstef-4.2.2 → openstef-4.3.0}/examples/README.md +0 -0
  180. {openstef-4.2.2 → openstef-4.3.0}/examples/__init__.py +0 -0
  181. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/README.md +0 -0
  182. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/__init__.py +0 -0
  183. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/README.md +0 -0
  184. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/__init__.py +0 -0
  185. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/compare_benchmark_runs.ipynb +0 -0
  186. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/compare_benchmark_runs.ipynb.license +0 -0
  187. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/compare_benchmark_runs.py +0 -0
  188. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/custom_benchmark.ipynb +0 -0
  189. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/custom_benchmark.ipynb.license +0 -0
  190. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/custom_benchmark.py +0 -0
  191. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/custom_forecaster.ipynb +0 -0
  192. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/custom_forecaster.ipynb.license +0 -0
  193. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/custom_forecaster.py +0 -0
  194. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/evaluate_existing_forecasts.ipynb +0 -0
  195. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/evaluate_existing_forecasts.ipynb.license +0 -0
  196. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/evaluate_existing_forecasts.py +0 -0
  197. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/run_custom_benchmark.ipynb +0 -0
  198. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/run_custom_benchmark.ipynb.license +0 -0
  199. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/run_custom_benchmark.py +0 -0
  200. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/run_liander2024_benchmark.ipynb +0 -0
  201. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/run_liander2024_benchmark.ipynb.license +0 -0
  202. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/custom/run_liander2024_benchmark.py +0 -0
  203. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/README.md +0 -0
  204. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/__init__.py +0 -0
  205. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/compare_benchmark_runs.ipynb +0 -0
  206. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/compare_benchmark_runs.ipynb.license +0 -0
  207. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/compare_benchmark_runs.py +0 -0
  208. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_chronos2_benchmark.ipynb +0 -0
  209. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_chronos2_benchmark.ipynb.license +0 -0
  210. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_chronos2_benchmark.py +0 -0
  211. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_ensemble_benchmark.ipynb +0 -0
  212. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_ensemble_benchmark.ipynb.license +0 -0
  213. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_ensemble_benchmark.py +0 -0
  214. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_xgboost_gblinear_benchmark.ipynb +0 -0
  215. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_xgboost_gblinear_benchmark.ipynb.license +0 -0
  216. {openstef-4.2.2 → openstef-4.3.0}/examples/benchmarks/liander2024/run_xgboost_gblinear_benchmark.py +0 -0
  217. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/.gitignore +0 -0
  218. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/README.md +0 -0
  219. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/poe_tasks.toml +0 -0
  220. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/pyproject.toml +0 -0
  221. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/airflow_app/__init__.py +0 -0
  222. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/airflow_app/dags/openstef_forecast.py +0 -0
  223. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/airflow_app/dags/openstef_train.py +0 -0
  224. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/celery_app/__init__.py +0 -0
  225. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/celery_app/app.py +0 -0
  226. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/celery_app/run.py +0 -0
  227. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/celery_app/tasks.py +0 -0
  228. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/common/__init__.py +0 -0
  229. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/common/config.py +0 -0
  230. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/common/pipeline.py +0 -0
  231. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/common/services.py +0 -0
  232. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/dagster_app/__init__.py +0 -0
  233. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/dagster_app/definitions.py +0 -0
  234. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/src/dagster_app/run.py +0 -0
  235. {openstef-4.2.2 → openstef-4.3.0}/examples/deployment/tests/test_deployment.py +0 -0
  236. {openstef-4.2.2 → openstef-4.3.0}/examples/pyproject.toml +0 -0
  237. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/.gitignore +0 -0
  238. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/backtesting_quickstart.ipynb +0 -0
  239. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/backtesting_quickstart.py +0 -0
  240. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/custom_pipeline.ipynb +0 -0
  241. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/custom_pipeline.py +0 -0
  242. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/datasets.py +0 -0
  243. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/ensemble_forecasting.ipynb +0 -0
  244. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/ensemble_forecasting.py +0 -0
  245. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/feature_engineering.ipynb +0 -0
  246. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/feature_engineering.py +0 -0
  247. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/forecasting_quickstart.ipynb +0 -0
  248. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/forecasting_quickstart.py +0 -0
  249. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/foundation_model_forecasting.ipynb +0 -0
  250. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/foundation_model_forecasting.py +0 -0
  251. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/foundation_model_forecasting_quickstart.ipynb +0 -0
  252. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/foundation_model_forecasting_quickstart.py +0 -0
  253. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/hyperparameter_tuning_with_optuna.ipynb +0 -0
  254. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/hyperparameter_tuning_with_optuna.py +0 -0
  255. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/model_explainability.ipynb +0 -0
  256. {openstef-4.2.2 → openstef-4.3.0}/examples/tutorials/model_explainability.py +0 -0
  257. {openstef-4.2.2 → openstef-4.3.0}/jupytext.toml +0 -0
  258. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/README.md +0 -0
  259. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/__init__.py +0 -0
  260. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/__init__.py +0 -0
  261. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/analysis_pipeline.py +0 -0
  262. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/models/__init__.py +0 -0
  263. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/models/target_metadata.py +0 -0
  264. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/models/visualization_aggregation.py +0 -0
  265. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/models/visualization_output.py +0 -0
  266. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/__init__.py +0 -0
  267. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/forecast_time_series_plotter.py +0 -0
  268. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/grouped_target_metric_plotter.py +0 -0
  269. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/precision_recall_curve_plotter.py +0 -0
  270. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/quantile_calibration_box_plotter.py +0 -0
  271. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/quantile_probability_plotter.py +0 -0
  272. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/summary_table_plotter.py +0 -0
  273. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/plots/windowed_metric_plotter.py +0 -0
  274. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/__init__.py +0 -0
  275. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/base.py +0 -0
  276. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/grouped_target_metric_visualization.py +0 -0
  277. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/precision_recall_curve_visualization.py +0 -0
  278. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/quantile_calibration_box_visualization.py +0 -0
  279. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/quantile_probability_visualization.py +0 -0
  280. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/summary_table_visualization.py +0 -0
  281. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/timeseries_visualization.py +0 -0
  282. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/analysis/visualizations/windowed_metric_visualization.py +0 -0
  283. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/__init__.py +0 -0
  284. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/backtest_callback.py +0 -0
  285. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/backtest_event.py +0 -0
  286. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/backtest_event_generator.py +0 -0
  287. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/backtest_forecaster/__init__.py +0 -0
  288. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/backtest_forecaster/dummy_forecaster.py +0 -0
  289. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/backtest_forecaster/mixins.py +0 -0
  290. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/backtest_pipeline.py +0 -0
  291. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/backtesting/restricted_horizon_timeseries.py +0 -0
  292. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/__init__.py +0 -0
  293. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/baselines/__init__.py +0 -0
  294. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/baselines/openstef4.py +0 -0
  295. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/benchmark_comparison_pipeline.py +0 -0
  296. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/benchmark_pipeline.py +0 -0
  297. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/benchmarks/__init__.py +0 -0
  298. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/benchmarks/liander2024.py +0 -0
  299. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/callbacks/__init__.py +0 -0
  300. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/callbacks/base.py +0 -0
  301. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/callbacks/strict_execution_callback.py +0 -0
  302. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/models/__init__.py +0 -0
  303. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/models/benchmark_target.py +0 -0
  304. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/storage/__init__.py +0 -0
  305. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/storage/base.py +0 -0
  306. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/storage/local_storage.py +0 -0
  307. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/storage/s3_storage.py +0 -0
  308. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/benchmarking/target_provider.py +0 -0
  309. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/__init__.py +0 -0
  310. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/evaluation_pipeline.py +0 -0
  311. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/metric_providers.py +0 -0
  312. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/models/__init__.py +0 -0
  313. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/models/report.py +0 -0
  314. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/models/subset.py +0 -0
  315. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/models/window.py +0 -0
  316. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/evaluation/window_iterators.py +0 -0
  317. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/metrics/__init__.py +0 -0
  318. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/metrics/metrics_helpers.py +0 -0
  319. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/src/openstef_beam/metrics/metrics_probabilistic.py +0 -0
  320. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/__init__.py +0 -0
  321. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/__init__.py +0 -0
  322. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/__init__.py +0 -0
  323. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/__init__.py +0 -0
  324. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/test_forecast_time_series_plotter.py +0 -0
  325. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/test_grouped_target_metric_plotter.py +0 -0
  326. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/test_precision_recall_curve_plotter.py +0 -0
  327. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/test_quantile_calibration_box_plotter.py +0 -0
  328. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/test_quantile_probability_plotter.py +0 -0
  329. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/test_summary_table_plotter.py +0 -0
  330. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/plots/test_windowed_metric_plotter.py +0 -0
  331. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/test_analysis_pipeline.py +0 -0
  332. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/__init__.py +0 -0
  333. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/conftest.py +0 -0
  334. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/test_grouped_target_metric_visualization.py +0 -0
  335. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/test_precision_recall_curve_visualization.py +0 -0
  336. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/test_quantile_calibration_box_visualization.py +0 -0
  337. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/test_quantile_probability_visualization.py +0 -0
  338. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/test_summary_table_visualization.py +0 -0
  339. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/analysis/visualizations/test_windowed_metric_visualization.py +0 -0
  340. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/backtesting/__init__.py +0 -0
  341. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/backtesting/test_backtest_event_generator.py +0 -0
  342. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/backtesting/test_backtest_pipeline.py +0 -0
  343. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/backtesting/test_batch_prediction.py +0 -0
  344. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/__init__.py +0 -0
  345. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/baselines/__init__.py +0 -0
  346. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/baselines/test_openstef4.py +0 -0
  347. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/storage/__init__.py +0 -0
  348. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/storage/test_local_storage.py +0 -0
  349. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/storage/test_s3_storage.py +0 -0
  350. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/test_benchmark_pipeline.py +0 -0
  351. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/benchmarking/test_target_provider.py +0 -0
  352. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/evaluation/__init__.py +0 -0
  353. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/evaluation/models/__init__.py +0 -0
  354. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/evaluation/models/test_window.py +0 -0
  355. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/evaluation/test_evaluation_pipeline.py +0 -0
  356. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/evaluation/test_metric_provider.py +0 -0
  357. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/evaluation/test_window_iterators.py +0 -0
  358. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/metrics/__init__.py +0 -0
  359. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/metrics/test_metrics_helpers.py +0 -0
  360. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/unit/metrics/test_metrics_probabilistic.py +0 -0
  361. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/utils/__init__.py +0 -0
  362. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-beam/tests/utils/mocks.py +0 -0
  363. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/README.md +0 -0
  364. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/__init__.py +0 -0
  365. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/base_model.py +0 -0
  366. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/constants.py +0 -0
  367. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/datasets/__init__.py +0 -0
  368. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/datasets/mixins.py +0 -0
  369. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/datasets/timeseries_dataset.py +0 -0
  370. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/datasets/validated_datasets.py +0 -0
  371. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/datasets/validation.py +0 -0
  372. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/datasets/versioned_timeseries_dataset.py +0 -0
  373. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/exceptions.py +0 -0
  374. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/mixins/__init__.py +0 -0
  375. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/mixins/param_ranges.py +0 -0
  376. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/mixins/predictor.py +0 -0
  377. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/mixins/stateful.py +0 -0
  378. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/mixins/transform.py +0 -0
  379. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/testing.py +0 -0
  380. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/transforms/__init__.py +0 -0
  381. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/transforms/dataset_transforms.py +0 -0
  382. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/types.py +0 -0
  383. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/__init__.py +0 -0
  384. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/datetime.py +0 -0
  385. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/invariants.py +0 -0
  386. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/itertools.py +0 -0
  387. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/multiprocessing.py +0 -0
  388. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/numpy.py +0 -0
  389. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/pandas.py +0 -0
  390. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/src/openstef_core/utils/pydantic.py +0 -0
  391. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/__init__.py +0 -0
  392. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/__init__.py +0 -0
  393. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/datasets/__init__.py +0 -0
  394. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/datasets/test_mixins.py +0 -0
  395. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/datasets/test_validated_datasets.py +0 -0
  396. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/datasets/test_validation.py +0 -0
  397. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/datasets/test_versioned_timeseries_dataset.py +0 -0
  398. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/datasets/utils.py +0 -0
  399. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/mixins/__init__.py +0 -0
  400. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/mixins/test_stateful.py +0 -0
  401. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/mixins/test_transform.py +0 -0
  402. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/test_base_model.py +0 -0
  403. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/test_hyperparams_tuning.py +0 -0
  404. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/test_param_ranges.py +0 -0
  405. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/test_types.py +0 -0
  406. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/transforms/__init__.py +0 -0
  407. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/utils/__init__.py +0 -0
  408. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/utils/test_datetime.py +0 -0
  409. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/utils/test_itertools.py +0 -0
  410. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/utils/test_multiprocessing.py +0 -0
  411. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/utils/test_numpy.py +0 -0
  412. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-core/tests/unit/utils/test_pandas.py +0 -0
  413. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/README.md +0 -0
  414. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/__init__.py +0 -0
  415. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/inference/__init__.py +0 -0
  416. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/inference/backend.py +0 -0
  417. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/inference/onnx_backend.py +0 -0
  418. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/inference/provider_selection.py +0 -0
  419. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/inference/providers.py +0 -0
  420. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/integrations/__init__.py +0 -0
  421. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/integrations/beam.py +0 -0
  422. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/models/__init__.py +0 -0
  423. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/models/catalog.py +0 -0
  424. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/models/checkpoint.py +0 -0
  425. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/models/forecasting/__init__.py +0 -0
  426. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/models/forecasting/chronos2_forecaster.py +0 -0
  427. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/presets/__init__.py +0 -0
  428. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/src/openstef_foundation_models/presets/forecasting_workflow.py +0 -0
  429. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/__init__.py +0 -0
  430. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/integration/__init__.py +0 -0
  431. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/integration/conftest.py +0 -0
  432. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/integration/test_beam_integration.py +0 -0
  433. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/integration/test_chronos2_onnx.py +0 -0
  434. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/__init__.py +0 -0
  435. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/inference/__init__.py +0 -0
  436. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/inference/test_onnx_backend.py +0 -0
  437. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/inference/test_provider_selection.py +0 -0
  438. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/inference/test_providers.py +0 -0
  439. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/integrations/__init__.py +0 -0
  440. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/integrations/test_beam.py +0 -0
  441. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/models/__init__.py +0 -0
  442. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/models/forecasting/__init__.py +0 -0
  443. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/models/forecasting/test_chronos2_forecaster.py +0 -0
  444. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/models/test_catalog.py +0 -0
  445. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/presets/__init__.py +0 -0
  446. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-foundation-models/tests/unit/presets/test_forecasting_workflow.py +0 -0
  447. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/README.md +0 -0
  448. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/__init__.py +0 -0
  449. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/models/__init__.py +0 -0
  450. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/models/ensemble_forecasting_model.py +0 -0
  451. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/models/forecast_combiners/__init__.py +0 -0
  452. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/models/forecast_combiners/forecast_combiner.py +0 -0
  453. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/models/forecast_combiners/learned_weights_combiner.py +0 -0
  454. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/models/forecast_combiners/stacking_combiner.py +0 -0
  455. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/presets/__init__.py +0 -0
  456. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/presets/forecasting_workflow.py +0 -0
  457. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/utils/__init__.py +0 -0
  458. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/src/openstef_meta/utils/datasets.py +0 -0
  459. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/integration/__init__.py +0 -0
  460. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/integration/test_ensemble_forecasting_model.py +0 -0
  461. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/integrations/__init__.py +0 -0
  462. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/integrations/test_mlflow_storage_callback_ensemble.py +0 -0
  463. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/__init__.py +0 -0
  464. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/forecast_combiners/__init__.py +0 -0
  465. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/forecast_combiners/conftest.py +0 -0
  466. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/forecast_combiners/test_learned_weights_combiner.py +0 -0
  467. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/forecast_combiners/test_stacking_combiner.py +0 -0
  468. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/forecasting/__init__.py +0 -0
  469. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/models/test_ensemble_forecasting_model.py +0 -0
  470. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/utils/__init__.py +0 -0
  471. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-meta/tests/unit/utils/test_datasets.py +0 -0
  472. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/README.md +0 -0
  473. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/__init__.py +0 -0
  474. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/explainability/__init__.py +0 -0
  475. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/explainability/mixins.py +0 -0
  476. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/explainability/plotters/__init__.py +0 -0
  477. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/explainability/plotters/contributions_plotter.py +0 -0
  478. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/explainability/plotters/feature_importance_plotter.py +0 -0
  479. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/__init__.py +0 -0
  480. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/joblib/__init__.py +0 -0
  481. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/joblib/joblib_model_serializer.py +0 -0
  482. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/mlflow/__init__.py +0 -0
  483. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/mlflow/mlflow_storage_callback.py +0 -0
  484. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/optuna/__init__.py +0 -0
  485. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/integrations/optuna/tuner.py +0 -0
  486. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/mixins/__init__.py +0 -0
  487. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/mixins/callbacks.py +0 -0
  488. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/mixins/model_serializer.py +0 -0
  489. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/__init__.py +0 -0
  490. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/component_splitting/__init__.py +0 -0
  491. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/component_splitting/component_splitter.py +0 -0
  492. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/component_splitting/constant_component_splitter.py +0 -0
  493. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/component_splitting/linear_component_splitter.py +0 -0
  494. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/component_splitting/linear_component_splitter_model/linear_component_splitter_model.z +0 -0
  495. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/component_splitting/linear_component_splitter_model/linear_component_splitter_model.z.license +0 -0
  496. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/component_splitting_model.py +0 -0
  497. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/__init__.py +0 -0
  498. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/base_case_forecaster.py +0 -0
  499. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/constant_quantile_forecaster.py +0 -0
  500. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/flatliner_forecaster.py +0 -0
  501. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/forecaster.py +0 -0
  502. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/gblinear_forecaster.py +0 -0
  503. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/lgbm_forecaster.py +0 -0
  504. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/lgbmlinear_forecaster.py +0 -0
  505. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting/xgboost_forecaster.py +0 -0
  506. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/models/forecasting_model.py +0 -0
  507. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/presets/__init__.py +0 -0
  508. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/testing.py +0 -0
  509. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/__init__.py +0 -0
  510. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/energy_domain/__init__.py +0 -0
  511. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/energy_domain/wind_power_feature_adder.py +0 -0
  512. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/__init__.py +0 -0
  513. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/dimensionality_reducer.py +0 -0
  514. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/empty_feature_remover.py +0 -0
  515. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/flagger.py +0 -0
  516. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/imputer.py +0 -0
  517. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/nan_dropper.py +0 -0
  518. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/outlier_handler.py +0 -0
  519. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/sample_weighter.py +0 -0
  520. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/scaler.py +0 -0
  521. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/selector.py +0 -0
  522. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/general/shifter.py +0 -0
  523. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/postprocessing/confidence_interval_applicator.py +0 -0
  524. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/postprocessing/isotonic_quantile_calibrator.py +0 -0
  525. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/postprocessing/quantile_sorter.py +0 -0
  526. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/time_domain/__init__.py +0 -0
  527. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/time_domain/cyclic_features_adder.py +0 -0
  528. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/time_domain/datetime_features_adder.py +0 -0
  529. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/time_domain/holiday_features_adder.py +0 -0
  530. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/time_domain/lags_adder.py +0 -0
  531. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/time_domain/rolling_aggregates_adder.py +0 -0
  532. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/time_domain/versioned_lags_adder.py +0 -0
  533. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/validation/__init__.py +0 -0
  534. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/validation/completeness_checker.py +0 -0
  535. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/validation/flatline_checker.py +0 -0
  536. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/validation/input_consistency_checker.py +0 -0
  537. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/weather_domain/__init__.py +0 -0
  538. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/weather_domain/atmosphere_derived_features_adder.py +0 -0
  539. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/weather_domain/daylight_feature_adder.py +0 -0
  540. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/transforms/weather_domain/radiation_derived_features_adder.py +0 -0
  541. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/utils/__init__.py +0 -0
  542. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/utils/evaluation_functions.py +0 -0
  543. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/utils/feature_selection.py +0 -0
  544. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/utils/loss_functions.py +0 -0
  545. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/utils/multi_quantile_regressor.py +0 -0
  546. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/utils/xgboost.py +0 -0
  547. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/workflows/__init__.py +0 -0
  548. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/workflows/callbacks/__init__.py +0 -0
  549. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/workflows/callbacks/data_save.py +0 -0
  550. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/workflows/callbacks/model_performance_callback.py +0 -0
  551. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/workflows/custom_component_split_workflow.py +0 -0
  552. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/src/openstef_models/workflows/custom_forecasting_workflow.py +0 -0
  553. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/__init__.py +0 -0
  554. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/integration/__init__.py +0 -0
  555. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/integration/test_integration.py +0 -0
  556. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/__init__.py +0 -0
  557. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/explainability/__init__.py +0 -0
  558. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/explainability/plotters/__init__.py +0 -0
  559. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/explainability/plotters/test_contributions_plotter.py +0 -0
  560. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/__init__.py +0 -0
  561. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/joblib/__init__.py +0 -0
  562. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/joblib/test_joblib_model_serializer.py +0 -0
  563. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/mlflow/__init__.py +0 -0
  564. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/mlflow/test_mlflow_storage_callback.py +0 -0
  565. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/optuna/__init__.py +0 -0
  566. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/integrations/optuna/test_tuner.py +0 -0
  567. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/__init__.py +0 -0
  568. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/component_splitting/__init__.py +0 -0
  569. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/component_splitting/test_constant_component_splitter.py +0 -0
  570. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/component_splitting/test_linear_component_splitter.py +0 -0
  571. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/__init__.py +0 -0
  572. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_base_case_forecaster.py +0 -0
  573. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_constant_quantile_forecaster.py +0 -0
  574. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_flatliner_forecaster.py +0 -0
  575. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_gblinear_forecaster.py +0 -0
  576. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_lgbm_forecaster.py +0 -0
  577. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_lgbmlinear_forecaster.py +0 -0
  578. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/forecasting/test_xgboost_forecaster.py +0 -0
  579. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/models/test_forecasting_model.py +0 -0
  580. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/test_example.py +0 -0
  581. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/__init__.py +0 -0
  582. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/energy_domain/__init__.py +0 -0
  583. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/energy_domain/test_wind_power_feature_adder.py +0 -0
  584. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/__init__.py +0 -0
  585. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_empty_feature_remover.py +0 -0
  586. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_flagger.py +0 -0
  587. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_imputer.py +0 -0
  588. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_nan_dropper.py +0 -0
  589. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_outlier_handler.py +0 -0
  590. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_sample_weighter.py +0 -0
  591. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_scaler.py +0 -0
  592. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_selector.py +0 -0
  593. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/general/test_shifter.py +0 -0
  594. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/postprocessing/__init__.py +0 -0
  595. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/postprocessing/test_confidence_interval_applicator.py +0 -0
  596. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/postprocessing/test_isotonic_quantile_calibrator.py +0 -0
  597. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/postprocessing/test_quantile_sorter.py +0 -0
  598. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/time_domain/__init__.py +0 -0
  599. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/time_domain/test_cyclic_features_adder.py +0 -0
  600. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/time_domain/test_datetime_features_adder.py +0 -0
  601. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/time_domain/test_holiday_features_adder.py +0 -0
  602. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/time_domain/test_lags_adder.py +0 -0
  603. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/time_domain/test_rolling_aggregates_adder.py +0 -0
  604. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/time_domain/test_versioned_lags_adder.py +0 -0
  605. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/validation/__init__.py +0 -0
  606. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/validation/test_completeness_checker.py +0 -0
  607. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/validation/test_flatline_checker.py +0 -0
  608. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/validation/test_input_consistency_checker.py +0 -0
  609. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/weather_domain/__init__.py +0 -0
  610. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/weather_domain/test_atmosphere_derived_features_adder.py +0 -0
  611. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/weather_domain/test_daylight_feature_adder.py +0 -0
  612. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/transforms/weather_domain/test_radiation_derived_featuers_adder.py +0 -0
  613. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/utils/__init__.py +0 -0
  614. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/utils/test_data_split.py +0 -0
  615. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/utils/test_feature_selection.py +0 -0
  616. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/utils/test_loss_functions.py +0 -0
  617. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/utils/test_multi_quantile_regressor.py +0 -0
  618. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/workflows/__init__.py +0 -0
  619. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/workflows/callbacks/__init__.py +0 -0
  620. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/workflows/callbacks/test_model_performance_callback.py +0 -0
  621. {openstef-4.2.2 → openstef-4.3.0}/packages/openstef-models/tests/unit/workflows/test_custom_forecasting_workflow.py +0 -0
  622. {openstef-4.2.2 → openstef-4.3.0}/poe_tasks.toml +0 -0
  623. {openstef-4.2.2 → openstef-4.3.0}/ruff.toml +0 -0
  624. {openstef-4.2.2 → openstef-4.3.0}/sonar-project.properties +0 -0
  625. {openstef-4.2.2 → openstef-4.3.0}/tools/check_notebook_outputs.py +0 -0
  626. {openstef-4.2.2 → openstef-4.3.0}/tools/reuse-fix.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: openstef
3
- Version: 4.2.2
3
+ Version: 4.3.0
4
4
  Summary: Open Short Term Energy forecasting library
5
5
  Project-URL: Documentation, https://openstef.github.io/openstef/index.html
6
6
  Project-URL: Homepage, https://lfenergy.org/projects/openstef/
@@ -16,26 +16,26 @@ Classifier: Programming Language :: Python :: 3 :: Only
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Requires-Python: <4.0,>=3.12
19
- Requires-Dist: openstef-core==4.2.2
20
- Requires-Dist: openstef-models[xgb-cpu]==4.2.2
19
+ Requires-Dist: openstef-core==4.3.0
20
+ Requires-Dist: openstef-models[xgb-cpu]==4.3.0
21
21
  Provides-Extra: all
22
- Requires-Dist: openstef-beam[all]==4.2.2; extra == 'all'
23
- Requires-Dist: openstef-core==4.2.2; extra == 'all'
24
- Requires-Dist: openstef-foundation-models[cpu]==4.2.2; extra == 'all'
25
- Requires-Dist: openstef-meta==4.2.2; extra == 'all'
26
- Requires-Dist: openstef-models[xgb-cpu]==4.2.2; extra == 'all'
22
+ Requires-Dist: openstef-beam[all]==4.3.0; extra == 'all'
23
+ Requires-Dist: openstef-core==4.3.0; extra == 'all'
24
+ Requires-Dist: openstef-foundation-models[cpu]==4.3.0; extra == 'all'
25
+ Requires-Dist: openstef-meta==4.3.0; extra == 'all'
26
+ Requires-Dist: openstef-models[xgb-cpu]==4.3.0; extra == 'all'
27
27
  Provides-Extra: beam
28
28
  Requires-Dist: huggingface-hub>=0.35.3; extra == 'beam'
29
- Requires-Dist: openstef-beam==4.2.2; extra == 'beam'
29
+ Requires-Dist: openstef-beam==4.3.0; extra == 'beam'
30
30
  Provides-Extra: core
31
- Requires-Dist: openstef-core==4.2.2; extra == 'core'
31
+ Requires-Dist: openstef-core==4.3.0; extra == 'core'
32
32
  Provides-Extra: foundation-models
33
- Requires-Dist: openstef-foundation-models[cpu]==4.2.2; extra == 'foundation-models'
33
+ Requires-Dist: openstef-foundation-models[cpu]==4.3.0; extra == 'foundation-models'
34
34
  Provides-Extra: meta
35
- Requires-Dist: openstef-meta==4.2.2; extra == 'meta'
35
+ Requires-Dist: openstef-meta==4.3.0; extra == 'meta'
36
36
  Provides-Extra: models
37
- Requires-Dist: openstef-meta==4.2.2; extra == 'models'
38
- Requires-Dist: openstef-models[xgb-cpu]==4.2.2; extra == 'models'
37
+ Requires-Dist: openstef-meta==4.3.0; extra == 'models'
38
+ Requires-Dist: openstef-models[xgb-cpu]==4.3.0; extra == 'models'
39
39
  Description-Content-Type: text/markdown
40
40
 
41
41
  <!--
@@ -206,7 +206,44 @@ When ``use_local_quantile_estimation=True``, the calibrator estimates observed q
206
206
 
207
207
  The calibrator must be fitted (via ``workflow.fit()``) before it can be used for prediction. Calling ``predict()`` on a workflow with an unfitted calibrator will raise a :class:`~openstef_core.exceptions.NotFittedError`.
208
208
 
209
- For a complete worked example showing calibration before and after, including diagnostic plots, see :doc:`/tutorials/quantile_calibration`.
209
+ For a complete worked example showing isotonic and asymmetric conformal
210
+ calibration before and after, including diagnostic plots, see
211
+ :doc:`/tutorials/quantile_calibration`.
212
+
213
+ Conformalized Quantile Calibration
214
+ ----------------------------------
215
+
216
+ OpenSTEF also provides a dependency-free
217
+ :class:`~openstef_models.transforms.postprocessing.ConformalizedQuantileCalibrator`
218
+ that implements asymmetric finite-sample conformal calibration. It is a
219
+ postprocessing transform over a
220
+ ``ForecastDataset``:
221
+
222
+ 1. Fit the forecaster and generate forecasts for a time-ordered calibration
223
+ period.
224
+ 2. Fit the calibrator on those forecasts and the corresponding actuals.
225
+ 3. Apply the fitted corrections to later forecast datasets.
226
+
227
+ The correction is asymmetric by tail. For a lower quantile ``q < 0.5``, the
228
+ calibrator uses ``forecast - actual`` scores and subtracts the finite-sample
229
+ quantile at ``1 - q``. For an upper quantile ``q >= 0.5``, it uses ``actual -
230
+ forecast`` scores and adds the finite-sample quantile at ``q``. The finite-sample
231
+ level is adjusted with ``min(level * (n + 1) / n, 1)`` and estimated with
232
+ NumPy's ``method="higher"`` convention.
233
+
234
+ By default, P50 is unchanged and quantile columns are not sorted inside the
235
+ calibrator. This preserves the specified semantics: median calibration is an
236
+ explicit opt-in, while downstream
237
+ :class:`~openstef_models.transforms.postprocessing.quantile_sorter.QuantileSorter`
238
+ owns the quantile-ordering invariant.
239
+
240
+ .. code-block:: python
241
+
242
+ from openstef_models.transforms.postprocessing import ConformalizedQuantileCalibrator
243
+
244
+ calibrator = ConformalizedQuantileCalibrator(quantiles=quantiles)
245
+ calibrator.fit(calibration_forecasts_with_actuals)
246
+ calibrated_forecasts = calibrator.transform(forecasts)
210
247
 
211
248
  Evaluating Probabilistic Forecasts
212
249
  -----------------------------------
@@ -56,24 +56,25 @@
56
56
  "source": [
57
57
  "# Quantile Calibration\n",
58
58
  "\n",
59
- "Improve the reliability of probabilistic forecasts using isotonic quantile\n",
60
- "calibration. A well-calibrated P10 quantile should exceed actual values\n",
61
- "roughly 10 % of the time — this tutorial shows how to measure and correct\n",
62
- "deviations.\n",
59
+ "Improve the reliability of probabilistic forecasts using isotonic and\n",
60
+ "asymmetric conformal\n",
61
+ "quantile calibration. A well-calibrated P10 quantile should exceed actual\n",
62
+ "values roughly 10 % of the time — this tutorial shows how to measure and\n",
63
+ "correct deviations.\n",
63
64
  "\n",
64
65
  "**What you'll learn:**\n",
65
66
  "\n",
66
67
  "- Measure quantile calibration with observed coverage\n",
67
- "- Add isotonic calibration as a postprocessing step\n",
68
+ "- Add isotonic and asymmetric conformal calibration as postprocessing steps\n",
68
69
  "- Compare before/after calibration on real data\n",
69
70
  "\n",
70
71
  "```{note}\n",
71
72
  "This tutorial uses a small data slice for fast execution.\n",
72
- "See `examples/benchmarks/` for production-scale runs.\n",
73
73
  "```\n",
74
74
  "\n",
75
75
  "**Key API references:**\n",
76
76
  "[`IsotonicQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.IsotonicQuantileCalibrator.html)\n",
77
+ "· [`ConformalizedQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.ConformalizedQuantileCalibrator.html)\n",
77
78
  "· [`ForecastingWorkflowConfig`](https://openstef.github.io/openstef/api/generated/openstef_models.presets.ForecastingWorkflowConfig.html)"
78
79
  ]
79
80
  },
@@ -111,11 +112,12 @@
111
112
  "\n",
112
113
  "train_start = datetime.fromisoformat(\"2024-03-01T00:00:00Z\")\n",
113
114
  "train_end = train_start + timedelta(days=45)\n",
114
- "forecast_end = train_end + timedelta(days=7)\n",
115
+ "cal_end = train_end + timedelta(days=4)\n",
116
+ "forecast_end = cal_end + timedelta(days=7)\n",
115
117
  "\n",
116
118
  "train_dataset = dataset.filter_by_range(start=train_start, end=train_end)\n",
117
119
  "predict_dataset = dataset.filter_by_range(\n",
118
- " start=train_end - timedelta(days=14),\n",
120
+ " start=cal_end - timedelta(days=14),\n",
119
121
  " end=forecast_end,\n",
120
122
  ")\n",
121
123
  "\n",
@@ -139,7 +141,7 @@
139
141
  "\n",
140
142
  "workflow_uncal = create_forecasting_workflow(config=config)\n",
141
143
  "workflow_uncal.fit(train_dataset)\n",
142
- "forecast_uncal = workflow_uncal.predict(predict_dataset, forecast_start=train_end)\n",
144
+ "forecast_uncal = workflow_uncal.predict(predict_dataset, forecast_start=cal_end)\n",
143
145
  "\n",
144
146
  "print(f\"Forecast rows: {len(forecast_uncal.data)}\")"
145
147
  ]
@@ -201,15 +203,16 @@
201
203
  "id": "c0b8a434",
202
204
  "metadata": {},
203
205
  "source": [
204
- "## Add isotonic calibration\n",
205
- "\n",
206
- "[`IsotonicQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.IsotonicQuantileCalibrator.html) is a postprocessing transform that learns a\n",
207
- "monotonic mapping from predicted quantiles to observed quantile levels.\n",
208
- "During training it fits on the validation split; during prediction it\n",
209
- "corrects each quantile value.\n",
210
- "\n",
211
- "We create a second workflow identical to the first, but with the calibrator\n",
212
- "appended to its postprocessing pipeline."
206
+ "## Add isotonic and asymmetric conformal calibration\n",
207
+ "\n",
208
+ "[`IsotonicQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.IsotonicQuantileCalibrator.html) learns a\n",
209
+ "monotonic mapping from predicted quantiles to observed quantile levels. It is\n",
210
+ "appended to the workflow's postprocessing pipeline and fitted on training-set\n",
211
+ "predictions automatically.\n",
212
+ "[`ConformalizedQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.ConformalizedQuantileCalibrator.html)\n",
213
+ "instead applies asymmetric conformal corrections. It leaves\n",
214
+ "P50 unchanged by default and delegates quantile ordering to a downstream\n",
215
+ "`QuantileSorter`."
213
216
  ]
214
217
  },
215
218
  {
@@ -233,7 +236,7 @@
233
236
  ")\n",
234
237
  "\n",
235
238
  "workflow_cal.fit(train_dataset)\n",
236
- "forecast_cal = workflow_cal.predict(predict_dataset, forecast_start=train_end)"
239
+ "forecast_cal = workflow_cal.predict(predict_dataset, forecast_start=cal_end)"
237
240
  ]
238
241
  },
239
242
  {
@@ -250,12 +253,76 @@
250
253
  "assert len(forecast_cal.data) > 100, f\"Expected >100 calibrated forecast rows, got {len(forecast_cal.data)}\""
251
254
  ]
252
255
  },
256
+ {
257
+ "cell_type": "markdown",
258
+ "id": "4381f623",
259
+ "metadata": {},
260
+ "source": [
261
+ "### Calibrate with the asymmetric conformal transform\n",
262
+ "\n",
263
+ "Split-conformal calibration requires a **held-out** calibration period that\n",
264
+ "the forecaster was not trained on. We predict that period with the fitted\n",
265
+ "workflow, attach the observed target, and fit the calibrator before applying\n",
266
+ "it to the final holdout forecast."
267
+ ]
268
+ },
269
+ {
270
+ "cell_type": "code",
271
+ "execution_count": null,
272
+ "id": "d6730356",
273
+ "metadata": {},
274
+ "outputs": [],
275
+ "source": [
276
+ "from openstef_models.transforms.postprocessing import ConformalizedQuantileCalibrator\n",
277
+ "\n",
278
+ "calibration_dataset = dataset.filter_by_range(\n",
279
+ " start=train_end - timedelta(days=14),\n",
280
+ " end=cal_end,\n",
281
+ ")\n",
282
+ "workflow_conformalized = create_forecasting_workflow(\n",
283
+ " config=config.model_copy(update={\"model_id\": \"conformalized_gblinear\"})\n",
284
+ ")\n",
285
+ "workflow_conformalized.fit(train_dataset)\n",
286
+ "cal_forecast = workflow_conformalized.predict(calibration_dataset, forecast_start=train_end)\n",
287
+ "conformalized_calibrator = ConformalizedQuantileCalibrator(quantiles=quantiles)\n",
288
+ "conformalized_calibrator.fit(cal_forecast)\n",
289
+ "forecast_conformalized_raw = workflow_conformalized.predict(predict_dataset, forecast_start=cal_end)\n",
290
+ "forecast_conformalized = conformalized_calibrator.transform(forecast_conformalized_raw)"
291
+ ]
292
+ },
293
+ {
294
+ "cell_type": "code",
295
+ "execution_count": null,
296
+ "id": "f0b399bf",
297
+ "metadata": {
298
+ "tags": [
299
+ "remove-cell"
300
+ ]
301
+ },
302
+ "outputs": [],
303
+ "source": [
304
+ "assert len(forecast_conformalized.data) > 100, \"Expected >100 conformalized forecast rows\""
305
+ ]
306
+ },
253
307
  {
254
308
  "cell_type": "markdown",
255
309
  "id": "0dc57ac6",
256
310
  "metadata": {},
257
311
  "source": [
258
- "## Compare calibration before and after"
312
+ "## Compare calibration before and after\n",
313
+ "\n",
314
+ "The following table and plot compare the uncalibrated forecast with both\n",
315
+ "postprocessing approaches on the same holdout rows.\n",
316
+ "\n",
317
+ "### Isotonic calibration\n",
318
+ "\n",
319
+ "Isotonic calibration learns a monotonic mapping for each quantile. The\n",
320
+ "``observed (isotonic)`` and ``error (isotonic)`` columns show its effect.\n",
321
+ "\n",
322
+ "### Asymmetric conformal calibration\n",
323
+ "\n",
324
+ "The ``observed (conformalized)`` and ``error (conformalized)`` columns show\n",
325
+ "the effect of the asymmetric corrections."
259
326
  ]
260
327
  },
261
328
  {
@@ -266,17 +333,23 @@
266
333
  "outputs": [],
267
334
  "source": [
268
335
  "forecast_cal_aligned = forecast_cal.data.loc[actuals.index]\n",
336
+ "forecast_conformalized_aligned = forecast_conformalized.data.loc[actuals.index]\n",
269
337
  "\n",
270
338
  "observed_cal = [float((actuals <= forecast_cal_aligned[f\"quantile_P{int(float(q) * 100)}\"]).mean()) for q in quantiles]\n",
339
+ "observed_conformalized = [\n",
340
+ " float((actuals <= forecast_conformalized_aligned[f\"quantile_P{int(float(q) * 100)}\"]).mean()) for q in quantiles\n",
341
+ "]\n",
271
342
  "\n",
272
343
  "comparison_df = pd.DataFrame(\n",
273
344
  " {\n",
274
345
  " \"quantile\": [f\"P{int(float(q) * 100)}\" for q in quantiles],\n",
275
346
  " \"expected\": expected,\n",
276
347
  " \"observed (before)\": observed_uncal,\n",
277
- " \"observed (after)\": observed_cal,\n",
348
+ " \"observed (isotonic)\": observed_cal,\n",
349
+ " \"observed (conformalized)\": observed_conformalized,\n",
278
350
  " \"error (before)\": [o - e for o, e in zip(observed_uncal, expected, strict=True)],\n",
279
- " \"error (after)\": [o - e for o, e in zip(observed_cal, expected, strict=True)],\n",
351
+ " \"error (isotonic)\": [o - e for o, e in zip(observed_cal, expected, strict=True)],\n",
352
+ " \"error (conformalized)\": [o - e for o, e in zip(observed_conformalized, expected, strict=True)],\n",
280
353
  " }\n",
281
354
  ")\n",
282
355
  "print(comparison_df.to_string(index=False))"
@@ -321,12 +394,23 @@
321
394
  " x=expected,\n",
322
395
  " y=observed_cal,\n",
323
396
  " mode=\"markers+lines\",\n",
324
- " name=\"After calibration\",\n",
397
+ " name=\"After isotonic calibration\",\n",
325
398
  " marker={\"size\": 12, \"color\": \"blue\"},\n",
326
399
  " line={\"color\": \"blue\", \"width\": 2},\n",
327
400
  " )\n",
328
401
  ")\n",
329
402
  "\n",
403
+ "fig.add_trace(\n",
404
+ " go.Scatter(\n",
405
+ " x=expected,\n",
406
+ " y=observed_conformalized,\n",
407
+ " mode=\"markers+lines\",\n",
408
+ " name=\"After conformalized calibration\",\n",
409
+ " marker={\"size\": 12, \"color\": \"green\", \"symbol\": \"diamond\"},\n",
410
+ " line={\"color\": \"green\", \"width\": 2, \"dash\": \"dash\"},\n",
411
+ " )\n",
412
+ ")\n",
413
+ "\n",
330
414
  "fig.update_layout(\n",
331
415
  " title=\"Quantile calibration: expected vs observed coverage\",\n",
332
416
  " xaxis_title=\"Expected quantile level\",\n",
@@ -344,10 +428,12 @@
344
428
  "id": "fb2c92a8",
345
429
  "metadata": {},
346
430
  "source": [
347
- "Points closer to the diagonal indicate better calibration. The isotonic\n",
348
- "correction pulls the observed coverage towards the expected level, improving\n",
349
- "the reliability of uncertainty estimates. To measure calibration stability\n",
350
- "over longer time horizons, combine this with a {doc}`backtesting_quickstart`."
431
+ "Points closer to the diagonal indicate better calibration. Isotonic regression\n",
432
+ "learns a monotonic value mapping, while the conformalized calibrator applies\n",
433
+ "asymmetric corrections. Compare both methods on a separate\n",
434
+ "holdout period before selecting one for production. To measure\n",
435
+ "calibration stability over longer time horizons, combine this with a\n",
436
+ "{doc}`backtesting_quickstart`."
351
437
  ]
352
438
  },
353
439
  {
@@ -43,24 +43,25 @@ logger = setup_notebook_logging(
43
43
  # %% [markdown]
44
44
  # # Quantile Calibration
45
45
  #
46
- # Improve the reliability of probabilistic forecasts using isotonic quantile
47
- # calibration. A well-calibrated P10 quantile should exceed actual values
48
- # roughly 10 % of the time — this tutorial shows how to measure and correct
49
- # deviations.
46
+ # Improve the reliability of probabilistic forecasts using isotonic and
47
+ # asymmetric conformal
48
+ # quantile calibration. A well-calibrated P10 quantile should exceed actual
49
+ # values roughly 10 % of the time — this tutorial shows how to measure and
50
+ # correct deviations.
50
51
  #
51
52
  # **What you'll learn:**
52
53
  #
53
54
  # - Measure quantile calibration with observed coverage
54
- # - Add isotonic calibration as a postprocessing step
55
+ # - Add isotonic and asymmetric conformal calibration as postprocessing steps
55
56
  # - Compare before/after calibration on real data
56
57
  #
57
58
  # ```{note}
58
59
  # This tutorial uses a small data slice for fast execution.
59
- # See `examples/benchmarks/` for production-scale runs.
60
60
  # ```
61
61
  #
62
62
  # **Key API references:**
63
63
  # [`IsotonicQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.IsotonicQuantileCalibrator.html)
64
+ # · [`ConformalizedQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.ConformalizedQuantileCalibrator.html)
64
65
  # · [`ForecastingWorkflowConfig`](https://openstef.github.io/openstef/api/generated/openstef_models.presets.ForecastingWorkflowConfig.html)
65
66
 
66
67
  # %% [markdown]
@@ -86,11 +87,12 @@ dataset = load_liander_dataset()
86
87
 
87
88
  train_start = datetime.fromisoformat("2024-03-01T00:00:00Z")
88
89
  train_end = train_start + timedelta(days=45)
89
- forecast_end = train_end + timedelta(days=7)
90
+ cal_end = train_end + timedelta(days=4)
91
+ forecast_end = cal_end + timedelta(days=7)
90
92
 
91
93
  train_dataset = dataset.filter_by_range(start=train_start, end=train_end)
92
94
  predict_dataset = dataset.filter_by_range(
93
- start=train_end - timedelta(days=14),
95
+ start=cal_end - timedelta(days=14),
94
96
  end=forecast_end,
95
97
  )
96
98
 
@@ -114,7 +116,7 @@ config = ForecastingWorkflowConfig(
114
116
 
115
117
  workflow_uncal = create_forecasting_workflow(config=config)
116
118
  workflow_uncal.fit(train_dataset)
117
- forecast_uncal = workflow_uncal.predict(predict_dataset, forecast_start=train_end)
119
+ forecast_uncal = workflow_uncal.predict(predict_dataset, forecast_start=cal_end)
118
120
 
119
121
  print(f"Forecast rows: {len(forecast_uncal.data)}")
120
122
 
@@ -148,15 +150,16 @@ print("Calibration before isotonic correction:")
148
150
  print(calibration_df.to_string(index=False))
149
151
 
150
152
  # %% [markdown]
151
- # ## Add isotonic calibration
152
- #
153
- # [`IsotonicQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.IsotonicQuantileCalibrator.html) is a postprocessing transform that learns a
154
- # monotonic mapping from predicted quantiles to observed quantile levels.
155
- # During training it fits on the validation split; during prediction it
156
- # corrects each quantile value.
153
+ # ## Add isotonic and asymmetric conformal calibration
157
154
  #
158
- # We create a second workflow identical to the first, but with the calibrator
159
- # appended to its postprocessing pipeline.
155
+ # [`IsotonicQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.IsotonicQuantileCalibrator.html) learns a
156
+ # monotonic mapping from predicted quantiles to observed quantile levels. It is
157
+ # appended to the workflow's postprocessing pipeline and fitted on training-set
158
+ # predictions automatically.
159
+ # [`ConformalizedQuantileCalibrator`](https://openstef.github.io/openstef/api/generated/openstef_models.transforms.postprocessing.ConformalizedQuantileCalibrator.html)
160
+ # instead applies asymmetric conformal corrections. It leaves
161
+ # P50 unchanged by default and delegates quantile ordering to a downstream
162
+ # `QuantileSorter`.
160
163
 
161
164
  # %%
162
165
  from openstef_models.transforms.postprocessing import IsotonicQuantileCalibrator
@@ -173,27 +176,74 @@ workflow_cal.model.postprocessing.transforms.append(
173
176
  )
174
177
 
175
178
  workflow_cal.fit(train_dataset)
176
- forecast_cal = workflow_cal.predict(predict_dataset, forecast_start=train_end)
179
+ forecast_cal = workflow_cal.predict(predict_dataset, forecast_start=cal_end)
177
180
 
178
181
  # %% tags=["remove-cell"]
179
182
  assert len(forecast_cal.data) > 100, f"Expected >100 calibrated forecast rows, got {len(forecast_cal.data)}"
180
183
 
184
+ # %% [markdown]
185
+ # ### Calibrate with the asymmetric conformal transform
186
+ #
187
+ # Split-conformal calibration requires a **held-out** calibration period that
188
+ # the forecaster was not trained on. We predict that period with the fitted
189
+ # workflow, attach the observed target, and fit the calibrator before applying
190
+ # it to the final holdout forecast.
191
+
192
+ # %%
193
+ from openstef_models.transforms.postprocessing import ConformalizedQuantileCalibrator
194
+
195
+ calibration_dataset = dataset.filter_by_range(
196
+ start=train_end - timedelta(days=14),
197
+ end=cal_end,
198
+ )
199
+ workflow_conformalized = create_forecasting_workflow(
200
+ config=config.model_copy(update={"model_id": "conformalized_gblinear"})
201
+ )
202
+ workflow_conformalized.fit(train_dataset)
203
+ cal_forecast = workflow_conformalized.predict(calibration_dataset, forecast_start=train_end)
204
+ conformalized_calibrator = ConformalizedQuantileCalibrator(quantiles=quantiles)
205
+ conformalized_calibrator.fit(cal_forecast)
206
+ forecast_conformalized_raw = workflow_conformalized.predict(predict_dataset, forecast_start=cal_end)
207
+ forecast_conformalized = conformalized_calibrator.transform(forecast_conformalized_raw)
208
+
209
+ # %% tags=["remove-cell"]
210
+ assert len(forecast_conformalized.data) > 100, "Expected >100 conformalized forecast rows"
211
+
181
212
  # %% [markdown]
182
213
  # ## Compare calibration before and after
214
+ #
215
+ # The following table and plot compare the uncalibrated forecast with both
216
+ # postprocessing approaches on the same holdout rows.
217
+ #
218
+ # ### Isotonic calibration
219
+ #
220
+ # Isotonic calibration learns a monotonic mapping for each quantile. The
221
+ # ``observed (isotonic)`` and ``error (isotonic)`` columns show its effect.
222
+ #
223
+ # ### Asymmetric conformal calibration
224
+ #
225
+ # The ``observed (conformalized)`` and ``error (conformalized)`` columns show
226
+ # the effect of the asymmetric corrections.
183
227
 
184
228
  # %%
185
229
  forecast_cal_aligned = forecast_cal.data.loc[actuals.index]
230
+ forecast_conformalized_aligned = forecast_conformalized.data.loc[actuals.index]
186
231
 
187
232
  observed_cal = [float((actuals <= forecast_cal_aligned[f"quantile_P{int(float(q) * 100)}"]).mean()) for q in quantiles]
233
+ observed_conformalized = [
234
+ float((actuals <= forecast_conformalized_aligned[f"quantile_P{int(float(q) * 100)}"]).mean()) for q in quantiles
235
+ ]
188
236
 
189
237
  comparison_df = pd.DataFrame(
190
238
  {
191
239
  "quantile": [f"P{int(float(q) * 100)}" for q in quantiles],
192
240
  "expected": expected,
193
241
  "observed (before)": observed_uncal,
194
- "observed (after)": observed_cal,
242
+ "observed (isotonic)": observed_cal,
243
+ "observed (conformalized)": observed_conformalized,
195
244
  "error (before)": [o - e for o, e in zip(observed_uncal, expected, strict=True)],
196
- "error (after)": [o - e for o, e in zip(observed_cal, expected, strict=True)],
245
+ "error (isotonic)": [o - e for o, e in zip(observed_cal, expected, strict=True)],
246
+ "error (conformalized)": [o - e for o, e in zip(observed_conformalized, expected, strict=True)],
197
247
  }
198
248
  )
199
249
  print(comparison_df.to_string(index=False))
@@ -227,12 +277,23 @@ fig.add_trace(
227
277
  x=expected,
228
278
  y=observed_cal,
229
279
  mode="markers+lines",
230
- name="After calibration",
280
+ name="After isotonic calibration",
231
281
  marker={"size": 12, "color": "blue"},
232
282
  line={"color": "blue", "width": 2},
233
283
  )
234
284
  )
235
285
 
286
+ fig.add_trace(
287
+ go.Scatter(
288
+ x=expected,
289
+ y=observed_conformalized,
290
+ mode="markers+lines",
291
+ name="After conformalized calibration",
292
+ marker={"size": 12, "color": "green", "symbol": "diamond"},
293
+ line={"color": "green", "width": 2, "dash": "dash"},
294
+ )
295
+ )
296
+
236
297
  fig.update_layout(
237
298
  title="Quantile calibration: expected vs observed coverage",
238
299
  xaxis_title="Expected quantile level",
@@ -245,10 +306,12 @@ fig.update_layout(
245
306
  fig.show()
246
307
 
247
308
  # %% [markdown]
248
- # Points closer to the diagonal indicate better calibration. The isotonic
249
- # correction pulls the observed coverage towards the expected level, improving
250
- # the reliability of uncertainty estimates. To measure calibration stability
251
- # over longer time horizons, combine this with a {doc}`backtesting_quickstart`.
309
+ # Points closer to the diagonal indicate better calibration. Isotonic regression
310
+ # learns a monotonic value mapping, while the conformalized calibrator applies
311
+ # asymmetric corrections. Compare both methods on a separate
312
+ # holdout period before selecting one for production. To measure
313
+ # calibration stability over longer time horizons, combine this with a
314
+ # {doc}`backtesting_quickstart`.
252
315
 
253
316
  # %% [markdown]
254
317
  # ## Next steps
@@ -7,7 +7,7 @@ requires = [ "hatchling" ]
7
7
 
8
8
  [project]
9
9
  name = "openstef-beam"
10
- version = "4.2.2"
10
+ version = "4.3.0"
11
11
  description = "Backtesting, Evaluation, Analysis and Metrics (BEAM) library for OpenSTEF"
12
12
  readme = "README.md"
13
13
  keywords = [ "energy", "forecasting", "machinelearning" ]
@@ -19,7 +19,6 @@ from typing import NamedTuple
19
19
 
20
20
  import numpy as np
21
21
  import numpy.typing as npt
22
- from sklearn.metrics import r2_score
23
22
 
24
23
  from openstef_core.types import Quantile
25
24
 
@@ -518,16 +517,30 @@ def r2(
518
517
  well observed outcomes are replicated by the model, based on the proportion
519
518
  of total variation of outcomes explained by the model.
520
519
 
520
+ Structurally invalid inputs, such as incompatible shapes or unsupported
521
+ dimensions, raise ValueError. Statistically unusable data, such as fewer
522
+ than two samples or non-finite values, returns NaN.
523
+
521
524
  Args:
522
525
  y_true: Ground truth values with shape (num_samples,).
523
526
  y_pred: Predicted values with shape (num_samples,).
524
- sample_weights: Optional weights for each sample with shape (num_samples,).
525
- If None, all samples are weighted equally.
527
+ sample_weights: Optional weights for each sample with shape
528
+ (num_samples,). If None, all samples are weighted equally.
526
529
 
527
530
  Returns:
528
- The R² score as a float. Best possible score is 1.0, and it can be negative
529
- (because the model can be arbitrarily worse). A constant model that always
530
- predicts the mean of y_true would get an R² score of 0.0.
531
+ The R² score as a float. The best possible score is 1.0, and the score
532
+ can be negative because a model can perform arbitrarily worse than a
533
+ constant mean predictor. Fewer than two samples or non-finite data
534
+ returns NaN.
535
+
536
+ For a constant target, this function follows scikit-learn's default
537
+ finite behavior: a perfect prediction returns 1.0 and an imperfect
538
+ prediction returns 0.0.
539
+
540
+ Raises:
541
+ ValueError: If the inputs are not one-dimensional, if y_true and y_pred
542
+ have different shapes, or if sample_weights does not have the same
543
+ one-dimensional shape as y_true.
531
544
 
532
545
  Example:
533
546
  Basic usage with energy load data
@@ -552,10 +565,58 @@ def r2(
552
565
  >>> isinstance(score, float)
553
566
  True
554
567
  """
555
- if len(y_true) == 0 or len(y_pred) == 0:
556
- return float("NaN")
568
+ y_true = np.asarray(y_true, dtype=float)
569
+ y_pred = np.asarray(y_pred, dtype=float)
570
+
571
+ # Structural contract violations should fail loudly. In particular,
572
+ # rejecting dimensions explicitly prevents unintended NumPy broadcasting.
573
+ if y_true.ndim != 1 or y_pred.ndim != 1:
574
+ error_msg = f"y_true and y_pred must be one-dimensional; got shapes {y_true.shape} and {y_pred.shape}"
575
+ raise ValueError(error_msg)
557
576
 
558
- return float(r2_score(y_true, y_pred, sample_weight=sample_weights))
577
+ if y_true.shape != y_pred.shape:
578
+ error_msg = f"y_true and y_pred must have the same shape; got {y_true.shape} and {y_pred.shape}"
579
+ raise ValueError(error_msg)
580
+
581
+ if sample_weights is None:
582
+ weights = np.ones_like(y_true)
583
+ else:
584
+ weights = np.asarray(sample_weights, dtype=float)
585
+
586
+ if weights.ndim != 1 or weights.shape != y_true.shape:
587
+ error_msg = (
588
+ f"sample_weights must be one-dimensional and have the same "
589
+ f"shape as y_true; got {weights.shape} and {y_true.shape}"
590
+ )
591
+ raise ValueError(error_msg)
592
+
593
+ # R² is statistically undefined with fewer than two observations.
594
+ if y_true.size < 2: # noqa: PLR2004 (hardcoded constant is too trivial to warrant a named constant)
595
+ return float("nan")
596
+
597
+ # Non-finite values represent unusable metric data rather than a structural
598
+ # programming error. Propagate that condition as an undefined metric.
599
+ if not (np.all(np.isfinite(y_true)) and np.all(np.isfinite(y_pred)) and np.all(np.isfinite(weights))):
600
+ return float("nan")
601
+
602
+ weight_sum = float(np.sum(weights))
603
+ if not np.isfinite(weight_sum) or weight_sum == 0.0:
604
+ return float("nan")
605
+
606
+ weighted_mean = float(np.average(y_true, weights=weights))
607
+ residual_sum = float(np.sum(weights * (y_true - y_pred) ** 2))
608
+ total_sum = float(np.sum(weights * (y_true - weighted_mean) ** 2))
609
+
610
+ if not np.isfinite(residual_sum) or not np.isfinite(total_sum):
611
+ return float("nan")
612
+
613
+ # Match scikit-learn's default force_finite=True behavior for a constant
614
+ # target: perfect predictions score 1.0, otherwise the score is 0.0.
615
+ if total_sum == 0.0:
616
+ return 1.0 if residual_sum == 0.0 else 0.0
617
+
618
+ score = 1.0 - residual_sum / total_sum
619
+ return float(score) if np.isfinite(score) else float("nan")
559
620
 
560
621
 
561
622
  def pinball_loss(