fameio 2.1.0__py3-none-any.whl → 2.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.
CHANGELOG.md CHANGED
@@ -3,12 +3,24 @@
3
3
  SPDX-License-Identifier: CC0-1.0 -->
4
4
 
5
5
  # Changelog
6
+ ## [2.2.0](https://gitlab.com/fame-framework/fame-io/-/tags/v2.2.0) - TBA
7
+ ### Changed
8
+ - New command line option `-enc --encoding` to change encoding when reading yaml-files
9
+ - Improve error message when timeseries is not found and is number string #178 (@dlr-cjs)
10
+
11
+ ### Added
12
+ - Add writing of FAME-Io and FAME-Protobuf versions to created input protobuf #192 (@dlr-cjs)
13
+ - Add deprecation warning for section `GeneralProperties.Output` in scenario #203 (@dlr-cjs)
14
+
15
+ ## [2.1.1](https://gitlab.com/fame-framework/fame-io/-/tags/v2.1.1) - 2024-05-28
16
+ ### Fixed
17
+ - ConvertFameResults: Fix crash on complex column conversion if Agent has no simple columns #204 (@dlr_fn @dlr-cjs)
6
18
 
7
19
  ## [2.1.0](https://gitlab.com/fame-framework/fame-io/-/tags/v2.1.0) - 2024-05-11
8
20
  ### Changed
9
- - Changed format of auto-created timeseries from constant values #196 (@dlr-cjs)
10
- - Changed default log level to "WARNING" #191 (@dlr_fn @dlr-cjs)
11
- - Adapted link-formatting in Changelog !155 (@dlr-cjs)
21
+ - Change format of auto-created timeseries from constant values #196 (@dlr-cjs)
22
+ - Change default log level to "WARNING" #191 (@dlr_fn @dlr-cjs)
23
+ - Adapt link-formatting in Changelog !155 (@dlr-cjs)
12
24
 
13
25
  ### Added
14
26
  - Read java package names from Schema and write to input.pb #198 (@dlr-cjs)
@@ -17,7 +17,7 @@ from fameio.source.results.reader import Reader
17
17
  from fameio.source.results.yaml_writer import data_to_yaml_file
18
18
 
19
19
  ERR_MEMORY_ERROR = "Out of memory. Try using `-m` or `--memory-saving` option."
20
- ERR_MEMORY_SEVERE = "Out of memory despite memory-saving mode. Reduce output interval in `FAME-Core` and rerun model"
20
+ ERR_MEMORY_SEVERE = "Out of memory despite memory-saving mode. Reduce output interval in `FAME-Core` and rerun model."
21
21
 
22
22
 
23
23
  def run(config: dict = None) -> None:
@@ -19,7 +19,7 @@ def run(config: dict = None) -> None:
19
19
 
20
20
  file = config[Options.FILE]
21
21
  check_for_yaml_file_type(Path(file))
22
- scenario = Scenario.from_dict(load_yaml(Path(file)))
22
+ scenario = Scenario.from_dict(load_yaml(Path(file), encoding=config[Options.INPUT_ENCODING]))
23
23
  SchemaValidator.check_agents_have_contracts(scenario)
24
24
 
25
25
  timeseries_manager = SchemaValidator.validate_scenario_and_timeseries(scenario)
@@ -12,6 +12,7 @@ from fameio.source.cli.parser import (
12
12
  add_logfile_argument,
13
13
  add_output_argument,
14
14
  map_namespace_to_options_dict,
15
+ add_encoding_argument,
15
16
  )
16
17
 
