zen-garden 2.7.14__tar.gz → 2.7.16__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 (36) hide show
  1. {zen_garden-2.7.14 → zen_garden-2.7.16}/PKG-INFO +1 -1
  2. {zen_garden-2.7.14 → zen_garden-2.7.16}/pyproject.toml +1 -1
  3. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/postprocess/results/results.py +21 -0
  4. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/postprocess/results/solution_loader.py +11 -1
  5. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/utils.py +27 -0
  6. {zen_garden-2.7.14 → zen_garden-2.7.16}/LICENSE.txt +0 -0
  7. {zen_garden-2.7.14 → zen_garden-2.7.16}/README.md +0 -0
  8. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/__init__.py +0 -0
  9. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/__main__.py +0 -0
  10. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/_internal.py +0 -0
  11. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/default_config.py +0 -0
  12. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/__init__.py +0 -0
  13. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/carrier/__init__.py +0 -0
  14. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/carrier/carrier.py +0 -0
  15. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/component.py +0 -0
  16. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/element.py +0 -0
  17. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/energy_system.py +0 -0
  18. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/technology/__init__.py +0 -0
  19. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/technology/conversion_technology.py +0 -0
  20. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/technology/retrofitting_technology.py +0 -0
  21. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/technology/storage_technology.py +0 -0
  22. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/technology/technology.py +0 -0
  23. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/technology/transport_technology.py +0 -0
  24. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/model/time_steps.py +0 -0
  25. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/optimization_setup.py +0 -0
  26. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/postprocess/.gitkeep +0 -0
  27. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/postprocess/__init__.py +0 -0
  28. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/postprocess/comparisons.py +0 -0
  29. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/postprocess/postprocess.py +0 -0
  30. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/postprocess/results/__init__.py +0 -0
  31. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/preprocess/__init__.py +0 -0
  32. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/preprocess/extract_input_data.py +0 -0
  33. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/preprocess/parameter_change_log.py +0 -0
  34. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/preprocess/time_series_aggregation.py +0 -0
  35. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/preprocess/unit_handling.py +0 -0
  36. {zen_garden-2.7.14 → zen_garden-2.7.16}/zen_garden/visualization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zen_garden
3
- Version: 2.7.14
3
+ Version: 2.7.16
4
4
  Summary: ZEN-garden is an optimization model of energy systems and value chains.
5
5
  Author: Alissa Ganter, Johannes Burger, Francesco De Marco, Lukas Kunz, Lukas Schmidt-Engelbertz, Paolo Gabrielli, Giovanni Sansavini
6
6
  Author-email: Jacob Mannhardt <zen-garden@ethz.ch>
@@ -15,7 +15,7 @@ authors = [
15
15
  {name = "Giovanni Sansavini"},
16
16
  ]
17
17
  # do not change version manually! Done by bump2version
18
- version = "2.7.14"
18
+ version = "2.7.16"
19
19
  requires-python= ">=3.11,<3.14"
20
20
  description="ZEN-garden is an optimization model of energy systems and value chains."
21
21
  readme = "README.md"
@@ -673,6 +673,27 @@ class Results:
673
673
  return ""
674
674
  return component.doc
675
675
 
676
+ def get_index_names(self, component_name: str, scenario_name: Optional[str] = None) -> list[str]:
677
+ """
678
+ Docstring for get_index_names
679
+
680
+ :param self: Description
681
+ :param component_name: Description
682
+ :type component_name: str
683
+ :param scenario_name: Description
684
+ :type scenario_name: Optional[str]
685
+ :return: Description
686
+ :rtype: list[str]
687
+ """
688
+ if scenario_name is None:
689
+ scenario_name = next(iter(self.solution_loader.scenarios.keys()))
690
+ scenario = self.solution_loader.scenarios[scenario_name]
691
+ if component_name not in scenario.components:
692
+ logging.warning(f"Component {component_name} not found and the index names cannot be returned.")
693
+ return []
694
+ component = scenario.components[component_name]
695
+ return component.index_names
696
+
676
697
  def get_years(self, scenario_name: Optional[str] = None) -> list[int]:
677
698
  """
678
699
  Extracts the years of a given Scenario. If no scenario is given, a random one is taken.
@@ -10,10 +10,13 @@ import h5py # type: ignore
10
10
  import pint
11
11
  import pandas as pd
12
12
  import numpy as np
13
+ import logging
14
+
13
15
  from typing import Optional, Any,Literal
14
16
  from enum import Enum
15
17
  from functools import cache
16
18
  from zen_garden.default_config import Analysis, System, Solver
19
+ from zen_garden.utils import slice_df_by_index
17
20
 
18
21
  class ComponentType(Enum):
19
22
  parameter: str = "parameter"
@@ -665,7 +668,12 @@ class SolutionLoader():
665
668
  version = get_solution_version(scenario)
666
669
  if check_if_v1_leq_v2(version,"v1"):
667
670
  sequence = self.get_sequence_time_steps(scenario,TimestepType.storage)
668
- dict_startend = {sequence.iloc[0]:sequence.iloc[-1]}
671
+ time_steps_per_year = scenario.system.unaggregated_time_steps_per_year
672
+ dict_startend = {}
673
+ for i in np.arange(scenario.system.optimized_years):
674
+ start_idx = i * time_steps_per_year
675
+ end_idx = (i + 1) * time_steps_per_year - 1
676
+ dict_startend[sequence.iloc[start_idx]] = sequence.iloc[end_idx]
669
677
  else:
670
678
  time_steps_file_name = _get_time_steps_file(scenario)
671
679
  time_steps_file_name = time_steps_file_name + ".json"
@@ -788,6 +796,8 @@ def get_df_from_path(path: str, component_name: str, version: str, data_type: Li
788
796
 
789
797
  if check_if_v1_leq_v2(version,"v0"):
790
798
  pd_read = pd.read_hdf(path, component_name + f"/{data_type}")
799
+ if len(index) > 0:
800
+ pd_read = slice_df_by_index(pd_read,index)
791
801
  else:
792
802
  if data_type == "dataframe":
793
803
  try:
@@ -262,6 +262,33 @@ def reformat_slicing_index(index, component) -> tuple[str]:
262
262
 
263
263
  return ref_index
264
264
 
265
+ def slice_df_by_index(df,index_tuple) -> dict:
266
+ """ recreates the slicing index from a tuple of strings and slices the dataframe accordingly
267
+ :param df: dataframe to be sliced
268
+ :param index_tuple: tuple of strings representing the slicing index
269
+ :return: sliced dataframe
270
+ """
271
+ index = {}
272
+ for index_str in index_tuple:
273
+ if " in " in index_str:
274
+ key, value_str = index_str.split(" in ")
275
+ key = key.strip("'")
276
+ value = eval(value_str)
277
+ elif " == " in index_str:
278
+ key, value_str = index_str.split(" == ")
279
+ key = key.strip("'")
280
+ value = eval(value_str)
281
+ else:
282
+ continue
283
+ index[key] = value
284
+ for key in index:
285
+ if key in df.index.names:
286
+ if isinstance(index[key], list):
287
+ df = df.loc[df.index.get_level_values(key).isin(index[key])]
288
+ else:
289
+ df = df.xs(index[key], level=key, drop_level=False)
290
+ return df
291
+
265
292
  def get_label_position(obj,label:int):
266
293
  """ Get dict of index and coordinate for variable or constraint labels."""
267
294
  name_element = obj.get_name_by_label(int(label))
File without changes
File without changes