tsam 2.3.5__py3-none-any.whl → 2.3.7__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.
@@ -199,6 +199,9 @@ class TimeSeriesAggregation(object):
199
199
  differently evaluated while the clustering process. optional (default: None )
200
200
  :type weightDict: dict
201
201
 
202
+ :param segmentation: Boolean if time steps in periods should be aggregated to segments. optional (default: False)
203
+ :type segmentation: boolean
204
+
202
205
  :param extremePeriodMethod: Method how to integrate extreme Periods (peak demand, lowest temperature etc.)
203
206
  into to the typical period profiles. optional, default: 'None'
204
207
  |br| Options are:
@@ -57,17 +57,18 @@ def durationRepresentation(
57
57
  # get all the values of a certain attribute and cluster
58
58
  candidateValues = candidates.loc[indice[0], a]
59
59
  # sort all values
60
- sortedAttr = candidateValues.stack(future_stack=True,).sort_values()
60
+ sortedAttr = candidateValues.stack(
61
+ future_stack=True,
62
+ ).sort_values()
61
63
  # reindex and arrange such that every sorted segment gets represented by its mean
62
64
  sortedAttr.index = pd.MultiIndex.from_tuples(clean_index)
63
65
  representationValues = sortedAttr.unstack(level=0).mean(axis=1)
64
66
  # respect max and min of the attributes
65
67
  if representMinMax:
66
68
  representationValues.loc[0] = sortedAttr.values[0]
67
- representationValues.loc[
68
- representationValues.index[-1]
69
- ] = sortedAttr.values[-1]
70
-
69
+ representationValues.loc[representationValues.index[-1]] = (
70
+ sortedAttr.values[-1]
71
+ )
71
72
 
72
73
  # get the order of the representation values such that euclidean distance to the candidates is minimized
73
74
  order = candidateValues.mean().sort_values().index
@@ -97,8 +98,12 @@ def durationRepresentation(
97
98
  # concat centroid values and cluster weights for all clusters
98
99
  meansAndWeights = pd.concat(
99
100
  [
100
- pd.DataFrame(np.array(meanVals)).stack(future_stack=True,),
101
- pd.DataFrame(np.array(clusterLengths)).stack(future_stack=True,),
101
+ pd.DataFrame(np.array(meanVals)).stack(
102
+ future_stack=True,
103
+ ),
104
+ pd.DataFrame(np.array(clusterLengths)).stack(
105
+ future_stack=True,
106
+ ),
102
107
  ],
103
108
  axis=1,
104
109
  )
@@ -107,7 +112,14 @@ def durationRepresentation(
107
112
  # save order of the sorted centroid values across all clusters
108
113
  order = meansAndWeightsSorted.index
109
114
  # sort all values of the original time series
110
- sortedAttr = candidates.loc[:, a].stack(future_stack=True,).sort_values().values
115
+ sortedAttr = (
116
+ candidates.loc[:, a]
117
+ .stack(
118
+ future_stack=True,
119
+ )
120
+ .sort_values()
121
+ .values
122
+ )
111
123
  # take mean of sections of the original duration curve according to the cluster and its weight the
112
124
  # respective section is assigned to
113
125
  representationValues = []
@@ -124,8 +136,7 @@ def durationRepresentation(
124
136
  keepSum=True,
125
137
  )
126
138
 
127
-
128
- # transform all representation values to a data frame and arrange it
139
+ # transform all representation values to a data frame and arrange it
129
140
  # according to the order of the sorted
130
141
  # centroid values
131
142
  representationValues = pd.DataFrame(np.array(representationValues))
@@ -139,9 +150,9 @@ def durationRepresentation(
139
150
  return clusterCenters
140
151
 
141
152
 
142
-
143
- def _representMinMax(representationValues, sortedAttr, meansAndWeightsSorted,
144
- keepSum=True):
153
+ def _representMinMax(
154
+ representationValues, sortedAttr, meansAndWeightsSorted, keepSum=True
155
+ ):
145
156
  """
146
157
  Represents the the min and max values of the original time series in the
147
158
  duration curve representation such that the min and max values of the
@@ -164,8 +175,8 @@ def _representMinMax(representationValues, sortedAttr, meansAndWeightsSorted,
164
175
  if np.any(np.array(representationValues) < 0):
165
176
  raise ValueError("Negative values in the duration curve representation")
166
177
 
167
- # first retrieve the change of the values to the min and max values
168
- # of the original time series and their duration in the original
178
+ # first retrieve the change of the values to the min and max values
179
+ # of the original time series and their duration in the original
169
180
  # time series
170
181
  delta_max = sortedAttr.max() - representationValues[-1]
171
182
  appearance_max = meansAndWeightsSorted[1].iloc[-1]
@@ -174,31 +185,36 @@ def _representMinMax(representationValues, sortedAttr, meansAndWeightsSorted,
174
185
 
175
186
  if delta_min == 0 and delta_max == 0:
176
187
  return representationValues
177
-
188
+
178
189
  if keepSum:
179
190
 
180
- # now anticipate the shift of the sum of the time series
191
+ # now anticipate the shift of the sum of the time series
181
192
  # due to the change of the min and max values
182
193
  # of the duration curve
183
194
  delta_sum = delta_max * appearance_max + delta_min * appearance_min
184
- # and derive how much the other values have to be changed to preserve
195
+ # and derive how much the other values have to be changed to preserve
185
196
  # the mean of the duration curve
186
- correction_factor = - delta_sum / (meansAndWeightsSorted[1].iloc[1:-1]
187
- * representationValues[1:-1]).sum()
188
-
197
+ correction_factor = (
198
+ -delta_sum
199
+ / (meansAndWeightsSorted[1].iloc[1:-1] * representationValues[1:-1]).sum()
200
+ )
201
+
189
202
  if correction_factor < -1 or correction_factor > 1:
190
- warnings.warn("The cluster is to small to preserve the sum of the duration curve and additionally the min and max values of the original cluster members. The min max values of the cluster are not preserved. This does not necessarily mean that the min and max values of the original time series are not preserved.")
203
+ warnings.warn(
204
+ "The cluster is too small to preserve the sum of the duration curve and additionally the min and max values of the original cluster members. The min max values of the cluster are not preserved. This does not necessarily mean that the min and max values of the original time series are not preserved."
205
+ )
191
206
  return representationValues
192
207
 
193
- # correct the values of the duration curve such
208
+ # correct the values of the duration curve such
194
209
  # that the mean of the duration curve is preserved
195
210
  # since the min and max values are changed
196
- representationValues[1:-1] = np.multiply(representationValues[1:-1], (
197
- 1+ correction_factor))
198
-
199
- # change the values of the duration curve such that the min and max
211
+ representationValues[1:-1] = np.multiply(
212
+ representationValues[1:-1], (1 + correction_factor)
213
+ )
214
+
215
+ # change the values of the duration curve such that the min and max
200
216
  # values are preserved
201
217
  representationValues[-1] += delta_max
202
218
  representationValues[0] += delta_min
203
-
219
+
204
220
  return representationValues
@@ -1,10 +1,30 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: tsam
3
- Version: 2.3.5
3
+ Version: 2.3.7
4
4
  Summary: Time series aggregation module (tsam) to create typical periods
5
- Home-page: https://github.com/FZJ-IEK3-VSA/tsam
6
- Author: Leander Kotzur, Maximilian Hoffmann
7
- Author-email: leander.kotzur@googlemail.com, maximilian.hoffmann@julumni.fz-juelich.de
5
+ Author-email: Leander Kotzur <leander.kotzur@googlemail.com>, Maximilian Hoffmann <maximilian.hoffmann@julumni.fz-juelich.de>
6
+ Maintainer-email: Julian Belina <j.belina@fz-juelich.de>
7
+ License: MIT License
8
+
9
+ Copyright (c) 2017 Leander Kotzur (FZJ IEK-3), Maximilian Hoffmann (FZJ IEK-3), Peter Markewitz (FZJ IEK-3), Martin Robinius (FZJ IEK-3), Detlef Stolten (FZJ IEK-3)
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
8
28
  Keywords: clustering,optimization
9
29
  Classifier: Development Status :: 4 - Beta
10
30
  Classifier: Intended Audience :: End Users/Desktop
@@ -17,18 +37,27 @@ Classifier: Programming Language :: Python :: 2
17
37
  Classifier: Programming Language :: Python :: 3
18
38
  Classifier: Topic :: Scientific/Engineering :: Mathematics
19
39
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
- Requires-Python: >=3.9
40
+ Requires-Python: <3.14,>=3.9
21
41
  Description-Content-Type: text/markdown
22
42
  License-File: LICENSE.txt
23
- Requires-Dist: scikit-learn >=0.0
24
- Requires-Dist: pandas >=2.0.3
25
- Requires-Dist: numpy >=1.20.0
26
- Requires-Dist: pyomo >=6.4.3
43
+ Requires-Dist: scikit-learn>=0.0
44
+ Requires-Dist: pandas>=2.0.3
45
+ Requires-Dist: numpy>=1.20.0
46
+ Requires-Dist: pyomo>=6.4.3
27
47
  Requires-Dist: networkx
28
48
  Requires-Dist: tqdm
29
49
  Requires-Dist: highspy
30
-
31
- [![daily pytest](https://github.com/FZJ-IEK3-VSA/tsam/actions/workflows/daily_tests.yml/badge.svg?branch=master)](https://github.com/FZJ-IEK3-VSA/tsam/actions) [![Version](https://img.shields.io/pypi/v/tsam.svg)](https://pypi.python.org/pypi/tsam) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/tsam.svg)](https://anaconda.org/conda-forge/tsam) [![Documentation Status](https://readthedocs.org/projects/tsam/badge/?version=latest)](https://tsam.readthedocs.io/en/latest/) [![PyPI - License](https://img.shields.io/pypi/l/tsam)]((https://github.com/FZJ-IEK3-VSA/tsam/blob/master/LICENSE.txt)) [![codecov](https://codecov.io/gh/FZJ-IEK3-VSA/tsam/branch/master/graph/badge.svg)](https://codecov.io/gh/FZJ-IEK3-VSA/tsam)
50
+ Provides-Extra: dev
51
+ Requires-Dist: pytest; extra == "dev"
52
+ Requires-Dist: pytest-cov; extra == "dev"
53
+ Requires-Dist: codecov; extra == "dev"
54
+ Requires-Dist: sphinx; extra == "dev"
55
+ Requires-Dist: sphinx-autobuild; extra == "dev"
56
+ Requires-Dist: sphinx_book_theme; extra == "dev"
57
+ Requires-Dist: twine; extra == "dev"
58
+ Dynamic: license-file
59
+
60
+ [![daily pytest](https://github.com/FZJ-IEK3-VSA/tsam/actions/workflows/daily_tests.yml/badge.svg?branch=master)](https://github.com/FZJ-IEK3-VSA/tsam/actions) [![Version](https://img.shields.io/pypi/v/tsam.svg)](https://pypi.python.org/pypi/tsam) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/tsam.svg)](https://anaconda.org/conda-forge/tsam) [![Documentation Status](https://readthedocs.org/projects/tsam/badge/?version=latest)](https://tsam.readthedocs.io/en/latest/) [![PyPI - License](https://img.shields.io/pypi/l/tsam)]((https://github.com/FZJ-IEK3-VSA/tsam/blob/master/LICENSE.txt)) [![codecov](https://codecov.io/gh/FZJ-IEK3-VSA/tsam/branch/master/graph/badge.svg)](https://codecov.io/gh/FZJ-IEK3-VSA/tsam)
32
61
  [![badge](https://img.shields.io/badge/launch-binder-579aca.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/FZJ-IEK3-VSA/voila-tsam/HEAD?urlpath=voila/render/Time-Series-Aggregation-Module.ipynb)
33
62
 
34
63
  <a href="https://www.fz-juelich.de/en/iek/iek-3"><img src="https://www.fz-juelich.de/static/media/Logo.2ceb35fc.svg" alt="Forschungszentrum Juelich Logo" width="230px"></a>
@@ -49,28 +78,50 @@ The documentation of the tsam code can be found [**here**](https://tsam.readthed
49
78
 
50
79
 
51
80
  ## Installation
81
+ It is recommended to install tsam within its own environment. If you are no familiar with python environments, plaese consider to read some [external documentation](https://realpython.com/python-virtual-environments-a-primer/). In the following we assume you have a [mamba](https://mamba.readthedocs.io/en/latest/installation/mamba-installation.html) or [conda](https://www.anaconda.com/) installation. All conda and mamba command are interchangeable.
82
+
83
+ ### Direct Installations from Package Manager Repositories
84
+
85
+ If you want to prevent any possible dependency conflicts create a new environment using the following command:
86
+
87
+ mamba create -n tsam_env python pip
88
+
89
+ Activate an existing or the newly create environment afterward
90
+
91
+ mamba activate tsam_env
92
+
52
93
  Directly install via pip from pypi as follows:
53
94
 
54
95
  pip install tsam
55
96
 
56
- of install from conda forge with the following command:
97
+ or install from conda forge with the following command:
57
98
 
58
99
  conda install tsam -c conda-forge
59
100
 
101
+ ### Local Installation for Development
60
102
  Alternatively, clone a local copy of the repository to your computer
61
103
 
62
104
  git clone https://github.com/FZJ-IEK3-VSA/tsam.git
63
-
64
- Then install tsam via pip as follow
65
-
105
+
106
+ Change the directory of your shell into the root folder of the repository
107
+
66
108
  cd tsam
67
- pip install .
68
-
69
- Or install directly via python as
70
109
 
71
- python setup.py install
110
+ For development, it is recommended to install tsam into its own environment using conda e.g.
111
+
112
+ conda env create --file=requirement.yml
113
+
114
+ Afterward activate the environment
115
+
116
+ conda activate tsam_env
117
+
118
+ Then install tsam via pip as follows
119
+
120
+
121
+ pip install -e .[dev]
72
122
 
73
- In order to use the k-medoids clustering, make sure that you have installed a MILP solver. As default [HiGHS](https://github.com/ERGO-Code/HiGHS) is used. Nevertheless, in case you have access to a license we recommend commercial solvers (e.g. Gurobi or CPLEX) since they have a better performance.
123
+ ### Installation of MILP Solver for k-medoids
124
+ In order to use the k-medoids clustering, make sure that you have installed a MILP solver. As default [HiGHS](https://github.com/ERGO-Code/HiGHS) is installed and used. Nevertheless, in case you have access to a license we recommend commercial solvers (e.g. Gurobi or CPLEX) since they have a better performance.
74
125
 
75
126
  ### Developer installation
76
127
 
@@ -136,7 +187,7 @@ Copyright (C) 2016-2022 Leander Kotzur (FZJ IEK-3), Maximilian Hoffmann (FZJ IEK
136
187
  You should have received a copy of the MIT License along with this program.
137
188
  If not, see https://opensource.org/licenses/MIT
138
189
 
139
- The core developer team sits in the [Institute of Energy and Climate Research - Techno-Economic Energy Systems Analysis (IEK-3)](https://www.fz-juelich.de/iek/iek-3/EN/Home/home_node.html) belonging to the [Forschungszentrum Jülich](https://www.fz-juelich.de/).
190
+ The core developer team sits in the [Institute of Energy and Climate Research - Techno-Economic Energy Systems Analysis (IEK-3)](https://www.fz-juelich.de/iek/iek-3/EN/Home/home_node.html) belonging to the [Forschungszentrum Jülich](https://www.fz-juelich.de/).
140
191
 
141
192
  ## Citing and further reading
142
193
 
@@ -155,7 +206,7 @@ The publications about time series aggregation for energy system optimization mo
155
206
  [**Typical periods or typical time steps? A multi-model analysis to determine the optimal temporal aggregation for energy system models**](https://www.sciencedirect.com/science/article/abs/pii/S0306261921011545)
156
207
  * Hoffmann et al. (2020):\
157
208
  [**A Review on Time Series Aggregation Methods for Energy System Models**](https://www.mdpi.com/1996-1073/13/3/641)
158
- * Kannengießer et al. (2019):\
209
+ * Kannengießer et al. (2019):\
159
210
  [**Reducing Computational Load for Mixed Integer Linear Programming: An Example for a District and an Island Energy System**](https://www.mdpi.com/1996-1073/12/14/2825)
160
211
  * Kotzur et al. (2018):\
161
212
  [**Time series aggregation for energy system design: Modeling seasonal storage**](https://www.sciencedirect.com/science/article/pii/S0306261918300242)\
@@ -2,15 +2,15 @@ tsam/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  tsam/hyperparametertuning.py,sha256=eM7m7eY80uSlwnLRxmctnis2Jv66D15Z1QD9CCMzSXE,10349
3
3
  tsam/periodAggregation.py,sha256=h9CC06jBLNyyaFTMRynGUMN87fOH3NdSEug6EcTsKGA,5471
4
4
  tsam/representations.py,sha256=2NL1wanBhGreCeJ8jh0aNdIx05YXEyyMJmMAVFS5-T4,7133
5
- tsam/timeseriesaggregation.py,sha256=xLkdSmjbJnSxC0GBzF9Vc-6VMK7Y1OPOmQhdHJgymug,56963
5
+ tsam/timeseriesaggregation.py,sha256=UdsjsP8RAwmdBHq0wJwB2HfUai538NYRQkK31TR9dBM,57125
6
6
  tsam/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- tsam/utils/durationRepresentation.py,sha256=A-RjELO-58jBXbEHxxJ6TPZc2zPC560_SW7kNzw2ZPA,9463
7
+ tsam/utils/durationRepresentation.py,sha256=psjUTrLxr5eqBeSZzzRIUWEEfzMa5b30zPRmxwx2IBg,9713
8
8
  tsam/utils/k_maxoids.py,sha256=0PyaHQMA8vtV_SuQOZ0qdcGFK46aUvOiMSQofjGkjBQ,4415
9
9
  tsam/utils/k_medoids_contiguity.py,sha256=xSN9xT61oc2CPxYERhugR9hDkVCb2o8POvAiLLgrey8,5925
10
10
  tsam/utils/k_medoids_exact.py,sha256=CW6BLQV2eTYtMxDmo97-6hY1HljxcvkPVrL4DQPN5IQ,7178
11
11
  tsam/utils/segmentation.py,sha256=y8TPv1KEqf6ByOz7TRywm3WC9ZPhGiWvhwAcQbFibt4,6132
12
- tsam-2.3.5.dist-info/LICENSE.txt,sha256=XEzEzumoCmdJzcp5gKT6UOtKrkH-SiGpxVbIfihkNK4,1224
13
- tsam-2.3.5.dist-info/METADATA,sha256=ckzCWoHhvFqngqU4vPCUzCFOLmW7aL145Ff63fEPsmw,12581
14
- tsam-2.3.5.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
15
- tsam-2.3.5.dist-info/top_level.txt,sha256=MFI15PnPuMv8F1hTAOXbjGu41z-l6dJbnK69WlIQNcM,5
16
- tsam-2.3.5.dist-info/RECORD,,
12
+ tsam-2.3.7.dist-info/licenses/LICENSE.txt,sha256=XEzEzumoCmdJzcp5gKT6UOtKrkH-SiGpxVbIfihkNK4,1224
13
+ tsam-2.3.7.dist-info/METADATA,sha256=8EoMezCMgt3iUNiHXB1MqN9FRm-ROEMFmZ4EAIWv6Xo,15412
14
+ tsam-2.3.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
+ tsam-2.3.7.dist-info/top_level.txt,sha256=MFI15PnPuMv8F1hTAOXbjGu41z-l6dJbnK69WlIQNcM,5
16
+ tsam-2.3.7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5