openstef 3.4.14__tar.gz → 3.4.15__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 (110) hide show
  1. {openstef-3.4.14 → openstef-3.4.15}/PKG-INFO +1 -1
  2. {openstef-3.4.14 → openstef-3.4.15}/openstef/metrics/figure.py +3 -0
  3. {openstef-3.4.14 → openstef-3.4.15}/openstef/metrics/metrics.py +7 -1
  4. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/confidence_interval_applicator.py +3 -0
  5. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/xgb_quantile.py +3 -0
  6. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/serializer.py +3 -0
  7. {openstef-3.4.14 → openstef-3.4.15}/openstef/model_selection/model_selection.py +3 -0
  8. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/create_basecase_forecast.py +3 -0
  9. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/create_forecast.py +7 -0
  10. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/optimize_hyperparameters.py +7 -0
  11. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/train_create_forecast_backtest.py +8 -0
  12. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/train_model.py +15 -0
  13. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/utils.py +3 -0
  14. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/create_components_forecast.py +4 -0
  15. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/train_model.py +4 -0
  16. {openstef-3.4.14 → openstef-3.4.15}/openstef/validation/validation.py +3 -0
  17. {openstef-3.4.14 → openstef-3.4.15}/openstef.egg-info/PKG-INFO +1 -1
  18. {openstef-3.4.14 → openstef-3.4.15}/setup.py +1 -1
  19. {openstef-3.4.14 → openstef-3.4.15}/LICENSE +0 -0
  20. {openstef-3.4.14 → openstef-3.4.15}/README.md +0 -0
  21. {openstef-3.4.14 → openstef-3.4.15}/openstef/__init__.py +0 -0
  22. {openstef-3.4.14 → openstef-3.4.15}/openstef/__main__.py +0 -0
  23. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_adaptation_model.z +0 -0
  24. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_adaptation_model.z.license +0 -0
  25. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_adaptation_model_features.z +0 -0
  26. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_adaptation_model_features.z.license +0 -0
  27. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_adaptation_model_scaler.z +0 -0
  28. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_adaptation_model_scaler.z.license +0 -0
  29. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_domain_model.z +0 -0
  30. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_domain_model.z.license +0 -0
  31. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_domain_model_features.z +0 -0
  32. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_domain_model_features.z.license +0 -0
  33. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_domain_model_scaler.z +0 -0
  34. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_domain_model_scaler.z.license +0 -0
  35. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_model_card.md +0 -0
  36. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_model_card.md.license +0 -0
  37. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_target.z +0 -0
  38. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_target.z.license +0 -0
  39. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_target_scaler.z +0 -0
  40. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dazls_model_3.4.7/dazls_stored_3.4.7_target_scaler.z.license +0 -0
  41. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dutch_holidays_2020-2022.csv +0 -0
  42. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/dutch_holidays_2020-2022.csv.license +0 -0
  43. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/pv_single_coefs.csv +0 -0
  44. {openstef-3.4.14 → openstef-3.4.15}/openstef/data/pv_single_coefs.csv.license +0 -0
  45. {openstef-3.4.14 → openstef-3.4.15}/openstef/data_classes/__init__.py +0 -0
  46. {openstef-3.4.14 → openstef-3.4.15}/openstef/data_classes/data_prep.py +0 -0
  47. {openstef-3.4.14 → openstef-3.4.15}/openstef/data_classes/model_specifications.py +0 -0
  48. {openstef-3.4.14 → openstef-3.4.15}/openstef/data_classes/prediction_job.py +0 -0
  49. {openstef-3.4.14 → openstef-3.4.15}/openstef/data_classes/split_function.py +0 -0
  50. {openstef-3.4.14 → openstef-3.4.15}/openstef/enums.py +0 -0
  51. {openstef-3.4.14 → openstef-3.4.15}/openstef/exceptions.py +0 -0
  52. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/__init__.py +0 -0
  53. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/apply_features.py +0 -0
  54. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/data_preparation.py +0 -0
  55. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/feature_adder.py +0 -0
  56. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/feature_applicator.py +0 -0
  57. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/general.py +0 -0
  58. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/holiday_features.py +0 -0
  59. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/lag_features.py +0 -0
  60. {openstef-3.4.14 → openstef-3.4.15}/openstef/feature_engineering/weather_features.py +0 -0
  61. {openstef-3.4.14 → openstef-3.4.15}/openstef/metrics/__init__.py +0 -0
  62. {openstef-3.4.14 → openstef-3.4.15}/openstef/metrics/reporter.py +0 -0
  63. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/__init__.py +0 -0
  64. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/basecase.py +0 -0
  65. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/fallback.py +0 -0
  66. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/metamodels/__init__.py +0 -0
  67. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/metamodels/grouped_regressor.py +0 -0
  68. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/metamodels/missing_values_handler.py +0 -0
  69. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/model_creator.py +0 -0
  70. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/objective.py +0 -0
  71. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/objective_creator.py +0 -0
  72. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/__init__.py +0 -0
  73. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/arima.py +0 -0
  74. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/custom_regressor.py +0 -0
  75. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/dazls.py +0 -0
  76. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/lgbm.py +0 -0
  77. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/linear.py +0 -0
  78. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/regressor.py +0 -0
  79. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/regressors/xgb.py +0 -0
  80. {openstef-3.4.14 → openstef-3.4.15}/openstef/model/standard_deviation_generator.py +0 -0
  81. {openstef-3.4.14 → openstef-3.4.15}/openstef/model_selection/__init__.py +0 -0
  82. {openstef-3.4.14 → openstef-3.4.15}/openstef/monitoring/__init__.py +0 -0
  83. {openstef-3.4.14 → openstef-3.4.15}/openstef/monitoring/performance_meter.py +0 -0
  84. {openstef-3.4.14 → openstef-3.4.15}/openstef/monitoring/teams.py +0 -0
  85. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/__init__.py +0 -0
  86. {openstef-3.4.14 → openstef-3.4.15}/openstef/pipeline/create_component_forecast.py +0 -0
  87. {openstef-3.4.14 → openstef-3.4.15}/openstef/postprocessing/__init__.py +0 -0
  88. {openstef-3.4.14 → openstef-3.4.15}/openstef/postprocessing/postprocessing.py +0 -0
  89. {openstef-3.4.14 → openstef-3.4.15}/openstef/preprocessing/__init__.py +0 -0
  90. {openstef-3.4.14 → openstef-3.4.15}/openstef/preprocessing/preprocessing.py +0 -0
  91. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/__init__.py +0 -0
  92. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/calculate_kpi.py +0 -0
  93. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/create_basecase_forecast.py +0 -0
  94. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/create_forecast.py +0 -0
  95. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/create_solar_forecast.py +0 -0
  96. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/create_wind_forecast.py +0 -0
  97. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/optimize_hyperparameters.py +0 -0
  98. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/run_tracy.py +0 -0
  99. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/split_forecast.py +0 -0
  100. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/utils/__init__.py +0 -0
  101. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/utils/dependencies.py +0 -0
  102. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/utils/predictionjobloop.py +0 -0
  103. {openstef-3.4.14 → openstef-3.4.15}/openstef/tasks/utils/taskcontext.py +0 -0
  104. {openstef-3.4.14 → openstef-3.4.15}/openstef/validation/__init__.py +0 -0
  105. {openstef-3.4.14 → openstef-3.4.15}/openstef.egg-info/SOURCES.txt +0 -0
  106. {openstef-3.4.14 → openstef-3.4.15}/openstef.egg-info/dependency_links.txt +0 -0
  107. {openstef-3.4.14 → openstef-3.4.15}/openstef.egg-info/requires.txt +0 -0
  108. {openstef-3.4.14 → openstef-3.4.15}/openstef.egg-info/top_level.txt +0 -0
  109. {openstef-3.4.14 → openstef-3.4.15}/pyproject.toml +0 -0
  110. {openstef-3.4.14 → openstef-3.4.15}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openstef
