fameio 3.1.0__py3-none-any.whl → 3.2.0__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.
Files changed (56) hide show
  1. fameio/cli/__init__.py +2 -3
  2. fameio/cli/convert_results.py +6 -4
  3. fameio/cli/make_config.py +6 -4
  4. fameio/cli/options.py +3 -3
  5. fameio/cli/parser.py +43 -31
  6. fameio/input/__init__.py +1 -9
  7. fameio/input/loader/__init__.py +9 -7
  8. fameio/input/loader/controller.py +64 -14
  9. fameio/input/loader/loader.py +14 -7
  10. fameio/input/metadata.py +37 -18
  11. fameio/input/resolver.py +5 -4
  12. fameio/input/scenario/__init__.py +7 -8
  13. fameio/input/scenario/agent.py +52 -19
  14. fameio/input/scenario/attribute.py +28 -29
  15. fameio/input/scenario/contract.py +161 -52
  16. fameio/input/scenario/exception.py +45 -22
  17. fameio/input/scenario/fameiofactory.py +63 -7
  18. fameio/input/scenario/generalproperties.py +17 -6
  19. fameio/input/scenario/scenario.py +111 -28
  20. fameio/input/scenario/stringset.py +27 -8
  21. fameio/input/schema/__init__.py +5 -5
  22. fameio/input/schema/agenttype.py +29 -11
  23. fameio/input/schema/attribute.py +174 -84
  24. fameio/input/schema/java_packages.py +8 -5
  25. fameio/input/schema/schema.py +35 -9
  26. fameio/input/validator.py +58 -42
  27. fameio/input/writer.py +139 -41
  28. fameio/logs.py +23 -17
  29. fameio/output/__init__.py +5 -1
  30. fameio/output/agent_type.py +93 -27
  31. fameio/output/conversion.py +48 -30
  32. fameio/output/csv_writer.py +88 -18
  33. fameio/output/data_transformer.py +12 -21
  34. fameio/output/input_dao.py +68 -32
  35. fameio/output/output_dao.py +26 -4
  36. fameio/output/reader.py +61 -18
  37. fameio/output/yaml_writer.py +18 -9
  38. fameio/scripts/__init__.py +9 -2
  39. fameio/scripts/convert_results.py +144 -52
  40. fameio/scripts/convert_results.py.license +1 -1
  41. fameio/scripts/exception.py +7 -0
  42. fameio/scripts/make_config.py +34 -12
  43. fameio/scripts/make_config.py.license +1 -1
  44. fameio/series.py +132 -47
  45. fameio/time.py +88 -37
  46. fameio/tools.py +9 -8
  47. {fameio-3.1.0.dist-info → fameio-3.2.0.dist-info}/METADATA +19 -13
  48. fameio-3.2.0.dist-info/RECORD +56 -0
  49. {fameio-3.1.0.dist-info → fameio-3.2.0.dist-info}/WHEEL +1 -1
  50. CHANGELOG.md +0 -279
  51. fameio-3.1.0.dist-info/RECORD +0 -56
  52. {fameio-3.1.0.dist-info → fameio-3.2.0.dist-info}/LICENSE.txt +0 -0
  53. {fameio-3.1.0.dist-info → fameio-3.2.0.dist-info}/LICENSES/Apache-2.0.txt +0 -0
  54. {fameio-3.1.0.dist-info → fameio-3.2.0.dist-info}/LICENSES/CC-BY-4.0.txt +0 -0
  55. {fameio-3.1.0.dist-info → fameio-3.2.0.dist-info}/LICENSES/CC0-1.0.txt +0 -0
  56. {fameio-3.1.0.dist-info → fameio-3.2.0.dist-info}/entry_points.txt +0 -0
fameio/time.py CHANGED
@@ -1,14 +1,17 @@
1
- # SPDX-FileCopyrightText: 2023 German Aerospace Center <fame@dlr.de>
1
+ # SPDX-FileCopyrightText: 2025 German Aerospace Center <fame@dlr.de>
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
+ from __future__ import annotations
4
5
 