17
18
  CLI_DEFAULTS = {
@@ -19,10 +20,15 @@ CLI_DEFAULTS = {
19
20
  Options.LOG_LEVEL: "WARN",
20
21
  Options.LOG_FILE: None,
21
22
  Options.OUTPUT: Path("config.pb"),
23
+ Options.INPUT_ENCODING: None,
22
24
  }
23
25
 
24
26
  _INFILE_PATH_HELP = "provide path to configuration file"
25
27
  _OUTFILE_PATH_HELP = "provide file-path for the file to generate"
28
+ _ENCODING_HELP = (
29
+ "provide encoding; will be applied to all input yaml files, "
30
+ "for available encodings see https://docs.python.org/3.9/library/codecs.html#standard-encodings"
31
+ )
26
32
 
27
33
 
28
34
  def handle_args(args: List[str], defaults: Optional[Dict[Options, Any]] = None) -> Dict[Options, Any]:
@@ -54,6 +60,7 @@ def _prepare_parser(defaults: Optional[Dict[Options, Any]]) -> argparse.Argument
54
60
  add_log_level_argument(parser, _get_default(defaults, Options.LOG_LEVEL))
55
61
  add_logfile_argument(parser, _get_default(defaults, Options.LOG_FILE))
56
62
  add_output_argument(parser, _get_default(defaults, Options.OUTPUT), _OUTFILE_PATH_HELP)
63
+ add_encoding_argument(parser, _get_default(defaults, Options.INPUT_ENCODING), _ENCODING_HELP)
57
64
  return parser
58
65
 
59
66
 
@@ -33,6 +33,7 @@ class Options(Enum):
33
33
  TIME = auto()
34
34
  TIME_MERGING = auto()
35
35
  INPUT_RECOVERY = auto()
36
+ INPUT_ENCODING = auto()
36
37
 
37
38
 
38
39
  class TimeOptions(ParsableEnum, Enum):
@@ -17,6 +17,7 @@ _OPTION_ARGUMENT_NAME: Dict[str, Union[Options, Dict]] = {
17
17
  "log": Options.LOG_LEVEL,
18
18
  "logfile": Options.LOG_FILE,
19
19
  "output": Options.OUTPUT,
20
+ "encoding": Options.INPUT_ENCODING,
20
21
  "agents": Options.AGENT_LIST,
21
22
  "single_export": Options.SINGLE_AGENT_EXPORT,
22
23
  "memory_saving": Options.MEMORY_SAVING,
@@ -80,6 +81,11 @@ def add_log_level_argument(parser: ArgumentParser, default_value: str) -> None:
80
81
  )
81
82
 
82
83
 
84
+ def add_encoding_argument(parser: ArgumentParser, default_value: Optional[str], help_text: str) -> None:
85
+ """Adds optional argument `enc` to given parser"""
86
+ parser.add_argument("-enc", "--encoding", type=str, default=default_value, help=help_text)
87
+
88
+
83
89
  def add_single_export_argument(parser: ArgumentParser, default_value: bool) -> None:
84
90
  """Adds optional repeatable string argument 'agent' to given `parser`"""
85
91
  help_text = "Enable export of single agents (default=False)"
fameio/source/loader.py CHANGED
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2023 German Aerospace Center <fame@dlr.de>
1
+ # SPDX-FileCopyrightText: 2024 German Aerospace Center <fame@dlr.de>
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
@@ -13,7 +13,9 @@ from fameio.source.path_resolver import PathResolver
13
13
 
14
14
  DISABLING_YAML_FILE_PREFIX = "IGNORE_"
15
15
 
16
- CRIT_ERR_NO_YAML_GIVEN = "Please provide a valid YAML file. Received `-f/--file {}` instead."
16
+ CRIT_NO_YAML_SUFFIX = "File must have a `.yaml` or `.yml` suffix. Received `-f/--file {}` instead."
17
+
18
+ FILE_ENCODINGS = [None]
17
19
 
18
20
 
19
21
  class Args:
@@ -153,7 +155,7 @@ def construct_include(loader: FameYamlLoader, args: yaml.Node) -> Any:
153
155
 
154
156
  joined_data = None
155
157
  for file_name in files:
156
- with open(file_name, "r") as open_file:
158
+ with open(file_name, "r", encoding=FILE_ENCODINGS[0]) as open_file:
157
159
  data = read_data_from_file(open_file, nodes, loader.path_resolver)
158
160
  joined_data = join_data(data, joined_data)
159
161
  log().debug("Joined all files `{}` to joined data `{}`".format(files, joined_data))
@@ -163,16 +165,17 @@ def construct_include(loader: FameYamlLoader, args: yaml.Node) -> Any:
163
165
  FameYamlLoader.add_constructor("!include", construct_include)
164
166
 
165
167
 
166
- def load_yaml(yaml_file_path: Path, path_resolver=PathResolver()):
168
+ def load_yaml(yaml_file_path: Path, path_resolver=PathResolver(), encoding: str = None) -> dict:
167
169
  """Loads the yaml file from given `yaml_file_path` and returns its content"""
168
170
  log().info("Loading yaml from {}".format(yaml_file_path))
169
- with open(yaml_file_path, "r") as configfile:
171
+ FILE_ENCODINGS[0] = encoding
172
+ with open(yaml_file_path, "r", encoding=encoding) as configfile:
170
173
  data = yaml.load(configfile, make_yaml_loader_builder(path_resolver))
174
+ FILE_ENCODINGS[0] = None
171
175
  return data
172
176
 
173
177
 
174
- def check_for_yaml_file_type(yaml_file_path: Path) -> None:
175
- """Raises Exception if given `yaml_file_path` is not a valid YAML file"""
176
- suffix = yaml_file_path.suffix.lower()
177
- if suffix != ".yaml" and suffix != ".yml":
178
- log_and_raise_critical(CRIT_ERR_NO_YAML_GIVEN.format(yaml_file_path))
178
+ def check_for_yaml_file_type(yaml_file: Path) -> None:
179
+ """Raises Exception if given `yaml_file` has no YAML-associated file suffix"""
180
+ if yaml_file.suffix.lower() not in [".yaml", ".yml"]:
181
+ log_and_raise_critical(CRIT_NO_YAML_SUFFIX.format(yaml_file))
@@ -68,4 +68,7 @@ class OutputDAO:
68
68
  """
69
69
  agent_series = self._all_series.pop(agent_name) if agent_name in self._all_series else []
70
70
  agent_type = self._agent_type_log.get_agent_type(agent_name)
71
- return data_transformer.extract_agent_data(agent_series, agent_type)
71
+ extracted_data = data_transformer.extract_agent_data(agent_series, agent_type)
72
+ if None in extracted_data and extracted_data[None].empty:
73
+ extracted_data.pop(None)
74
+ return extracted_data
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: 2023 German Aerospace Center <fame@dlr.de>
1
+ # SPDX-FileCopyrightText: 2024 German Aerospace Center <fame@dlr.de>
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  from __future__ import annotations
@@ -21,8 +21,9 @@ class GeneralProperties:
21
21
  _KEY_INTERVAL = "Interval".lower()
22
22
  _KEY_PROCESS = "Process".lower()
23
23
 
24
- _MISSING_KEY = "General Properties requires key '{}' but it is missing."
25
- _SIMULATION_DURATION = "Simulation starts after its end time - check start and stop times."
24
+ _ERR_MISSING_KEY = "General Properties requires key '{}' but it is missing."
25
+ _ERR_SIMULATION_DURATION = "Simulation starts after its end time - check start and stop times."
26
+ _WARN_OUTPUT_DEPRECATED = "Deprecation warning: GeneralProperties.Output will be removed with FAME-Io version > 3.0"
26
27
 
27
28
  def __init__(
28
29
  self,
@@ -34,7 +35,7 @@ class GeneralProperties:
34
35
  output_process: int,
35
36
  ) -> None:
36
37
  if simulation_stop_time < simulation_start_time:
37
- log().warning(GeneralProperties._SIMULATION_DURATION)
38
+ log().warning(GeneralProperties._ERR_SIMULATION_DURATION)
38
39
  self._run_id = run_id
39
40
  self._simulation_start_time = simulation_start_time
40
41
  self._simulation_stop_time = simulation_stop_time
@@ -52,26 +53,28 @@ class GeneralProperties:
52
53
  get_or_raise(
53
54
  definitions,
54
55
  GeneralProperties._KEY_SIMULATION,
55
- GeneralProperties._MISSING_KEY,
56
+ GeneralProperties._ERR_MISSING_KEY,
56
57
  )
57
58
  )
58
59
  start_time = FameTime.convert_string_if_is_datetime(
59
60
  get_or_raise(
60
61
  simulation_definition,
61
62
  GeneralProperties._KEY_START,
62
- GeneralProperties._MISSING_KEY,
63
+ GeneralProperties._ERR_MISSING_KEY,
63
64
  )
64
65
  )
65
66
  stop_time = FameTime.convert_string_if_is_datetime(
66
67
  get_or_raise(
67
68
  simulation_definition,
68
69
  GeneralProperties._KEY_STOP,
69
- GeneralProperties._MISSING_KEY,
70
+ GeneralProperties._ERR_MISSING_KEY,
70
71
  )
71
72
  )
72
73
  random_seed = get_or_default(simulation_definition, GeneralProperties._KEY_SEED, 1)
73
74
 
74
75
  output_definitions = keys_to_lower(get_or_default(definitions, GeneralProperties._KEY_OUTPUT, dict()))
76
+ if len(output_definitions) > 1:
77
+ log().warning(GeneralProperties._WARN_OUTPUT_DEPRECATED)
75
78
  output_interval = get_or_default(output_definitions, GeneralProperties._KEY_INTERVAL, 100)
76
79
  output_process = get_or_default(output_definitions, GeneralProperties._KEY_PROCESS, 0)
77
80
 
fameio/source/series.py CHANGED
@@ -37,7 +37,8 @@ class TimeSeriesManager:
37
37
  _KEY_ROW_TIME = "timeStep"
38
38
  _KEY_ROW_VALUE = "value"
39
39
 
40
- _ERR_FILE_NOT_FOUND = "Cannot find Timeseries file '{}'"
40
+ _ERR_FILE_NOT_FOUND = "Cannot find Timeseries file '{}'."
41
+ _ERR_NUMERIC_STRING = " Remove quotes to use a constant numeric value instead of a timeseries file."
41
42
  _ERR_CORRUPT_TIME_SERIES_KEY = "TimeSeries file '{}' corrupt: At least one entry in first column isn't a timestamp."
42
43
  _ERR_CORRUPT_TIME_SERIES_VALUE = "TimeSeries file '{}' corrupt: At least one entry in value column isn't numeric."
43
44
  _ERR_NON_NUMERIC = "Values in TimeSeries must be numeric but was: '{}'"
@@ -86,7 +87,10 @@ class TimeSeriesManager:
86
87
  except ConversionException:
87
88
  log_error_and_raise(TimeSeriesException(self._ERR_CORRUPT_TIME_SERIES_KEY.format(identifier)))
88
89
  else:
89
- log_error_and_raise(TimeSeriesException(self._ERR_FILE_NOT_FOUND.format(identifier)))
90
+ message = self._ERR_FILE_NOT_FOUND.format(identifier)
91
+ if self._is_number_string(identifier):
92
+ message += self._ERR_NUMERIC_STRING
93
+ log_error_and_raise(TimeSeriesException(message))
90
94
  else:
91
95
  return self._create_timeseries_from_value(identifier)
92
96
 
@@ -110,6 +114,15 @@ class TimeSeriesManager:
110
114
  log_error_and_raise(TypeError(TimeSeriesManager._ERR_NAN_VALUE))
111
115
  return value
112
116
 
117
+ @staticmethod
118
+ def _is_number_string(identifier: str) -> bool:
119
+ """Returns True if given identifier can be cast to float"""
120
+ try:
121
+ float(identifier)
122
+ return True
123
+ except ValueError:
124
+ return False
125
+
113
126
  @staticmethod
114
127
  def _create_timeseries_from_value(value: Union[int, float]) -> Tuple[str, pd.DataFrame]:
115
128
  """Returns name and dataframe for a new static timeseries created from the given `value`"""
fameio/source/writer.py CHANGED
@@ -1,14 +1,16 @@
1
1
  # SPDX-FileCopyrightText: 2024 German Aerospace Center <fame@dlr.de>
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
-
4
+ import sys
5
+ from importlib.metadata import version
5
6
  from pathlib import Path
6
7
  from typing import Any, Dict, List, Union
7
8
 
9
+ from fameprotobuf.Contract_pb2 import ProtoContract
8
10
  from fameprotobuf.DataStorage_pb2 import DataStorage
9
- from fameprotobuf.InputFile_pb2 import InputData
11
+ from fameprotobuf.ExecutionData_pb2 import ExecutionData
10
12
  from fameprotobuf.Field_pb2 import NestedField
11
- from fameprotobuf.Contract_pb2 import ProtoContract
13
+ from fameprotobuf.InputFile_pb2 import InputData
12
14
  from fameprotobuf.Model_pb2 import ModelData
13
15
 
14
16
  from fameio.source.logs import log_error_and_raise, log
@@ -72,6 +74,7 @@ class ProtoWriter:
72
74
  self._set_schema(pb_input, scenario.schema)
73
75
 
74
76
  self._set_java_package_names(pb_data_storage.model, scenario.schema.packages)
77
+ self._set_execution_versions(pb_data_storage.execution.versions)
75
78
  return pb_data_storage
76
79
 
77
80
  @staticmethod
@@ -239,3 +242,10 @@ class ProtoWriter:
239
242
  except OSError as e:
240
243
  log_error_and_raise(ProtoWriterException(ProtoWriter._NO_FILE_SPECIFIED.format(self.file_path), e))
241
244
  log().info(self._INFO_WRITING_COMPLETED.format(self.file_path))
245
+
246
+ @staticmethod
247
+ def _set_execution_versions(pb_versions: ExecutionData.Versions) -> None:
248
+ """Adds version strings for fameio, fameprotobuf, and python to the given Versions message"""
249
+ pb_versions.fameProtobuf = version("fameprotobuf")
250
+ pb_versions.fameIo = version("fameio")
251
+ pb_versions.python = sys.version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fameio
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Python scripts for operation of FAME models
5
5
  Home-page: https://gitlab.com/fame-framework/wiki/-/wikis/home
6
6
  License: Apache-2.0
@@ -75,11 +75,12 @@ Call structure:
75
75
 
76
76
  You may also specify any of the following arguments:
77
77
 
78
- | Command | Action |
79
- |----------------------|-----------------------------------------------------------------------------------------------------------------|
80
- | `-l` or `--log` | Sets the logging level. Default is `info`. Options are `debug`, `info`, `warning`, `warn`, `error`, `critical`. |
81
- | `-lf` or `--logfile` | Sets the logging file. Default is `None`. If `None` is provided, all logs get only printed to the console. |
82
- | `-o` or `--output` | Sets the path of the compiled protobuf output file. Default is `config.pb`. |
78
+ | Command | Action |
79
+ |------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
80
+ | `-l` or `--log` | Sets the logging level. Default is `info`. Options are `debug`, `info`, `warning`, `warn`, `error`, `critical`. |
81
+ | `-lf` or `--logfile` | Sets the logging file. Default is `None`. If `None` is provided, all logs get only printed to the console. |
82
+ | `-o` or `--output` | Sets the path of the compiled protobuf output file. Default is `config.pb`. |
83
+ | `-enc` or `--encoding` | Sets the encoding of all yaml files to the given one (e.g. 'utf8' or 'cp1252'. Default is `None`, i.e. your operating system's standard. |
83
84
 
84
85
  This could look as follows:
85
86
 
@@ -259,6 +260,8 @@ Parameters:
259
260
  * `StopTime` time stamp in the format YYYY-MM-DD_hh:mm:ss; last moment of the simulation - i.e. simulation terminates
260
261
  after passing that time stamp
261
262
  * `RandomSeed` seed to initialise random number generation; each value leads to a unique series of random numbers.
263
+
264
+ Parameters in section `Output` are deprecated and will be removed in FAME-Io v3.0
262
265
  * `Interval` number of simulation ticks in between write-to-disk events; may be used for performance optimisations;
263
266
  * `Process` id of process that performs write-to-disk operations; leave at 0 to be compatible with single-processes;
264
267
 
@@ -1,18 +1,18 @@
1
- CHANGELOG.md,sha256=cXIVQA_QDtE73CZbA7P_DWqaegoPdVY4389UVQiT87g,10680
1
+ CHANGELOG.md,sha256=H8YzcsZiM8WHQSzP9TOrah5y7nH4fuP4M6SHN4VszYY,11358
2
2
  fameio/__init__.py,sha256=IQm0MNOXkhBexiMXBoNZDK5xHUYgazH7oXm-lc0Vm04,109
3
3
  fameio/scripts/__init__.py,sha256=Bdu79kajJvvmPWdSP82Y6G8MCpP4n9ftTR-snWSbMJY,741
4
4
  fameio/scripts/__init__.py.license,sha256=2-OqCNxP4504xY2XQqseYypJi1_Qx4xJSzO3t7c3ACM,107
5
- fameio/scripts/convert_results.py,sha256=mUO_lKk788JpfLdGYxhNuwYekKDMnoHC8awWgkd56vE,3615
5
+ fameio/scripts/convert_results.py,sha256=UHTRnE8LkhO6lHEkfgettdbhRcRHeZqQw5MkxYpD8T8,3616
6
6
  fameio/scripts/convert_results.py.license,sha256=2-OqCNxP4504xY2XQqseYypJi1_Qx4xJSzO3t7c3ACM,107
7
- fameio/scripts/make_config.py,sha256=OL72ii06m9N0ncWYHdsIivzeOj8Xd_6Se6caWkdCAEs,1347
7
+ fameio/scripts/make_config.py,sha256=KQsj-aPXXtch8ITITCOcQUj6nYhvDs9LO7tdSikUe6w,1388
8
8
  fameio/scripts/make_config.py.license,sha256=2-OqCNxP4504xY2XQqseYypJi1_Qx4xJSzO3t7c3ACM,107
9
9
  fameio/source/__init__.py,sha256=14CnWOIkdSeKQg6FioQSgO7UtEFF6pO4MUtDAUfwNmA,278
10
10
  fameio/source/cli/__init__.py,sha256=UqrdWnYMoy-o2--m0a4c-MtAorsc4eILXaPq27EXM1Q,112
11
11
  fameio/source/cli/convert_results.py,sha256=LY9ySXs3dAyyos0yoc-bY8M1Z9Oti-AgGYEEK5K-Ctg,3412
12
- fameio/source/cli/make_config.py,sha256=Y49qWewg2Z3THWA4drrVp4Avag26cDOcLzBiKmxbESw,2384
13
- fameio/source/cli/options.py,sha256=H7befeI-fDItdzjlqZlpWtJfZGUaYzrfGdzBiWbAg28,1393
14
- fameio/source/cli/parser.py,sha256=0r2CAcBfpinrE3EASxoYv2i_0Obz2zIbe9RqeCwK0kA,9423
15
- fameio/source/loader.py,sha256=xDmTKPmIrSfYQtIZe8cUAbiDKxdFqcTH9n1EckKAZc4,7403
12
+ fameio/source/cli/make_config.py,sha256=phZKimvItl538xnwv9IhBoDkh__YqNlRk4YNDyTOFaA,2738
13
+ fameio/source/cli/options.py,sha256=5DOFq4LMcObrSOlbt74HGE1vghByn-I30YY46tm5Snc,1422
14
+ fameio/source/cli/parser.py,sha256=cVC6j_oy3lBQOC7nrk5oF2m5CpcohOh5y689lhvu4gw,9726
15
+ fameio/source/loader.py,sha256=-Y0j3OrV2MwAlfxFP2YA3ZwZhP-eFVlT6hdHO4Qze2U,7536
16
16
  fameio/source/logs.py,sha256=9Iq9jcglGyALYir-Luxfa-m4uUJX074JkUM0uMwzPNc,3684
17
17
  fameio/source/path_resolver.py,sha256=cIEVvz7Eh4e3Rh87XkwyGiyj9iKxUI7TzWtq6ClhLd8,1321
18
18
  fameio/source/results/__init__.py,sha256=IQm0MNOXkhBexiMXBoNZDK5xHUYgazH7oXm-lc0Vm04,109
@@ -21,7 +21,7 @@ fameio/source/results/conversion.py,sha256=F7rDJ_iJGN1DFt_9jkweGap_TGMJV3UnUyssf
21
21
  fameio/source/results/csv_writer.py,sha256=A4hWnuBmU0cOfFLkW57L0NlH2tHc4H-ME1fmJitZLI8,4856
22
22
  fameio/source/results/data_transformer.py,sha256=tz58m7_TZPE3YjBoDyiMWiP_sz9mWaj1JfW2FjKLVhY,5490
23
23
  fameio/source/results/input_dao.py,sha256=5V_7dUhO1XZGNuwH5041HnMGCcQjC9d9_TBR4FZ9QJE,6919
24
- fameio/source/results/output_dao.py,sha256=8FocGe4yyH3EdHD5Chw9uCGnDetfJoSglBga0o3lnWE,3960
24
+ fameio/source/results/output_dao.py,sha256=-tMewCUS4m3RebTAf8Z33gtlj-SxqRdxnzvGIkg6Ah0,4106
25
25
  fameio/source/results/reader.py,sha256=g3cfbNq7eHO98dxtpqjjPE8_YJVM56Wp0MCnNi3ds5g,5054
26
26
  fameio/source/results/yaml_writer.py,sha256=rOAbeZQgRojYvofUcXreIdIJtdSbOrHAohiNLkmPgCI,837
27
27
  fameio/source/scenario/__init__.py,sha256=YfJvz275GWX8kVWMSMRcF3KsUQNqSAPrwBgNV7tqBTY,372
@@ -30,7 +30,7 @@ fameio/source/scenario/attribute.py,sha256=-Ed6jHlztwf9NhvpfRNt6ohGKKqkPBx_hLvGF
30
30
  fameio/source/scenario/contract.py,sha256=lM2NN_CUDh9iqDghq_F6JE9rEW3ZGUhBJOD0qkjuKBU,9442
31
31
  fameio/source/scenario/exception.py,sha256=7MYN4h40ptMZFD1lLtnK5PWXbAGlsmUSDmUQ5FAKeN8,1554
32
32
  fameio/source/scenario/fameiofactory.py,sha256=7P-x8i9sSU9sIkOlgF6gVRFuNacFMUBrBh4KdHoAUtU,1376
33
- fameio/source/scenario/generalproperties.py,sha256=UysnP8FClKcPCoAzElyRb950Aq1kC8JQPhjs3Fo2OP4,4539
33
+ fameio/source/scenario/generalproperties.py,sha256=TkQV9dEo5zMfNiFITolJU1rQUBi-yDJLpoello39e_0,4796
34
34
  fameio/source/scenario/scenario.py,sha256=j2IVVZlpBJjYECXzBouFtrDXPPES0uSf_Q2l0MzcQkQ,3727
35
35
  fameio/source/schema/__init__.py,sha256=ZGTyliDbjlYGPAjB9bbggzACOYWdhm4I1VSmm7YGmTk,270
36
36
  fameio/source/schema/agenttype.py,sha256=fe6GWJwl2S-J7KmH_eR5Y8Ieez1difez1w7v-r26yGU,5183
@@ -38,16 +38,16 @@ fameio/source/schema/attribute.py,sha256=o2eZjurrYfvBiaZm1WE1XW0u8joHSbbXEKu-385
38
38
  fameio/source/schema/exception.py,sha256=NMftGnrFOaS3MwrjZl8qbx3bi6KYUxhzHJIX1v--B5M,224
39
39
  fameio/source/schema/java_packages.py,sha256=-2ZbAG_htEowB-fBSMizsLWrphyiKfESDDHspzdEQP4,2656
40
40
  fameio/source/schema/schema.py,sha256=-J8VtO4W9Z-OnTV7MFO1umZWIC_epbLCYd6-q4lNQ8Y,2975
41
- fameio/source/series.py,sha256=00HBTz_liP0T_2yRQ3__xjHjZBT0bVGA00CZxcyGCqk,8232
41
+ fameio/source/series.py,sha256=o5tNcZfzfWEmhtzqXeR6hLaX3Wb1lvHLokSHnbvCP3Y,8754
42
42
  fameio/source/time.py,sha256=Vsd95nTubL8x5cwiznJYeti6clZCCHHJv7xjSpYqkF0,6984
43
43
  fameio/source/tools.py,sha256=7YxX-CmsakJJB2RbBhf2u8y1-RyhDhsASHXFztkDIKE,1052
44
44
  fameio/source/validator.py,sha256=cXTDl75zt6NVVyHUUFDL9Y_lg3QuJJfTdW83lv4Krvs,15719
45
- fameio/source/writer.py,sha256=vZd8om08xO4fnb2o6lkLXFdDjDlX3_NcHl6TwR4YYkM,11921
46
- fameio-2.1.0.dist-info/entry_points.txt,sha256=jvQVfwJjZXPWQjJlhj1Dt6PTeblryTc1GxjKeK90twI,123
47
- fameio-2.1.0.dist-info/LICENSE.txt,sha256=eGHBZnhr9CWjE95SWjRfmhtK1lvVn5X4Fpf3KrrAZDg,10391
48
- fameio-2.1.0.dist-info/LICENSES/Apache-2.0.txt,sha256=eGHBZnhr9CWjE95SWjRfmhtK1lvVn5X4Fpf3KrrAZDg,10391
49
- fameio-2.1.0.dist-info/LICENSES/CC-BY-4.0.txt,sha256=y9WvMYKGt0ZW8UXf9QkZB8wj1tjJrQngKR7CSXeSukE,19051
50
- fameio-2.1.0.dist-info/LICENSES/CC0-1.0.txt,sha256=9Ofzc7m5lpUDN-jUGkopOcLZC3cl6brz1QhKInF60yg,7169
51
- fameio-2.1.0.dist-info/METADATA,sha256=Fnk0T5HpZjVPYNb9do_EzAht_PojGc9685u-K4ElSrc,30847
52
- fameio-2.1.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
53
- fameio-2.1.0.dist-info/RECORD,,
45
+ fameio/source/writer.py,sha256=n9ZGRqzkPsuY-hrjGlSeQDuc6OHtgeK9hzM_d_Bvs_U,12456
46
+ fameio-2.2.0.dist-info/entry_points.txt,sha256=jvQVfwJjZXPWQjJlhj1Dt6PTeblryTc1GxjKeK90twI,123
47
+ fameio-2.2.0.dist-info/LICENSE.txt,sha256=eGHBZnhr9CWjE95SWjRfmhtK1lvVn5X4Fpf3KrrAZDg,10391
48
+ fameio-2.2.0.dist-info/LICENSES/Apache-2.0.txt,sha256=eGHBZnhr9CWjE95SWjRfmhtK1lvVn5X4Fpf3KrrAZDg,10391
49
+ fameio-2.2.0.dist-info/LICENSES/CC-BY-4.0.txt,sha256=y9WvMYKGt0ZW8UXf9QkZB8wj1tjJrQngKR7CSXeSukE,19051
50
+ fameio-2.2.0.dist-info/LICENSES/CC0-1.0.txt,sha256=9Ofzc7m5lpUDN-jUGkopOcLZC3cl6brz1QhKInF60yg,7169
51
+ fameio-2.2.0.dist-info/METADATA,sha256=8T_pXeAjdSsE1A24QKLpyWNWnKdUimDiZgMwi0wMa0o,31231
52
+ fameio-2.2.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
53
+ fameio-2.2.0.dist-info/RECORD,,
File without changes