3
- Version: 3.4.14
3
+ Version: 3.4.15
4
4
  Summary: Open short term energy forecaster
5
5
  Home-page: https://github.com/OpenSTEF/openstef
6
6
  Author: Alliander N.V
@@ -71,6 +71,9 @@ def plot_data_series(
71
71
  Returns:
72
72
  A line plot of each passed data series.
73
73
 
74
+ Raises:
75
+ ValueError: If names is None and the number of series is greater than 3.
76
+
74
77
  """
75
78
  series_names = {
76
79
  1: ("series",),
@@ -25,6 +25,9 @@ def get_eval_metric_function(metric_name: str) -> Callable:
25
25
  Returns:
26
26
  Function to calculate the metric.
27
27
 
28
+ Raises:
29
+ KeyError: If the metric is not available.
30
+
28
31
  """
29
32
  evaluation_function = {
30
33
  "rmse": rmse,
@@ -130,6 +133,9 @@ def r_mae_highest(
130
133
 
131
134
  The range is based on the load range of the previous two weeks.
132
135
 
136
+ Raises:
137
+ ValueError: If the length of the realised and forecast arrays are not equal.
138
+
133
139
  """
134
140
  # Check if length of both arrays is equal
135
141
  if len(np.array(realised)) != len(np.array(forecast)):
@@ -395,7 +401,7 @@ def xgb_quantile_obj(
395
401
  Args:
396
402
  preds: numpy.ndarray
397
403
  dmatrix: xgboost.DMatrix
398
- quantile: float
404
+ quantile: float between 0 and 1
399
405
 
400
406
  Returns:
401
407
  Gradient and Hessian
@@ -74,6 +74,9 @@ class ConfidenceIntervalApplicator:
74
74
  Forecast with added standard deviation. DataFrame with columns:
75
75
  "forecast", "stdev"
76
76
 
77
+ Raises:
78
+ ModelWithoutStDev: If the model does not have a valid standard deviation.
79
+
77
80
  """
78
81
  minimal_resolution: int = 15 # Minimal time resolution in minutes
79
82
  standard_deviation = self.model.standard_deviation
@@ -52,6 +52,9 @@ class XGBQuantileOpenstfRegressor(OpenstfRegressor):
52
52
  alpha: Alpha
53
53
  max_delta_step: Maximum delta step
54
54
 
55
+ Raises:
56
+ ValueError in case quantile 0.5 is not in the requested quantiles
57
+
55
58
  """
56
59
  super().__init__()
57
60
  # Check if quantile 0.5 is pressent this is required
@@ -147,6 +147,9 @@ class MLflowSerializer:
147
147
  Args:
148
148
  experiment_name: Name of the experiment, often the id of the predition job.
149
149
 
150
+ Raises:
151
+ LookupError: If model is not found in MLflow.
152
+
150
153
  """
151
154
  try:
152
155
  models_df = self._find_models(
@@ -140,6 +140,9 @@ def split_data_train_validation_test(
140
140
  - Validation data.
141
141
  - Test data.
142
142
 
143
+ Raises:
144
+ ValueError: When the test and validation fractions are too high.
145
+
143
146
  """
144
147
  test_fraction = test_fraction if back_test else 0
145
148
  train_fraction = 1 - (test_fraction + validation_fraction)
@@ -38,6 +38,9 @@ def create_basecase_forecast_pipeline(
38
38
  Returns:
39
39
  Base case forecast
40
40
 
41
+ Raises:
42
+ NoRealisedLoadError: When no realised load for given datetime range.
43
+
41
44
  """
42
45
  logger = structlog.get_logger(__name__)
43
46
 
@@ -40,6 +40,10 @@ def create_forecast_pipeline(
40
40
  Returns:
41
41
  DataFrame with the forecast
42
42
 
43
+ Raises:
44
+ InputDataOngoingZeroFlatlinerError: When all recent load measurements are zero.
45
+ LookupError: When no model is found for the given prediction job in MLflow.
46
+
43
47
  """
44
48
  prediction_model_pid = pj["id"]
45
49
  # Use the alternative forecast model if it's specify in the pj
@@ -76,6 +80,9 @@ def create_forecast_pipeline_core(
76
80
  Returns:
77
81
  Forecast
78
82
 
83
+ Raises:
84
+ InputDataOngoingZeroFlatlinerError: When all recent load measurements are zero.
85
+
79
86
  """
80
87
  logger = structlog.get_logger(__name__)
81
88
 
@@ -59,6 +59,9 @@ def optimize_hyperparameters_pipeline(
59
59
 
60
60
  Raises:
61
61
  ValueError: If the input_date is insufficient.
62
+ InputDataInsufficientError: If the input dataframe is empty.
63
+ InputDataWrongColumnOrderError: If the load column is missing in the input dataframe.
64
+ OldModelHigherScoreError: When old model is better than new model.
62
65
 
63
66
  Returns:
64
67
  Optimized hyperparameters.
@@ -119,6 +122,10 @@ def optimize_hyperparameters_pipeline_core(
119
122
 
120
123
  Raises:
121
124
  ValueError: If the input_date is insufficient.
125
+ InputDataInsufficientError: If the input dataframe is empty.
126
+ InputDataWrongColumnOrderError: If the load column is missing in the input dataframe.
127
+ OldModelHigherScoreError: When old model is better than new model.
128
+ InputDataOngoingZeroFlatlinerError: When all recent load measurements are zero.
122
129
 
123
130
  Returns:
124
131
  - Best model,
@@ -56,6 +56,11 @@ def train_model_and_forecast_back_test(
56
56
  - Validation data sets (list[pd.DataFrame])
57
57
  - Test data sets (list[pd.DataFrame])
58
58
 
59
+ Raises:
60
+ InputDataInsufficientError: when input data is insufficient.
61
+ InputDataWrongColumnOrderError: when input data has a invalid column order.
62
+ ValueError: when the horizon is a string and the corresponding column in not in the input data
63
+ InputDataOngoingZeroFlatlinerError: when all recent load measurements are zero.
59
64
  """
60
65
  if pj.backtest_split_func is None:
61
66
  backtest_split_func = backtest_split_default
@@ -124,6 +129,9 @@ def train_model_and_forecast_test_core(
124
129
  - The trained model
125
130
  - The forecast on the test set.
126
131
 
132
+ Raises:
133
+ NotImplementedError: When using invalid model type in the prediction job.
134
+ InputDataWrongColumnOrderError: When 'load' column is not first and 'horizon' column is not last.
127
135
  """
128
136
  model = train_model.train_pipeline_step_train_model(
129
137
  pj, modelspecs, train_data, validation_data
@@ -60,6 +60,13 @@ def train_model_pipeline(
60
60
  - The validation dataset with forecasts
61
61
  - The test dataset with forecasts
62
62
 
63
+ Raises:
64
+ InputDataInsufficientError: when input data is insufficient.
65
+ InputDataWrongColumnOrderError: when input data has a invalid column order.
66
+ 'load' column should be first and 'horizon' column last.
67
+ OldModelHigherScoreError: When old model is better than new model.
68
+ SkipSaveTrainingForecasts: If old model is better or younger than `MAXIMUM_MODEL_AGE`, the model is not saved.
69
+
63
70
  """
64
71
  # Initialize serializer
65
72
  serializer = MLflowSerializer(mlflow_tracking_uri=mlflow_tracking_uri)
@@ -164,6 +171,7 @@ def train_model_pipeline_core(
164
171
  InputDataInsufficientError: when input data is insufficient.
165
172
  InputDataWrongColumnOrderError: when input data has a invalid column order.
166
173
  OldModelHigherScoreError: When old model is better than new model.
174
+ InputDataOngoingZeroFlatlinerError: when all recent load measurements are zero.
167
175
 
168
176
  Returns:
169
177
  - Fitted_model (OpenstfRegressor)
@@ -257,6 +265,8 @@ def train_pipeline_common(
257
265
  Raises:
258
266
  InputDataInsufficientError: when input data is insufficient.
259
267
  InputDataWrongColumnOrderError: when input data has a invalid column order.
268
+ 'load' column should be first and 'horizon' column last.
269
+ InputDataOngoingZeroFlatlinerError: when all recent load measurements are zero.
260
270
 
261
271
  """
262
272
  data_with_features = train_pipeline_step_compute_features(
@@ -346,6 +356,7 @@ def train_pipeline_step_compute_features(
346
356
  InputDataInsufficientError: when input data is insufficient.
347
357
  InputDataWrongColumnOrderError: when input data has a invalid column order.
348
358
  ValueError: when the horizon is a string and the corresponding column in not in the input data
359
+ InputDataOngoingZeroFlatlinerError: when all recent load measurements are zero.
349
360
 
350
361
  """
351
362
  if input_data.empty:
@@ -419,6 +430,10 @@ def train_pipeline_step_train_model(
419
430
  Returns:
420
431
  The trained model
421
432
 
433
+ Raises:
434
+ NotImplementedError: When using invalid model type in the prediction job.
435
+ InputDataWrongColumnOrderError: When 'load' column is not first and 'horizon' column is not last.
436
+
422
437
  """
423
438
  # Test if first column is "load" and last column is "horizon"
424
439
  if train_data.columns[0] != "load" or train_data.columns[-1] != "horizon":
@@ -27,6 +27,9 @@ def generate_forecast_datetime_range(
27
27
  Returns:
28
28
  Start and end datetimes of the forecast range.
29
29
 
30
+ Raises:
31
+ ValueError: If the target column does not have null values.
32
+
30
33
  """
31
34
  # By labeling the True/False values (based on the isnull() statement) as clusters,
32
35
  # we find what True value belongs to what cluster and the amount of True clusters.
@@ -51,6 +51,10 @@ def create_components_forecast_task(
51
51
  pj: Prediction job
52
52
  context: Contect object that holds a config manager and a database connection
53
53
 
54
+ Raises:
55
+ ComponentForecastTooShortHorizonError: If the forecast horizon is too short
56
+ (less than 30 minutes in advance)
57
+
54
58
  """
55
59
  logger = structlog.get_logger(__name__)
56
60
  if pj["train_components"] == 0:
@@ -65,6 +65,10 @@ def train_model_task(
65
65
  datetime_start: Start
66
66
  datetime_end: End
67
67
 
68
+ Raises:
69
+ SkipSaveTrainingForecasts: If old model is better or too young, you don't need to save the traing forcast.
70
+ InputDataOngoingZeroFlatlinerError: If all recent load measurements are zero.
71
+
68
72
  """
69
73
  # Check pipeline types
70
74
  if PipelineType.TRAIN not in pj.pipelines_to_run:
@@ -37,6 +37,9 @@ def validate(
37
37
  Returns:
38
38
  Dataframe where repeated values are set to None
39
39
 
40
+ Raises:
41
+ InputDataOngoingZeroFlatlinerError: If all recent load measurements are zero.
42
+
40
43
  """
41
44
  logger = structlog.get_logger(__name__)
42
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openstef
3
- Version: 3.4.14
3
+ Version: 3.4.15
4
4
  Summary: Open short term energy forecaster
5
5
  Home-page: https://github.com/OpenSTEF/openstef
6
6
  Author: Alliander N.V
@@ -29,7 +29,7 @@ def read_long_description_from_readme():
29
29
 
30
30
  setup(
31
31
  name="openstef",
32
- version="3.4.14",
32
+ version="3.4.15",
33
33
  packages=find_packages(include=["openstef", "openstef.*"]),
34
34
  description="Open short term energy forecaster",
35
35
  long_description=read_long_description_from_readme(),
File without changes
File without changes
File without changes
File without changes
File without changes