5
6
  import datetime as dt
6
7
  import math
7
8
  import re
8
9
  from enum import Enum, auto
9
- from typing import Union
10
+ from typing import Any
10
11
 
11
- from fameio.logs import log_error_and_raise
12
+ from fameio.input import InputError
13
+ from fameio.logs import log_error
14
+ from fameio.output import OutputError
12
15
 
13
16
  START_IN_REAL_TIME = "2000-01-01_00:00:00"
14
17
  DATE_FORMAT = "%Y-%m-%d_%H:%M:%S"
@@ -16,10 +19,8 @@ DATE_REGEX = re.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}:[0-9]{2}")
16
19
  FAME_FIRST_DATETIME = dt.datetime.strptime(START_IN_REAL_TIME, DATE_FORMAT)
17
20
 
18
21
 
19
- class ConversionError(Exception):
20
- """Indicates that something went wrong during time stamp conversion"""
21
-
22
- pass
22
+ class ConversionError(InputError, OutputError):
23
+ """Indicates that time stamp conversion failed"""
23
24
 
24
25
 
25
26
  class TimeUnit(Enum):
@@ -48,9 +49,9 @@ class Constants:
48
49
  STEPS_PER_DAY = STEPS_PER_HOUR * HOURS_PER_DAY
49
50
  STEPS_PER_YEAR = STEPS_PER_DAY * DAYS_PER_YEAR
50
51
  STEPS_PER_WEEK = STEPS_PER_DAY * 7
51
- STEPS_PER_MONTH = STEPS_PER_YEAR / 12
52
+ STEPS_PER_MONTH = int(STEPS_PER_YEAR / 12)
52
53
 
