openstef 3.4.18__py3-none-any.whl → 3.4.20__py3-none-any.whl
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.
- openstef/app_settings.py +5 -3
- openstef/exceptions.py +1 -1
- openstef/monitoring/teams.py +3 -0
- openstef/tasks/calculate_kpi.py +6 -4
- openstef/tasks/create_basecase_forecast.py +8 -3
- openstef/tasks/create_components_forecast.py +8 -3
- openstef/tasks/create_forecast.py +5 -2
- {openstef-3.4.18.dist-info → openstef-3.4.20.dist-info}/METADATA +28 -35
- {openstef-3.4.18.dist-info → openstef-3.4.20.dist-info}/RECORD +12 -12
- {openstef-3.4.18.dist-info → openstef-3.4.20.dist-info}/LICENSE +0 -0
- {openstef-3.4.18.dist-info → openstef-3.4.20.dist-info}/WHEEL +0 -0
- {openstef-3.4.18.dist-info → openstef-3.4.20.dist-info}/top_level.txt +0 -0
openstef/app_settings.py
CHANGED
@@ -9,9 +9,11 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
9
9
|
class AppSettings(BaseSettings):
|
10
10
|
"""Global app settings."""
|
11
11
|
|
12
|
-
# Logging settings.
|
13
|
-
log_level: str = Field("INFO", description="Log level used for logging statements.")
|
14
|
-
|
15
12
|
model_config = SettingsConfigDict(
|
16
13
|
env_prefix="openstef_", env_file=".env", extra="ignore"
|
17
14
|
)
|
15
|
+
|
16
|
+
post_teams_messages: bool = True
|
17
|
+
|
18
|
+
# Logging settings.
|
19
|
+
log_level: str = Field("INFO", description="Log level used for logging statements.")
|
openstef/exceptions.py
CHANGED
openstef/monitoring/teams.py
CHANGED
openstef/tasks/calculate_kpi.py
CHANGED
@@ -72,6 +72,8 @@ def check_kpi_task(
|
|
72
72
|
context: TaskContext,
|
73
73
|
start_time: datetime,
|
74
74
|
end_time: datetime,
|
75
|
+
threshold_optimizing=THRESHOLD_OPTIMIZING,
|
76
|
+
threshold_retraining=THRESHOLD_RETRAINING,
|
75
77
|
) -> None:
|
76
78
|
# Apply default parameters if none are provided
|
77
79
|
if start_time is None:
|
@@ -102,20 +104,20 @@ def check_kpi_task(
|
|
102
104
|
|
103
105
|
# Add pid to the list of pids that should be retrained or optimized if
|
104
106
|
# performance is insufficient
|
105
|
-
if kpis["47.0h"]["rMAE"] >
|
107
|
+
if kpis["47.0h"]["rMAE"] > threshold_retraining:
|
106
108
|
context.logger.warning(
|
107
109
|
"Need to retrain model, retraining threshold rMAE 47h exceeded",
|
108
110
|
t_ahead="47.0h",
|
109
111
|
rMAE=kpis["47.0h"]["rMAE"],
|
110
|
-
retraining_threshold=
|
112
|
+
retraining_threshold=threshold_retraining,
|
111
113
|
)
|
112
114
|
|
113
|
-
if kpis["47.0h"]["rMAE"] >
|
115
|
+
if kpis["47.0h"]["rMAE"] > threshold_optimizing:
|
114
116
|
context.logger.warning(
|
115
117
|
"Need to optimize hyperparameters, optimizing threshold rMAE 47h exceeded",
|
116
118
|
t_ahead="47.0h",
|
117
119
|
rMAE=kpis["47.0h"]["rMAE"],
|
118
|
-
optimizing_threshold=
|
120
|
+
optimizing_threshold=threshold_optimizing,
|
119
121
|
)
|
120
122
|
|
121
123
|
|
@@ -32,7 +32,10 @@ T_AHEAD_DAYS: int = 14
|
|
32
32
|
|
33
33
|
|
34
34
|
def create_basecase_forecast_task(
|
35
|
-
pj: PredictionJobDataClass,
|
35
|
+
pj: PredictionJobDataClass,
|
36
|
+
context: TaskContext,
|
37
|
+
t_behind_days=T_BEHIND_DAYS,
|
38
|
+
t_ahead_days=T_AHEAD_DAYS,
|
36
39
|
) -> None:
|
37
40
|
"""Top level task that creates a basecase forecast.
|
38
41
|
|
@@ -41,6 +44,8 @@ def create_basecase_forecast_task(
|
|
41
44
|
Args:
|
42
45
|
pj: Prediction job
|
43
46
|
context: Contect object that holds a config manager and a database connection
|
47
|
+
t_behind_days: number of days included as history. This is used to generated lagged features for the to-be-forecasted period
|
48
|
+
t_ahead_days: number of days a basecase forecast is created for
|
44
49
|
|
45
50
|
"""
|
46
51
|
# Check pipeline types
|
@@ -63,8 +68,8 @@ def create_basecase_forecast_task(
|
|
63
68
|
return
|
64
69
|
|
65
70
|
# Define datetime range for input data
|
66
|
-
datetime_start = datetime.utcnow() - timedelta(days=
|
67
|
-
datetime_end = datetime.utcnow() + timedelta(days=
|
71
|
+
datetime_start = datetime.utcnow() - timedelta(days=t_behind_days)
|
72
|
+
datetime_end = datetime.utcnow() + timedelta(days=t_ahead_days)
|
68
73
|
|
69
74
|
# Retrieve input data
|
70
75
|
input_data = context.database.get_model_input(
|
@@ -43,7 +43,10 @@ T_AHEAD_DAYS = 3
|
|
43
43
|
|
44
44
|
|
45
45
|
def create_components_forecast_task(
|
46
|
-
pj: PredictionJobDataClass,
|
46
|
+
pj: PredictionJobDataClass,
|
47
|
+
context: TaskContext,
|
48
|
+
t_behind_days: int = T_BEHIND_DAYS,
|
49
|
+
t_ahead_days: int = T_AHEAD_DAYS,
|
47
50
|
) -> None:
|
48
51
|
"""Top level task that creates a components forecast.
|
49
52
|
|
@@ -52,6 +55,8 @@ def create_components_forecast_task(
|
|
52
55
|
Args:
|
53
56
|
pj: Prediction job
|
54
57
|
context: Contect object that holds a config manager and a database connection
|
58
|
+
t_behind_days: number of days in the past that the component forecast is created for
|
59
|
+
t_ahead_days: number of days in the future that the component forecast is created for
|
55
60
|
|
56
61
|
Raises:
|
57
62
|
ComponentForecastTooShortHorizonError: If the forecast horizon is too short
|
@@ -71,8 +76,8 @@ def create_components_forecast_task(
|
|
71
76
|
return
|
72
77
|
|
73
78
|
# Define datetime range for input data
|
74
|
-
datetime_start = datetime.utcnow() - timedelta(days=
|
75
|
-
datetime_end = datetime.utcnow() + timedelta(days=
|
79
|
+
datetime_start = datetime.utcnow() - timedelta(days=t_behind_days)
|
80
|
+
datetime_end = datetime.utcnow() + timedelta(days=t_ahead_days)
|
76
81
|
|
77
82
|
logger.info(
|
78
83
|
"Get predicted load", datetime_start=datetime_start, datetime_end=datetime_end
|
@@ -34,7 +34,9 @@ from openstef.validation.validation import detect_ongoing_zero_flatliner
|
|
34
34
|
T_BEHIND_DAYS: int = 14
|
35
35
|
|
36
36
|
|
37
|
-
def create_forecast_task(
|
37
|
+
def create_forecast_task(
|
38
|
+
pj: PredictionJobDataClass, context: TaskContext, t_behind_days: int = T_BEHIND_DAYS
|
39
|
+
) -> None:
|
38
40
|
"""Top level task that creates a forecast.
|
39
41
|
|
40
42
|
On this task level all database and context manager dependencies are resolved.
|
@@ -45,6 +47,7 @@ def create_forecast_task(pj: PredictionJobDataClass, context: TaskContext) -> No
|
|
45
47
|
Args:
|
46
48
|
pj: Prediction job
|
47
49
|
context: Contect object that holds a config manager and a database connection
|
50
|
+
t_behind_days: number of days included as history. This is used to generated lagged features for the to-be-forecasted period
|
48
51
|
|
49
52
|
"""
|
50
53
|
# Check pipeline types
|
@@ -70,7 +73,7 @@ def create_forecast_task(pj: PredictionJobDataClass, context: TaskContext) -> No
|
|
70
73
|
mlflow_tracking_uri = context.config.paths_mlflow_tracking_uri
|
71
74
|
|
72
75
|
# Define datetime range for input data
|
73
|
-
datetime_start = datetime.utcnow() - timedelta(days=
|
76
|
+
datetime_start = datetime.utcnow() - timedelta(days=t_behind_days)
|
74
77
|
datetime_end = datetime.utcnow() + timedelta(seconds=pj.horizon_minutes * 60)
|
75
78
|
|
76
79
|
# Retrieve input data
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: openstef
|
3
|
-
Version: 3.4.
|
3
|
+
Version: 3.4.20
|
4
4
|
Summary: Open short term energy forecaster
|
5
5
|
Home-page: https://github.com/OpenSTEF/openstef
|
6
6
|
Author: Alliander N.V
|
@@ -41,9 +41,11 @@ SPDX-FileCopyrightText: 2017-2023 Contributors to the OpenSTEF project <korte.te
|
|
41
41
|
SPDX-License-Identifier: MPL-2.0
|
42
42
|
-->
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
[](https://pepy.tech/project/openstef)
|
47
|
+
[](https://pepy.tech/project/openstef)
|
48
|
+
[](https://bestpractices.coreinfrastructure.org/projects/5585)
|
47
49
|
<!-- SonarCloud badges -->
|
48
50
|
[](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
|
49
51
|
[](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
|
@@ -54,11 +56,6 @@ SPDX-License-Identifier: MPL-2.0
|
|
54
56
|
[](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
|
55
57
|
[](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
|
56
58
|
[](https://sonarcloud.io/dashboard?id=OpenSTEF_openstef)
|
57
|
-
[](https://bestpractices.coreinfrastructure.org/projects/5585)
|
58
|
-
[](https://pepy.tech/project/openstef)
|
59
|
-
[](https://pepy.tech/project/openstef)
|
60
|
-
|
61
|
-
# OpenSTEF
|
62
59
|
|
63
60
|
OpenSTEF is a Python package designed for generating short-term forecasts in the energy sector. The repository includes all the essential components required for machine learning pipelines that facilitate the forecasting process. To utilize the package, users are required to furnish their own data storage and retrieval interface.
|
64
61
|
|
@@ -66,26 +63,22 @@ OpenSTEF is a Python package designed for generating short-term forecasts in the
|
|
66
63
|
- [OpenSTEF](#openstef)
|
67
64
|
- [Table of contents](#table-of-contents)
|
68
65
|
- [External information sources](#external-information-sources)
|
69
|
-
- [Installation](#
|
70
|
-
- [Install the openstef package](#install-the-openstef-package)
|
71
|
-
- [Remark regarding installation within a **conda environment on Windows**:](#remark-regarding-installation-within-a-conda-environment-on-windows)
|
66
|
+
- [Installation](#install)
|
72
67
|
- [Usage](#usage)
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
- [Contact](#contact)
|
68
|
+
- [Example notebooks](#example-notebooks)
|
69
|
+
- [Reference Implementation](#reference-implementation)
|
70
|
+
- [Database connector for OpenSTEF](#database-connector-for-openstef)
|
71
|
+
- [License](license)
|
72
|
+
- [Contributing](#contributing)
|
73
|
+
- [Contact](#contact)
|
80
74
|
|
81
75
|
# External information sources
|
82
76
|
- [Documentation website](https://openstef.github.io/openstef/index.html);
|
83
77
|
- [Python package](https://pypi.org/project/openstef/);
|
84
|
-
- [
|
78
|
+
- [Linux Foundation project page](https://www.lfenergy.org/projects/openstef/);
|
85
79
|
- [Documentation on dashboard](https://raw.githack.com/OpenSTEF/.github/main/profile/html/openstef_dashboard_doc.html);
|
86
|
-
- [Linux Foundation project page](https://openstef.github.io/openstef/index.html)
|
87
80
|
- [Video about OpenSTEF](https://www.lfenergy.org/forecasting-to-create-a-more-resilient-optimized-grid/);
|
88
|
-
- [Teams channel](https://teams.microsoft.com/l/team/19%3ac08a513650524fc988afb296cd0358cc%40thread.tacv2/conversations?groupId=bfcb763a-3a97-4938-81d7-b14512aa537d&tenantId=697f104b-d7cb-48c8-ac9f-bd87105bafdc)
|
81
|
+
- [Teams channel](https://teams.microsoft.com/l/team/19%3ac08a513650524fc988afb296cd0358cc%40thread.tacv2/conversations?groupId=bfcb763a-3a97-4938-81d7-b14512aa537d&tenantId=697f104b-d7cb-48c8-ac9f-bd87105bafdc)
|
89
82
|
|
90
83
|
# Installation
|
91
84
|
|
@@ -105,33 +98,33 @@ For more information on this issue see the [readme of pywin32](https://github.co
|
|
105
98
|
|
106
99
|
# Usage
|
107
100
|
|
108
|
-
|
109
|
-
|
110
|
-
```shell
|
111
|
-
python -m openstef task <task_name>
|
112
|
-
```
|
101
|
+
## Example notebooks
|
102
|
+
To help you get started, a set of fundamental example notebooks has been created. You can access these offline examples [here](https://github.com/OpenSTEF/openstef-offline-example).
|
113
103
|
|
114
104
|
## Reference Implementation
|
115
105
|
A complete implementation including databases, user interface, example data, etc. is available at: https://github.com/OpenSTEF/openstef-reference
|
116
106
|
|
117
107
|

|
118
108
|
Screenshot of the operational dashboard showing the key functionality of OpenSTEF.
|
119
|
-
Dashboard documentation can be found [here](https://
|
109
|
+
Dashboard documentation can be found [here](https://raw.githack.com/OpenSTEF/.github/main/profile/html/openstef_dashboard_doc.html).
|
120
110
|
|
121
|
-
|
122
|
-
This repository provides an interface to OpenSTEF (reference) databases. The repository can be found [here](https://github.com/OpenSTEF/openstef-dbc).
|
111
|
+
To run a task use:
|
123
112
|
|
124
|
-
|
125
|
-
|
113
|
+
```shell
|
114
|
+
python -m openstef task <task_name>
|
115
|
+
```
|
116
|
+
|
117
|
+
## Database connector for openstef
|
118
|
+
This repository provides an interface to OpenSTEF (reference) databases. The repository can be found [here](https://github.com/OpenSTEF/openstef-dbc).
|
126
119
|
|
127
|
-
|
120
|
+
# License
|
128
121
|
This project is licensed under the Mozilla Public License, version 2.0 - see LICENSE for details.
|
129
122
|
|
130
123
|
## Licenses third-party libraries
|
131
124
|
This project includes third-party libraries, which are licensed under their own respective Open-Source licenses. SPDX-License-Identifier headers are used to show which license is applicable. The concerning license files can be found in the LICENSES directory.
|
132
125
|
|
133
|
-
|
126
|
+
# Contributing
|
134
127
|
Please read [CODE_OF_CONDUCT.md](https://github.com/OpenSTEF/.github/blob/main/CODE_OF_CONDUCT.md), [CONTRIBUTING.md](https://github.com/OpenSTEF/.github/blob/main/CONTRIBUTING.md) and [PROJECT_GOVERNANCE.md](https://github.com/OpenSTEF/.github/blob/main/PROJECT_GOVERNANCE.md) for details on the process for submitting pull requests to us.
|
135
128
|
|
136
|
-
|
129
|
+
# Contact
|
137
130
|
Please read [SUPPORT.md](https://github.com/OpenSTEF/.github/blob/main/SUPPORT.md) for how to connect and get into contact with the OpenSTEF project
|
@@ -1,8 +1,8 @@
|
|
1
1
|
openstef/__init__.py,sha256=93UM6m0LLQhO69-mSqLuUy73jgs4W7Iuxfo3Lm8c98g,419
|
2
2
|
openstef/__main__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
|
3
|
-
openstef/app_settings.py,sha256=
|
3
|
+
openstef/app_settings.py,sha256=EJTDtimctFQQ-3f7ZcOQaRYohpZk3JD6aZBWPFYM2_A,582
|
4
4
|
openstef/enums.py,sha256=f3Gw-HlNXeqMZahIAEYSZkPKtKWeNt3tfOJBL45Z2fM,629
|
5
|
-
openstef/exceptions.py,sha256=
|
5
|
+
openstef/exceptions.py,sha256=U4u2LTcdT6cmzpipT2Jh7kq9nCjT_-6gntn8yjuhGU0,1993
|
6
6
|
openstef/settings.py,sha256=nSgkBqFxuqB3w7Rwo60i8j37c5ngDbt6vpjHS6QtJXQ,354
|
7
7
|
openstef/data/dutch_holidays_2020-2022.csv,sha256=pS-CjE0igYXd-2dG-MlqyvR2fgYgXkbNmgCKyTjmwxs,23704
|
8
8
|
openstef/data/dutch_holidays_2020-2022.csv.license,sha256=AxxHusqwIXU5RHl5ZMU65LyXmgtbj6QlcnFaOEN4kEE,145
|
@@ -69,7 +69,7 @@ openstef/model_selection/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYl
|
|
69
69
|
openstef/model_selection/model_selection.py,sha256=R34tJBecZo6IiUwCCRLeBI2ZCX6GP8W7FDBlGFWtmG8,11167
|
70
70
|
openstef/monitoring/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
|
71
71
|
openstef/monitoring/performance_meter.py,sha256=6aCGjJFXFq-7qwaJyBkF3MLqjgVK6FMFVcO-bcLLUb4,2803
|
72
|
-
openstef/monitoring/teams.py,sha256=
|
72
|
+
openstef/monitoring/teams.py,sha256=A-tlZeuAgolxFHjgT3gGjraxzW2dmuB-UAOz4xgYNIQ,6668
|
73
73
|
openstef/pipeline/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
|
74
74
|
openstef/pipeline/create_basecase_forecast.py,sha256=YkpiqohETTAETb4GiVlK_btw5dpixJy2LmFZdm10iaI,4623
|
75
75
|
openstef/pipeline/create_component_forecast.py,sha256=A0dmILy_BuAAf2U_9i2FOj6KItIdZdGzi6hNDk-da4Q,6416
|
@@ -83,10 +83,10 @@ openstef/postprocessing/postprocessing.py,sha256=vJZ57TZ3MbG4c78P2cq8Sxs6VHl6kjF
|
|
83
83
|
openstef/preprocessing/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
|
84
84
|
openstef/preprocessing/preprocessing.py,sha256=bM_cSSSb2vGTD79RGzUrI6KoELbzlCyJwc7jqQGNEsE,1454
|
85
85
|
openstef/tasks/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
|
86
|
-
openstef/tasks/calculate_kpi.py,sha256=
|
87
|
-
openstef/tasks/create_basecase_forecast.py,sha256=
|
88
|
-
openstef/tasks/create_components_forecast.py,sha256=
|
89
|
-
openstef/tasks/create_forecast.py,sha256=
|
86
|
+
openstef/tasks/calculate_kpi.py,sha256=78DuK30ohWIHuc6oneRXalcNMXQ5mzy2qDr9xsPdSQs,11882
|
87
|
+
openstef/tasks/create_basecase_forecast.py,sha256=lxor1E3WQ_XAZDYWdNJKE1PY57scz39bKu2Id9U2GwE,4126
|
88
|
+
openstef/tasks/create_components_forecast.py,sha256=j4m9AGjnMDx23FmsaZGPYn9rBMHsRd_h-m1RAfhF8to,6139
|
89
|
+
openstef/tasks/create_forecast.py,sha256=NWd2fdbZ9CKDi190v7PF14IUdz6pyME2A-ssRNDdaYs,5750
|
90
90
|
openstef/tasks/create_solar_forecast.py,sha256=bTr7NThTF6Yj405qAqRaJmlBUrL7HATqVVzsi9hMdMw,15049
|
91
91
|
openstef/tasks/create_wind_forecast.py,sha256=RhshkmNSyFWx4Y6yQn02GzHjWTREbN5A5GAeWv0JpcE,2907
|
92
92
|
openstef/tasks/optimize_hyperparameters.py,sha256=s-z8YQJF6Lf3DdYgKHEpAdlbFJ3a-0Gj0Ahsqj1DErc,4758
|
@@ -98,8 +98,8 @@ openstef/tasks/utils/predictionjobloop.py,sha256=Ysy3zF5lzPMz_asYDKeF5m0qgVT3tCt
|
|
98
98
|
openstef/tasks/utils/taskcontext.py,sha256=L9K14ycwgVxbIVUjH2DIn_QWbnu-OfxcGtQ1K9T6sus,5630
|
99
99
|
openstef/validation/__init__.py,sha256=bIyGTSA4V5VoOLTwdaiJJAnozmpSzvQooVYlsf8H4eU,163
|
100
100
|
openstef/validation/validation.py,sha256=628xaDbAm8B4AYtFOAn8_SXLjejNfULGCfX3hVf_mU0,11119
|
101
|
-
openstef-3.4.
|
102
|
-
openstef-3.4.
|
103
|
-
openstef-3.4.
|
104
|
-
openstef-3.4.
|
105
|
-
openstef-3.4.
|
101
|
+
openstef-3.4.20.dist-info/LICENSE,sha256=7Pm2fWFFHHUG5lDHed1vl5CjzxObIXQglnYsEdtjo_k,14907
|
102
|
+
openstef-3.4.20.dist-info/METADATA,sha256=iDsbzq_7dlisLeKayBIeemF1EYfPDVYXkquQ3k25Qe4,7392
|
103
|
+
openstef-3.4.20.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
104
|
+
openstef-3.4.20.dist-info/top_level.txt,sha256=kD0H4PqrQoncZ957FvqwfBxa89kTrun4Z_RAPs_HhLs,9
|
105
|
+
openstef-3.4.20.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|