53
- steps_per_unit = {
54
+ steps_per_unit: dict[TimeUnit, int] = {
54
55
  TimeUnit.SECONDS: STEPS_PER_SECOND,
55
56
  TimeUnit.MINUTES: STEPS_PER_MINUTE,
56
57
  TimeUnit.HOURS: STEPS_PER_HOUR,
@@ -73,32 +74,64 @@ class FameTime:
73
74
 
74
75
  @staticmethod
75
76
  def convert_datetime_to_fame_time_step(datetime_string: str) -> int:
76
- """Converts real Datetime string to FAME time step"""
77
+ """
78
+ Converts Datetime string to FAME time step
79
+
80
+ Args:
81
+ datetime_string: a datetime in FAME formatting
82
+
83
+ Returns:
84
+ corresponding FAME time step
85
+
86
+ Raises:
87
+ ConversionError: if string could not be interpreted or does not represent a valid FAME time step,
88
+ logged with level "ERROR"
89
+ """
77
90
  if not FameTime.is_datetime(datetime_string):
78
- log_error_and_raise(ConversionError(FameTime._FORMAT_INVALID.format(datetime_string)))
91
+ raise log_error(ConversionError(FameTime._FORMAT_INVALID.format(datetime_string)))
79
92
  datetime = FameTime._convert_to_datetime(datetime_string)
80
93
  years_since_start_time = datetime.year - FAME_FIRST_DATETIME.year
81
94
  beginning_of_year = dt.datetime(year=datetime.year, month=1, day=1, hour=0, minute=0, second=0)
82
95
  seconds_since_beginning_of_year = int((datetime - beginning_of_year).total_seconds())
83
96
  steps_since_beginning_of_year = seconds_since_beginning_of_year * Constants.STEPS_PER_SECOND
84
97
  if steps_since_beginning_of_year > Constants.STEPS_PER_YEAR:
85
- log_error_and_raise(ConversionError(FameTime._INVALID_TOO_LARGE.format(datetime_string)))
98
+ raise log_error(ConversionError(FameTime._INVALID_TOO_LARGE.format(datetime_string)))
86
99
  year_offset = years_since_start_time * Constants.STEPS_PER_YEAR
87
100
  return year_offset + steps_since_beginning_of_year
88
101
 
89
102
  @staticmethod
90
103
  def _convert_to_datetime(datetime_string: str) -> dt.datetime:
91
- """Converts given `datetime_string` to real-world datetime"""
104
+ """
105
+ Converts given `datetime_string` in FAME formatting to real-world datetime
106
+
107
+ Args:
108
+ datetime_string: to be converted to datetime
109
+
110
+ Returns:
111
+ datetime representation of provided string
112
+
113
+ Raises:
114
+ ConversionError: if provided string could not be converted, logged with level "ERROR"
115
+ """
92
116
  try:
93
117
  return dt.datetime.strptime(datetime_string, DATE_FORMAT)
94
- except ValueError:
95
- log_error_and_raise(ConversionError(FameTime._INVALID_TIMESTAMP.format(datetime_string)))
118
+ except ValueError as e:
119
+ raise log_error(ConversionError(FameTime._INVALID_TIMESTAMP.format(datetime_string))) from e
96
120
 
97
121
  @staticmethod
98
122
  def convert_fame_time_step_to_datetime(fame_time_steps: int, date_format: str = DATE_FORMAT) -> str:
99
123
  """
100
- Converts given `fame_time_steps` to corresponding real-world datetime string in `date_format`,
101
- raises ConversionException if invalid `date_format` received.
124
+ Converts given `fame_time_steps` to corresponding real-world datetime string in `date_format`
125
+
126
+ Args:
127
+ fame_time_steps: an integer representing time in FAME's internal format
128
+ date_format: to be used for datetime representation
129
+
130
+ Returns:
131
+ string representing the real-world datetime of the provided time steps
132
+
133
+ Raises:
134
+ ConversionError: if `date_format` is invalid, logged with level "ERROR"
102
135
  """
103
136
  years_since_start_time = math.floor(fame_time_steps / Constants.STEPS_PER_YEAR)
104
137
  current_year = years_since_start_time + Constants.FIRST_YEAR
@@ -108,31 +141,42 @@ class FameTime:
108
141
  datetime = beginning_of_year + dt.timedelta(seconds=seconds_in_current_year)
109
142
  try:
110
143
  return datetime.strftime(date_format)
111
- except ValueError:
112
- log_error_and_raise(ConversionError(FameTime._INVALID_DATE_FORMAT.format(date_format)))
144
+ except ValueError as e:
145
+ raise log_error(ConversionError(FameTime._INVALID_DATE_FORMAT.format(date_format))) from e
113
146
 
114
147
  @staticmethod
115
148
  def convert_time_span_to_fame_time_steps(value: int, unit: TimeUnit) -> int:
116
- """Converts value of `TimeUnit.UNIT` to fame time steps"""
149
+ """
150
+ Converts value of `TimeUnit.UNIT` to FAME time steps
151
+
152
+ Args:
153
+ value: amount of the units to be converted
154
+ unit: base time unit
155
+
156
+ Returns:
157
+ FAME time steps equivalent of `value x unit`
158
+
159
+ Raises:
160
+ ConversionError: if an unknown time unit is used, logged with level "ERROR"
161
+ """
117
162
  steps = Constants.steps_per_unit.get(unit)
118
163
  if steps:
119
164
  return steps * value
120
- else:
121
- log_error_and_raise(ConversionError(FameTime._TIME_UNIT_UNKNOWN.format(unit)))
165
+ raise log_error(ConversionError(FameTime._TIME_UNIT_UNKNOWN.format(unit)))
122
166
 
123
167
  @staticmethod
124
- def is_datetime(string: str) -> bool:
168
+ def is_datetime(string: Any) -> bool:
125
169
  """Returns `True` if given `string` matches Datetime string format and can be converted to FAME time step"""
126
170
  if isinstance(string, str):
127
171
  return DATE_REGEX.fullmatch(string.strip()) is not None
128
172
  return False
129
173
 
130
174
  @staticmethod
131
- def is_fame_time_compatible(value: Union[int, str]) -> bool:
175
+ def is_fame_time_compatible(value: int | str) -> bool:
132
176
  """Returns `True` if given int or string `value` can be converted to a FAME time step"""
133
177
  if isinstance(value, int):
134
178
  return True
135
- elif isinstance(value, str):
179
+ if isinstance(value, str):
136
180
  return FameTime.is_datetime(value) or FameTime._is_integer(value)
137
181
  return False
138
182
 
@@ -143,20 +187,27 @@ class FameTime:
143
187
  int(string)
144
188
  except ValueError:
145
189
  return False
146
- else:
147
- return True
190
+ return True
148
191
 
149
192
  @staticmethod
150
- def convert_string_if_is_datetime(value: Union[int, str]) -> int:
193
+ def convert_string_if_is_datetime(value: int | str) -> int:
151
194
  """
152
- Returns FAME time steps If given `value` is a valid FAME datetime string it is converted to FAME time steps;
153
- Or, if given `value` is an integer, it is returned without modification.
154
- Raises an Exception if given `value` is neither a valid FAME datetime string nor an integer value
195
+ Returns FAME time steps of given `value`. If it is a valid FAME datetime string it is converted to
196
+ FAME time steps, or, if given `value` is an integer, it is returned without modification.
197
+
198
+ Args:
199
+ value: to be converted
200
+
201
+ Returns:
202
+ FAME time steps equivalent of provided value
203
+
204
+ Raises:
205
+ ConversionError: if given `value` is neither a FAME datetime string nor an integer value,
206
+ logged with level "ERROR"
155
207
  """
156
208
  if FameTime.is_datetime(value):
157
- return int(FameTime.convert_datetime_to_fame_time_step(value))
158
- else:
159
- try:
160
- return int(value)
161
- except ValueError:
162
- log_error_and_raise(ConversionError(FameTime._NO_TIMESTAMP.format(value)))
209
+ return int(FameTime.convert_datetime_to_fame_time_step(value)) # type: ignore[arg-type]
210
+ try:
211
+ return int(value)
212
+ except ValueError as e:
213
+ raise log_error(ConversionError(FameTime._NO_TIMESTAMP.format(value))) from e
fameio/tools.py CHANGED
@@ -1,8 +1,10 @@
1
- # SPDX-FileCopyrightText: 2023 German Aerospace Center <fame@dlr.de>
1
+ # SPDX-FileCopyrightText: 2025 German Aerospace Center <fame@dlr.de>
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
+ from __future__ import annotations
5
+
4
6
  from pathlib import Path
5
- from typing import Any, Union
7
+ from typing import Any
6
8
 
7
9
 
8
10
  def keys_to_lower(dictionary: dict[str, Any]) -> dict[str, Any]:
@@ -14,16 +16,15 @@ def ensure_is_list(value: Any) -> list:
14
16
  """Returns a list: Either the provided `value` if it is a list, or a new list containing the provided value"""
15
17
  if isinstance(value, list):
16
18
  return value
17
- else:
18
- return [value]
19
+ return [value]
19
20
 
20
21
 
21
- def ensure_path_exists(path: Union[Path, str]):
22
+ def ensure_path_exists(path: Path | str):
22
23
  """Creates a specified path if not already existent"""
23
24
  Path(path).mkdir(parents=True, exist_ok=True)
24
25
 
25
26
 
26
27
  def clean_up_file_name(name: str) -> str:
27
- """Returns given `name` with replacements defined in `replace_map`"""
28
- replace_map = {" ": "_", ":": "_", "/": "-"}
29
- return name.translate(str.maketrans(replace_map))
28
+ """Returns given `name` replacing spaces and colons with underscore, and slashed with a dash"""
29
+ translation_table = str.maketrans({" ": "_", ":": "_", "/": "-"})
30
+ return name.translate(translation_table)
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: fameio
3
- Version: 3.1.0
3
+ Version: 3.2.0
4
4
  Summary: Tools for input preparation and output digestion of FAME models
5
- Home-page: https://gitlab.com/fame-framework/wiki/-/wikis/home
6
5
  License: Apache-2.0
7
6
  Keywords: FAME,fameio,agent-based modelling,energy systems
8
7
  Author: Felix Nitsch
@@ -20,24 +19,28 @@ Classifier: Programming Language :: Python :: 3.9
20
19
  Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
23
  Classifier: Topic :: Scientific/Engineering
24
- Requires-Dist: fameprotobuf (>=2.0.2,<3.0.0)
24
+ Requires-Dist: fameprotobuf (>=2.0.2,<3.0)
25
25
  Requires-Dist: pandas (>=1.0,<3.0)
26
26
  Requires-Dist: pyyaml (>=6.0,<7.0)
27
- Project-URL: Repository, https://gitlab.com/fame-framework/fame-io/
27
+ Project-URL: Changelog, https://gitlab.com/fame-framework/fame-io/-/blob/main/CHANGELOG.md
28
+ Project-URL: Homepage, https://helmholtz.software/software/fame
29
+ Project-URL: Issue Tracking, https://gitlab.com/fame-framework/fame-io/-/issues
30
+ Project-URL: Repository, https://gitlab.com/fame-framework/fame-io
28
31
  Description-Content-Type: text/markdown
29
32
 
30
33
  <!-- SPDX-FileCopyrightText: 2025 German Aerospace Center <fame@dlr.de>
31
34
 
32
35
  SPDX-License-Identifier: Apache-2.0 -->
33
36
 
34
- | | |
35
- |---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
36
- | **Package** | [![PyPI version](https://badge.fury.io/py/fameio.svg)](https://badge.fury.io/py/fameio) [![PyPI license](https://img.shields.io/pypi/l/fameio.svg)](https://badge.fury.io/py/fameio) [![REUSE status](https://api.reuse.software/badge/gitlab.com/fame-framework/fame-io)](https://api.reuse.software/info/gitlab.com/fame-framework/fame-io) |
37
- | **Tests** | [![pipeline status](https://gitlab.com/fame-framework/fame-io/badges/main/pipeline.svg)](https://gitlab.com/fame-framework/fame-io/commits/main) [![coverage report](https://gitlab.com/fame-framework/fame-io/badges/main/coverage.svg)](https://gitlab.com/fame-framework/fame-io/-/commits/main) |
38
- | **Activity** | ![GitLab last commit](https://img.shields.io/gitlab/last-commit/fame-framework%2Ffame-io) ![GitLab closed issues by-label](https://img.shields.io/gitlab/issues/closed/fame-framework%2Ffame-io) |
39
- | **Style** | [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Common Changelog](https://common-changelog.org/badge.svg)](https://common-changelog.org) |
40
- | **Reference** | [![JOSS](https://joss.theoj.org/papers/10.21105/joss.04958/status.svg)](https://doi.org/10.21105/joss.04958) [![Zenodo](https://zenodo.org/badge/DOI/10.5281/zenodo.4314337.svg)](https://doi.org/10.5281/zenodo.4314337) |
37
+ | | |
38
+ |---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
39
+ | **Package** | ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fameio) ![PyPI - Version](https://img.shields.io/pypi/v/fameio) [![PyPI license](https://img.shields.io/pypi/l/fameio.svg)](https://badge.fury.io/py/fameio) [![REUSE status](https://api.reuse.software/badge/gitlab.com/fame-framework/fame-io)](https://api.reuse.software/info/gitlab.com/fame-framework/fame-io) |
40
+ | **Test** | [![pipeline status](https://gitlab.com/fame-framework/fame-io/badges/main/pipeline.svg)](https://gitlab.com/fame-framework/fame-io/commits/main) [![coverage report](https://gitlab.com/fame-framework/fame-io/badges/main/coverage.svg)](https://gitlab.com/fame-framework/fame-io/-/commits/main) |
41
+ | **Activity** | ![GitLab last commit](https://img.shields.io/gitlab/last-commit/fame-framework%2Ffame-io) ![GitLab closed issues by-label](https://img.shields.io/gitlab/issues/closed/fame-framework%2Ffame-io) |
42
+ | **Style** | [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![log style - common changelog](https://img.shields.io/badge/log_style-common_changelog-blue)](https://common-changelog.org/) ![Static Badge](https://img.shields.io/badge/type%20checked-mypy-039dfc) [![linting: pylint](https://img.shields.io/badge/linting-pylint-green)](https://github.com/pylint-dev/pylint) |
43
+ | **Reference** | [![JOSS](https://joss.theoj.org/papers/10.21105/joss.04958/status.svg)](https://doi.org/10.21105/joss.04958) [![Zenodo](https://zenodo.org/badge/DOI/10.5281/zenodo.4314337.svg)](https://doi.org/10.5281/zenodo.4314337) |
41
44
 
42
45
  # FAME-Io
43
46
 
@@ -362,7 +365,9 @@ Agent Parameters:
362
365
  * `Attributes` Optional; if the agent has any attributes, specify them here in the format "AttributeName: value"; please
363
366
  see attribute table above
364
367
  * `Metadata` Optional; can be assigned to each instance of an Agent, as well as to each of its Attributes
368
+ * `Ext` Optional; Reserved key for parameters not used by fameio but its extensions, e.g., FAME-Gui
365
369
 
370
+ A warning is logged for any other key at this level.
366
371
  The specified `Attributes` for each agent must match the specified `Attributes` options in the linked Schema (see
367
372
  above).
368
373
  For better structure and readability of the `scenario.yaml`, `Attributes` may also be specified in a nested way as
@@ -642,7 +647,7 @@ These CSV files follow a specific structure:
642
647
  * They should contain exactly two columns - any other columns are ignored.
643
648
  A warning is raised if more than two non-empty columns are detected.
644
649
  * The first column must be a time stamp in form `YYYY-MM-DD_hh:mm:ss` or
645
- a [FAME-Timestamp](https://gitlab.com/fame-framework/wiki/-/wikis/architecture/decisions/TimeStamp) integer value
650
+ a [FAME-Timestamp](https://gitlab.com/fame-framework/wiki/-/wikis/architecture/decisions/TimeStamp) integer value.
646
651
  * The second column must be a numerical value (either integer or floating-point)
647
652
  * The separator of the two columns is a semicolon
648
653
  * The data must **not** have headers, except for comments marked with `#`
@@ -662,6 +667,7 @@ Please refer also to the detailed article about `TimeStamps` in
662
667
  the [FAME-Wiki](https://gitlab.com/fame-framework/wiki/-/wikis/TimeStamp).
663
668
  For large CSV files (with more than 20,000 rows) we recommend using the integer representation of FAME-Timestamps in the
664
669
  first column (instead of text representation) to improve conversion speed.
670
+ A warning will be raised for very large files (exceeding 50,000 rows) that require time stamp conversion.
665
671
 
666
672
  ### Split and join multiple YAML files
667
673
 
@@ -0,0 +1,56 @@
1
+ fameio/__init__.py,sha256=LiE7kRXW0pMIB4hTPC0T_ppGz9O0swd0Ca1-b99hOMc,229
2
+ fameio/cli/__init__.py,sha256=YAxIBl8azJDFaKr0iGaba94UH3Xy-KhQtxrGtwz3FpM,179
3
+ fameio/cli/convert_results.py,sha256=ix5pcmci8GG6q5JTteA9m-na1YmyJTqOuqfEs5CSKGE,3460
4
+ fameio/cli/make_config.py,sha256=-kw6-I4mFU5NRi2MjKhnRzU9WxEqGNlrzjX6lHr9Wpo,2734
5
+ fameio/cli/options.py,sha256=k_bVfVo8GEoqJzLLfzVpfrol51IA9AWjIGASQsATruY,1269
6
+ fameio/cli/parser.py,sha256=8T3FRpeiBm-6VkILTd_XVatFYpopiZjFRGNSs_l35Vo,8909
7
+ fameio/input/__init__.py,sha256=73a3vchTU9c--1uJcJTTaB8CGajnTD-ufraQjNtzh8k,504
8
+ fameio/input/loader/__init__.py,sha256=yo-sEnI7i0puMpKHENw9zaNq6VfYDLVyw6T0GXiOu6Q,2715
9
+ fameio/input/loader/controller.py,sha256=yb7lLc3KDBzdZ7myZ6Q6FPBwX3DkSfHU7f8ArtAbcuI,7769
10
+ fameio/input/loader/loader.py,sha256=uxIt6lwPuo6gpme-BA-W6eLayVic9cH5m6M7ZnJ-xGk,5324
11
+ fameio/input/metadata.py,sha256=vaDSKmk433XMvZhehAU60LdASEhrs29mp1zpQJ0NffY,6544
12
+ fameio/input/resolver.py,sha256=RK6X4mSv2OPEO_ZXc6VJWN0pfvA0okkSse7fHuCOVP0,1920
13
+ fameio/input/scenario/__init__.py,sha256=Pb8O9rVOTwEo48WIgiq1kBnpovpc4D_syC6EjTFGHew,404
14
+ fameio/input/scenario/agent.py,sha256=D2rt94jNqoCpvVDVa2TUXrxw2D_L9dCzOOGXleDVQE8,5451
15
+ fameio/input/scenario/attribute.py,sha256=T7eTDU80HFAVZqpjkh1W7-PSnE9epQZ_gdLTMHdeEv4,9720
16
+ fameio/input/scenario/contract.py,sha256=H6XWbVUmRJzpAfWMFW7R4f8upuYAWtEumUOy-Rqx-Uk,13174
17
+ fameio/input/scenario/exception.py,sha256=uZSiudjgQ0cwIDJPJoowsTRJxm6MmcobEOpzSDDZfUI,1944
18
+ fameio/input/scenario/fameiofactory.py,sha256=-LHVHirqa_TXA0RvABRQSV_tM--VTYtDpWlt4K9kmIw,2847
19
+ fameio/input/scenario/generalproperties.py,sha256=gEiOPN0vRDy0ChsN4aG7D5GyKVfTTEAl6G7ZIoVLfgc,3751
20
+ fameio/input/scenario/scenario.py,sha256=9jdJ37MFSUoklAyVi2q_4719o8vcHXtAQCig2B3mkiY,8396
21
+ fameio/input/scenario/stringset.py,sha256=qm2C8HTWVcZIf20gj456FpTfkD1fVu6icoc4NpkMJ5w,2534
22
+ fameio/input/schema/__init__.py,sha256=oIsJVC0hUhwJf_XIBpd1NNTR8sOWEthAy98m6uR7gKc,327
23
+ fameio/input/schema/agenttype.py,sha256=vouiTB_p63y1ceXZXpsUaGdh6QLx_TroFA7peoTcgIE,5699
24
+ fameio/input/schema/attribute.py,sha256=XpCfbZybuftLv5iQlsoJQ99MJEdNt3sGu38gxuJ_V8s,14916
25
+ fameio/input/schema/java_packages.py,sha256=nbvOcj1P0GPyKDQFwK7fO0rS16ElOd7YPEKt5qteYF0,2948
26
+ fameio/input/schema/schema.py,sha256=D6mkCm1CjNxe4xPATkaFf9hqfX9fbBRtbZp3gb8lqLE,3844
27
+ fameio/input/validator.py,sha256=gDAW51la4p3kzjoWbL1G_Hjoab1d5hYFD88rMOfUKSs,19213
28
+ fameio/input/writer.py,sha256=QUd1m3a-xMlgoWoO1JTrFG2IVWst-gVh9ZSa4XAIhtA,15937
29
+ fameio/logs.py,sha256=idBSshztqzXQM92yZWDIB9pNAUMQIsY4JyRh2fqdXz0,4252
30
+ fameio/output/__init__.py,sha256=ixupBH6NNsC36gL4egdS6jg1fcpH1nFqJGeAUKDrS3E,211
31
+ fameio/output/agent_type.py,sha256=2GGDzyMRNIn7B8fzwwx_6TSwRkDTEA6w5eHs67ck3jM,6462
32
+ fameio/output/conversion.py,sha256=Zps-U1SMvRkYGtTm3T2EYbjmmpKYvV5XoI_sxiYto0I,4676
33
+ fameio/output/csv_writer.py,sha256=Ye26DZ0A_xDvOTi0zPQp7MqtfIibQqWYrNaypI67c0o,7602
34
+ fameio/output/data_transformer.py,sha256=haQFtuiplfndfG5uAZjiEf39zeOhRXVV8ZXH0-PLEfU,5250
35
+ fameio/output/input_dao.py,sha256=PZuZO6FpcVsTvOhr4JLiC0oHW2lSkongtUDmfmr2nCg,8432
36
+ fameio/output/output_dao.py,sha256=slKQJM--dlyr48ZaHp6fsmsyxaokPGSizQETbM7S2as,4890
37
+ fameio/output/reader.py,sha256=fiitnvTGLv4uEz4GT2-2UdCZRlj_AOUrQqQA_8irOaU,6599
38
+ fameio/output/yaml_writer.py,sha256=vuXqbCsO5yvKJreoEbI7qiMg1rNEkhGzK9XYZiMmDTs,1095
39
+ fameio/scripts/__init__.py,sha256=9HlariFV2QOJ69XIJtLSIyKBBGmJN2Vgih3r1K7Ln5Y,937
40
+ fameio/scripts/__init__.py.license,sha256=2-OqCNxP4504xY2XQqseYypJi1_Qx4xJSzO3t7c3ACM,107
41
+ fameio/scripts/convert_results.py,sha256=2k9cYh1rzA5ukfQEbrGH8GIK86v7z8PyS0FNRHx-sVY,7694
42
+ fameio/scripts/convert_results.py.license,sha256=EXKiZn-aoR7nO3auGMNGk9upHbobPLHAIBYUO0S6LUg,107
43
+ fameio/scripts/exception.py,sha256=sgGGTIVKUzflp0J7H4lEsPBgALHqZ898BILeCVrJRzs,235
44
+ fameio/scripts/make_config.py,sha256=htGUKVUJtTL6i8kF1PJPGZEGJCqPvNKoW-dMg0BLhrE,2021
45
+ fameio/scripts/make_config.py.license,sha256=EXKiZn-aoR7nO3auGMNGk9upHbobPLHAIBYUO0S6LUg,107
46
+ fameio/series.py,sha256=P5DvPOwzZxN5h4b0LFSqT0xw8WSqHXtb9-bp3j_povA,12192
47
+ fameio/time.py,sha256=-rF7-XEDgbvDmIL3nGSpOtJwtjfa05jfCysnyepQ2Wo,8458
48
+ fameio/tools.py,sha256=SsPWTeqc2vS4_F4bBkLXY2LX5fp6ITe0f2FTxkejmlY,1104
49
+ fameio-3.2.0.dist-info/entry_points.txt,sha256=jvQVfwJjZXPWQjJlhj1Dt6PTeblryTc1GxjKeK90twI,123
50
+ fameio-3.2.0.dist-info/LICENSE.txt,sha256=eGHBZnhr9CWjE95SWjRfmhtK1lvVn5X4Fpf3KrrAZDg,10391
51
+ fameio-3.2.0.dist-info/LICENSES/Apache-2.0.txt,sha256=eGHBZnhr9CWjE95SWjRfmhtK1lvVn5X4Fpf3KrrAZDg,10391
52
+ fameio-3.2.0.dist-info/LICENSES/CC-BY-4.0.txt,sha256=y9WvMYKGt0ZW8UXf9QkZB8wj1tjJrQngKR7CSXeSukE,19051
53
+ fameio-3.2.0.dist-info/LICENSES/CC0-1.0.txt,sha256=9Ofzc7m5lpUDN-jUGkopOcLZC3cl6brz1QhKInF60yg,7169
54
+ fameio-3.2.0.dist-info/METADATA,sha256=2k0dbtDQhG3ep0HyXlt8UQf0Xy1b4kc-ysGL--Etp6I,39946
55
+ fameio-3.2.0.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
56
+ fameio-3.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.0
2
+ Generator: poetry-core 2.1.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any