From 9f317d6b1e5b4968c491d8508ea2b8aa93625819 Mon Sep 17 00:00:00 2001 From: Ishaan Desai Date: Thu, 9 Jan 2025 17:56:08 +0100 Subject: [PATCH 1/2] Fix docstrings --- micro_manager/adaptivity/global_adaptivity.py | 2 -- micro_manager/adaptivity/local_adaptivity.py | 4 ++++ micro_manager/micro_manager.py | 10 ++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/micro_manager/adaptivity/global_adaptivity.py b/micro_manager/adaptivity/global_adaptivity.py index d128b58..83f8a77 100644 --- a/micro_manager/adaptivity/global_adaptivity.py +++ b/micro_manager/adaptivity/global_adaptivity.py @@ -31,8 +31,6 @@ def __init__( ---------- configurator : object of class Config Object which has getter functions to get parameters defined in the configuration file. - logger : object of logging - Logger defined from the standard package logging global_number_of_sims : int Total number of simulations in the macro-micro coupled problem. global_ids : list diff --git a/micro_manager/adaptivity/local_adaptivity.py b/micro_manager/adaptivity/local_adaptivity.py index 8348030..5a11916 100644 --- a/micro_manager/adaptivity/local_adaptivity.py +++ b/micro_manager/adaptivity/local_adaptivity.py @@ -18,6 +18,8 @@ def __init__(self, configurator, rank, comm, num_sims) -> None: ---------- configurator : object of class Config Object which has getter functions to get parameters defined in the configuration file. + rank : int + Rank of the current MPI process. comm : MPI.COMM_WORLD Global communicator of MPI. num_sims : int @@ -142,6 +144,8 @@ def log_metrics(self, n: int) -> None: Parameters ---------- + n : int + Current time step """ # MPI Gather is necessary as local adaptivity only stores local data local_active_sims = np.count_nonzero(self._is_sim_active) diff --git a/micro_manager/micro_manager.py b/micro_manager/micro_manager.py index 2a45cce..44be0f9 100644 --- a/micro_manager/micro_manager.py +++ b/micro_manager/micro_manager.py @@ -635,9 +635,8 @@ def _solve_micro_simulations(self, micro_sims_input: list, dt: float) -> tuple: Returns ------- - micro_sims_output : list - List of dicts in which keys are names of data and the values are the data of the output of the micro - simulations. + tuple + A tuple of micro_sims_output (list of Dicts) and dummy adaptivity computation CPU time. """ micro_sims_output: list[dict] = [None] * self._local_number_of_sims @@ -713,9 +712,8 @@ def _solve_micro_simulations_with_adaptivity( Returns ------- - micro_sims_output : list - List of dicts in which keys are names of data and the values are the data of the output of the micro - simulations. + tuple + A tuple of micro_sims_output (list of Dicts) and adaptivity computation CPU time. """ adaptivity_cpu_time = 0.0 From a436880093021282f14cffa9bfdd09a7125b10d9 Mon Sep 17 00:00:00 2001 From: Ishaan Desai Date: Tue, 21 Jan 2025 12:45:19 +0100 Subject: [PATCH 2/2] Remove the scalar and vector keywords from data names in configuration (#142) * Remove the scalar and vector keywords that each data name is associated with * Remove scalar and vector keywords of data names from the documentation * Add CHANGELOG entry * Remove unnecessary reference to Python list in the documentation Co-authored-by: Benjamin Uekermann --------- Co-authored-by: Benjamin Uekermann --- CHANGELOG.md | 1 + docs/configuration.md | 8 +- .../micro-manager-cpp-adaptivity-config.json | 4 +- examples/micro-manager-cpp-config.json | 4 +- ...icro-manager-python-adaptivity-config.json | 4 +- examples/micro-manager-python-config.json | 4 +- micro_manager/config.py | 76 +++++-------------- micro_manager/micro_manager.py | 35 +++------ micro_manager/snapshot/dataset.py | 14 ++-- ...ger-config-global-adaptivity-parallel.json | 4 +- ...icro-manager-config-global-adaptivity.json | 4 +- ...micro-manager-config-local-adaptivity.json | 4 +- .../micro-manager-config-parallel-1.json | 4 +- .../micro-manager-config-parallel-2.json | 4 +- tests/unit/micro-manager-config.json | 4 +- tests/unit/micro-manager-config_crash.json | 4 +- tests/unit/snapshot-config.json | 4 +- tests/unit/test_micro_manager.py | 33 ++++---- tests/unit/test_snapshot_computation.py | 22 ++---- 19 files changed, 91 insertions(+), 146 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7eef2c..dc7bc64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## latest +- Remove the `scalar` and `vector` keyword values from data names in configuration https://github.com/precice/micro-manager/pull/142 - Set default logger to stdout and add output directory setting option for file loggers https://github.com/precice/micro-manager/pull/139 - Remove the `adaptivity_data` data structure and handle all adaptivity data internally https://github.com/precice/micro-manager/pull/137 - Improve logging by wrapping Python logger in a class https://github.com/precice/micro-manager/pull/133 diff --git a/docs/configuration.md b/docs/configuration.md index 7b43423..325261e 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -15,8 +15,8 @@ The Micro Manager is configured with a JSON file. An example configuration file "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-mesh", - "read_data_names": {"temperature": "scalar", "heat-flux": "vector"}, - "write_data_names": {"porosity": "scalar", "conductivity": "vector"} + "read_data_names": ["temperature", "heat-flux"], + "write_data_names": ["porosity", "conductivity"] }, "simulation_params": { "macro_domain_bounds": [0.0, 1.0, 0.0, 1.0, 0.0, 1.0], @@ -40,8 +40,8 @@ Parameter | Description --- | --- `precice_config_file_name` | Path to the preCICE XML configuration file from the current working directory. `macro_mesh_name` | Name of the macro mesh as stated in the preCICE configuration. -`read_data_names` | A Python dictionary with the names of the data to be read from preCICE as keys and `"scalar"` or `"vector"` as values depending on the nature of the data. -`write_data_names` | A Python dictionary with the names of the data to be written to preCICE as keys and `"scalar"` or `"vector"` as values depending on the nature of the data. +`read_data_names` | A list with the names of the data to be read from preCICE. +`write_data_names` | A list with the names of the data to be written to preCICE. ## Simulation Parameters diff --git a/examples/micro-manager-cpp-adaptivity-config.json b/examples/micro-manager-cpp-adaptivity-config.json index d712cea..d5874fc 100644 --- a/examples/micro-manager-cpp-adaptivity-config.json +++ b/examples/micro-manager-cpp-adaptivity-config.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config-adaptivity.xml", "macro_mesh_name": "macro-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/examples/micro-manager-cpp-config.json b/examples/micro-manager-cpp-config.json index cb6ce61..58e120b 100644 --- a/examples/micro-manager-cpp-config.json +++ b/examples/micro-manager-cpp-config.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/examples/micro-manager-python-adaptivity-config.json b/examples/micro-manager-python-adaptivity-config.json index 1f5b0f6..25b15f0 100644 --- a/examples/micro-manager-python-adaptivity-config.json +++ b/examples/micro-manager-python-adaptivity-config.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config-adaptivity.xml", "macro_mesh_name": "macro-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/examples/micro-manager-python-config.json b/examples/micro-manager-python-config.json index 136dc69..f54d9f8 100644 --- a/examples/micro-manager-python-config.json +++ b/examples/micro-manager-python-config.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/micro_manager/config.py b/micro_manager/config.py index 1b31bdc..185152f 100644 --- a/micro_manager/config.py +++ b/micro_manager/config.py @@ -28,14 +28,14 @@ def __init__(self, config_file_name): self._precice_config_file_name = None self._macro_mesh_name = None - self._read_data_names = dict() - self._write_data_names = dict() + self._read_data_names = None + self._write_data_names = None self._micro_dt = None self._macro_domain_bounds = None self._ranks_per_axis = None self._micro_output_n = 1 - self._diagnostics_data_names = dict() + self._diagnostics_data_names = None self._output_micro_sim_time = False @@ -103,17 +103,8 @@ def _read_json(self, config_file_name): try: self._write_data_names = self._data["coupling_params"]["write_data_names"] assert isinstance( - self._write_data_names, dict - ), "Write data entry is not a dictionary" - for key, value in self._write_data_names.items(): - if value == "scalar": - self._write_data_names[key] = False - elif value == "vector": - self._write_data_names[key] = True - else: - raise Exception( - "Write data dictionary as a value other than 'scalar' or 'vector'" - ) + self._write_data_names, list + ), "Write data entry is not a list" except BaseException: self._logger.log_info_one_rank( "No write data names provided. Micro manager will only read data from preCICE." @@ -122,17 +113,8 @@ def _read_json(self, config_file_name): try: self._read_data_names = self._data["coupling_params"]["read_data_names"] assert isinstance( - self._read_data_names, dict - ), "Read data entry is not a dictionary" - for key, value in self._read_data_names.items(): - if value == "scalar": - self._read_data_names[key] = False - elif value == "vector": - self._read_data_names[key] = True - else: - raise Exception( - "Read data dictionary as a value other than 'scalar' or 'vector'" - ) + self._read_data_names, list + ), "Read data entry is not a list" except BaseException: self._logger.log_info_one_rank( "No read data names provided. Micro manager will only write data to preCICE." @@ -143,7 +125,7 @@ def _read_json(self, config_file_name): try: if self._data["diagnostics"]["output_micro_sim_solve_time"] == "True": self._output_micro_sim_time = True - self._write_data_names["solve_cpu_time"] = False + self._write_data_names.append("solve_cpu_time") except BaseException: self._logger.log_info_one_rank( "Micro manager will not output time required to solve each micro simulation." @@ -204,11 +186,11 @@ def read_json_micro_manager(self): else: raise Exception("Adaptivity type can be either local or global.") - exchange_data = {**self._read_data_names, **self._write_data_names} - for dname in self._data["simulation_params"]["adaptivity_settings"]["data"]: - self._data_for_adaptivity[dname] = exchange_data[dname] + self._data_for_adaptivity = self._data["simulation_params"][ + "adaptivity_settings" + ]["data"] - if self._data_for_adaptivity.keys() == self._write_data_names.keys(): + if self._data_for_adaptivity == self._write_data_names: self._logger.log_info_one_rank( "Only micro simulation data is used for similarity computation in adaptivity. This would lead to the" " same set of active and inactive simulations for the entire simulation time. If this is not intended," @@ -261,8 +243,8 @@ def read_json_micro_manager(self): "Micro Manager will compute adaptivity once at the start of every time window" ) - self._write_data_names["active_state"] = False - self._write_data_names["active_steps"] = False + self._write_data_names.append("active_state") + self._write_data_names.append("active_steps") try: if ( @@ -272,7 +254,7 @@ def read_json_micro_manager(self): == "True" ): self._adaptivity_output_cpu_time = True - self._write_data_names["adaptivity_cpu_time"] = False + self._write_data_names.append("adaptivity_cpu_time") except BaseException: self._logger.log_info_one_rank( "Micro Manager will not output CPU time of the adaptivity computation." @@ -286,7 +268,7 @@ def read_json_micro_manager(self): == "True" ): self._adaptivity_output_mem_usage = True - self._write_data_names["adaptivity_mem_usage"] = False + self._write_data_names.append("adaptivity_mem_usage") except BaseException: self._logger.log_info_one_rank( "Micro Manager will not output CPU time of the adaptivity computation." @@ -299,17 +281,8 @@ def read_json_micro_manager(self): try: diagnostics_data_names = self._data["diagnostics"]["data_from_micro_sims"] assert isinstance( - diagnostics_data_names, dict - ), "Diagnostics data is not a dictionary" - for key, value in diagnostics_data_names.items(): - if value == "scalar": - self._write_data_names[key] = False - elif value == "vector": - self._write_data_names[key] = True - else: - raise Exception( - "Diagnostics data dictionary as a value other than 'scalar' or 'vector'" - ) + diagnostics_data_names, list + ), "Diagnostics data is not a list" except BaseException: self._logger.log_info_one_rank( "No diagnostics data is defined. Micro Manager will not output any diagnostics data." @@ -349,17 +322,8 @@ def read_json_snapshot(self): try: diagnostics_data_names = self._data["diagnostics"]["data_from_micro_sims"] assert isinstance( - diagnostics_data_names, dict - ), "Diagnostics data is not a dictionary" - for key, value in diagnostics_data_names.items(): - if value == "scalar": - self._write_data_names[key] = False - elif value == "vector": - self._write_data_names[key] = True - else: - raise Exception( - "Diagnostics data dictionary has a value other than 'scalar' or 'vector'" - ) + diagnostics_data_names, list + ), "Diagnostics data is not a list" except BaseException: self._logger.log_info_one_rank( "No diagnostics data is defined. Snapshot computation will not output any diagnostics data." diff --git a/micro_manager/micro_manager.py b/micro_manager/micro_manager.py index 44be0f9..a9e0b33 100644 --- a/micro_manager/micro_manager.py +++ b/micro_manager/micro_manager.py @@ -103,15 +103,15 @@ def __init__(self, config_file: str) -> None: self._adaptivity_data_names = self._config.get_data_for_adaptivity() # Names of macro data to be used for adaptivity computation - self._adaptivity_macro_data_names = dict() + self._adaptivity_macro_data_names: list = [] # Names of micro data to be used for adaptivity computation - self._adaptivity_micro_data_names = dict() - for name, is_data_vector in self._adaptivity_data_names.items(): + self._adaptivity_micro_data_names: list = [] + for name in self._adaptivity_data_names: if name in self._read_data_names: - self._adaptivity_macro_data_names[name] = is_data_vector + self._adaptivity_macro_data_names.append(name) if name in self._write_data_names: - self._adaptivity_micro_data_names[name] = is_data_vector + self._adaptivity_micro_data_names.append(name) self._adaptivity_in_every_implicit_step = ( self._config.is_adaptivity_required_in_every_implicit_iteration() @@ -356,20 +356,8 @@ def initialize(self) -> None: ) if self._is_adaptivity_on: - for name, is_data_vector in self._adaptivity_data_names.items(): - if is_data_vector: - self._data_for_adaptivity[name] = np.zeros( - ( - self._local_number_of_sims, - self._participant.get_data_dimensions( - self._macro_mesh_name, name - ), - ) - ) - else: - self._data_for_adaptivity[name] = np.zeros( - (self._local_number_of_sims) - ) + for name in self._adaptivity_data_names: + self._data_for_adaptivity[name] = np.zeros((self._local_number_of_sims)) # Create lists of local and global IDs sim_id = np.sum(nms_all_ranks[: self._rank]) @@ -572,10 +560,11 @@ def _read_data_from_precice(self, dt) -> list: List of dicts in which keys are names of data being read and the values are the data from preCICE. """ read_data: Dict[str, list] = dict() - for name in self._read_data_names.keys(): + + for name in self._read_data_names: read_data[name] = [] - for name in self._read_data_names.keys(): + for name in self._read_data_names: read_data.update( { name: self._participant.read_data( @@ -608,7 +597,7 @@ def _write_data_to_precice(self, data: list) -> None: for name, values in d.items(): data_dict[name].append(values) - for dname in self._write_data_names.keys(): + for dname in self._write_data_names: self._participant.write_data( self._macro_mesh_name, dname, @@ -616,7 +605,7 @@ def _write_data_to_precice(self, data: list) -> None: data_dict[dname], ) else: - for dname in self._write_data_names.keys(): + for dname in self._write_data_names: self._participant.write_data( self._macro_mesh_name, dname, [], np.array([]) ) diff --git a/micro_manager/snapshot/dataset.py b/micro_manager/snapshot/dataset.py index 19ed3f0..50ccacd 100644 --- a/micro_manager/snapshot/dataset.py +++ b/micro_manager/snapshot/dataset.py @@ -172,17 +172,17 @@ def read_hdf(self, file_path: str, data_names: dict, start: int, end: int) -> li parameter_data = dict() output = [] # Read data by iterating over the relevant datasets - for key in data_names.keys(): - parameter_data[key] = np.asarray(parameter_file[key][start:end]) - my_key = ( - key # Save one key to be able to iterate over the length of the data + for name in data_names: + parameter_data[name] = np.asarray(parameter_file[name][start:end]) + my_name = ( + name # Save one name to be able to iterate over the length of the data ) # Iterate over len of data. In each iteration write data from all macro data sets # to a dictionary and append it to the output list of dicts. - for i in range(len(parameter_data[my_key])): + for i in range(len(parameter_data[my_name])): current_data = dict() - for key in data_names.keys(): - current_data[key] = parameter_data[key][i] + for name in data_names: + current_data[name] = parameter_data[name][i] output.append(current_data) return output diff --git a/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity-parallel.json b/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity-parallel.json index cc2cd67..01d58cc 100644 --- a/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity-parallel.json +++ b/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity-parallel.json @@ -4,8 +4,8 @@ "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-cube-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity.json b/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity.json index fb47972..67d4534 100644 --- a/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity.json +++ b/tests/integration/test_unit_cube/micro-manager-config-global-adaptivity.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-cube-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/tests/integration/test_unit_cube/micro-manager-config-local-adaptivity.json b/tests/integration/test_unit_cube/micro-manager-config-local-adaptivity.json index a22f321..e130537 100644 --- a/tests/integration/test_unit_cube/micro-manager-config-local-adaptivity.json +++ b/tests/integration/test_unit_cube/micro-manager-config-local-adaptivity.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-cube-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/tests/integration/test_unit_cube/micro-manager-config-parallel-1.json b/tests/integration/test_unit_cube/micro-manager-config-parallel-1.json index 49ff2fa..e5feb34 100644 --- a/tests/integration/test_unit_cube/micro-manager-config-parallel-1.json +++ b/tests/integration/test_unit_cube/micro-manager-config-parallel-1.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-cube-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/tests/integration/test_unit_cube/micro-manager-config-parallel-2.json b/tests/integration/test_unit_cube/micro-manager-config-parallel-2.json index 265b5b3..3a4d067 100644 --- a/tests/integration/test_unit_cube/micro-manager-config-parallel-2.json +++ b/tests/integration/test_unit_cube/micro-manager-config-parallel-2.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "precice-config.xml", "macro_mesh_name": "macro-cube-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/tests/unit/micro-manager-config.json b/tests/unit/micro-manager-config.json index 07e030c..40cf70d 100644 --- a/tests/unit/micro-manager-config.json +++ b/tests/unit/micro-manager-config.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "dummy-config.xml", "macro_mesh_name": "dummy-macro-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 0.1, diff --git a/tests/unit/micro-manager-config_crash.json b/tests/unit/micro-manager-config_crash.json index f95e14b..0149289 100644 --- a/tests/unit/micro-manager-config_crash.json +++ b/tests/unit/micro-manager-config_crash.json @@ -3,8 +3,8 @@ "coupling_params": { "precice_config_file_name": "dummy-config.xml", "macro_mesh_name": "dummy-macro-mesh", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0, diff --git a/tests/unit/snapshot-config.json b/tests/unit/snapshot-config.json index e076a16..1841513 100644 --- a/tests/unit/snapshot-config.json +++ b/tests/unit/snapshot-config.json @@ -2,8 +2,8 @@ "micro_file_name": "test_snapshot_computation", "coupling_params": { "parameter_file_name": "test_parameter.hdf5", - "read_data_names": {"macro-scalar-data": "scalar", "macro-vector-data": "vector"}, - "write_data_names": {"micro-scalar-data": "scalar", "micro-vector-data": "vector"} + "read_data_names": ["macro-scalar-data", "macro-vector-data"], + "write_data_names": ["micro-scalar-data", "micro-vector-data"] }, "simulation_params": { "micro_dt": 1.0 diff --git a/tests/unit/test_micro_manager.py b/tests/unit/test_micro_manager.py index 216cb25..e7718ae 100644 --- a/tests/unit/test_micro_manager.py +++ b/tests/unit/test_micro_manager.py @@ -24,20 +24,17 @@ def solve(self, macro_data, dt): class TestFunctioncalls(TestCase): def setUp(self): - self.fake_read_data_names = { - "macro-scalar-data": False, - "macro-vector-data": True, - } + self.fake_read_data_names = ["macro-scalar-data", "macro-vector-data"] self.fake_read_data = [ {"macro-scalar-data": 1, "macro-vector-data": np.array([0, 1, 2])} ] * 4 - self.fake_write_data_names = { - "micro-scalar-data": False, - "micro-vector-data": True, - "solve_cpu_time": False, - "active_state": False, - "active_steps": False, - } + self.fake_write_data_names = [ + "micro-scalar-data", + "micro-vector-data", + "solve_cpu_time", + "active_state", + "active_steps", + ] self.fake_write_data = [ { "micro-scalar-data": 1, @@ -56,8 +53,8 @@ def test_micromanager_constructor(self): manager = micro_manager.MicroManagerCoupling("micro-manager-config.json") self.assertListEqual(manager._macro_bounds, self.macro_bounds) - self.assertDictEqual(manager._read_data_names, self.fake_read_data_names) - self.assertDictEqual(self.fake_write_data_names, manager._write_data_names) + self.assertListEqual(manager._read_data_names, self.fake_read_data_names) + self.assertListEqual(self.fake_write_data_names, manager._write_data_names) self.assertEqual(manager._micro_n_out, 10) def test_initialization(self): @@ -75,8 +72,8 @@ def test_initialization(self): self.assertEqual( manager._micro_sims[0].very_important_value, 0 ) # test inheritance - self.assertDictEqual(manager._read_data_names, self.fake_read_data_names) - self.assertDictEqual(self.fake_write_data_names, manager._write_data_names) + self.assertListEqual(manager._read_data_names, self.fake_read_data_names) + self.assertListEqual(self.fake_write_data_names, manager._write_data_names) def test_read_write_data_from_precice(self): """ @@ -130,10 +127,10 @@ def test_config(self): self.assertEqual(config._micro_file_name, "test_micro_manager") self.assertEqual(config._macro_mesh_name, "dummy-macro-mesh") self.assertEqual(config._micro_output_n, 10) - self.assertDictEqual(config._read_data_names, self.fake_read_data_names) - self.assertDictEqual(self.fake_write_data_names, config._write_data_names) + self.assertListEqual(config._read_data_names, self.fake_read_data_names) + self.assertListEqual(self.fake_write_data_names, config._write_data_names) self.assertEqual(config._adaptivity, True) - self.assertDictEqual(config._data_for_adaptivity, self.fake_read_data_names) + self.assertListEqual(config._data_for_adaptivity, self.fake_read_data_names) self.assertEqual(config._adaptivity_type, "local") self.assertEqual(config._adaptivity_history_param, 0.5) self.assertEqual(config._adaptivity_coarsening_constant, 0.3) diff --git a/tests/unit/test_snapshot_computation.py b/tests/unit/test_snapshot_computation.py index d72f4d4..c4cc807 100644 --- a/tests/unit/test_snapshot_computation.py +++ b/tests/unit/test_snapshot_computation.py @@ -22,19 +22,13 @@ def solve(self, macro_data, dt): class TestFunctionCalls(TestCase): def setUp(self): - self.fake_read_data_names = { - "macro-scalar-data": False, - "macro-vector-data": True, - } + self.fake_read_data_names = ["macro-scalar-data", "macro-vector-data"] self.fake_read_data = { "macro-scalar-data": 1, "macro-vector-data": np.array([0, 1, 2]), } - self.fake_write_data_names = { - "micro-scalar-data": False, - "micro-vector-data": True, - } + self.fake_write_data_names = ["micro-scalar-data", "micro-vector-data"] self.fake_write_data = [ { "micro-scalar-data": 1, @@ -48,10 +42,10 @@ def test_snapshot_constructor(self): """ snapshot_object = MicroManagerSnapshot("snapshot-config.json") - self.assertDictEqual( + self.assertListEqual( snapshot_object._read_data_names, self.fake_read_data_names ) - self.assertDictEqual( + self.assertListEqual( snapshot_object._write_data_names, self.fake_write_data_names ) self.assertEqual( @@ -72,10 +66,10 @@ def test_initialize(self): snapshot_object.initialize() self.assertEqual(snapshot_object._global_number_of_sims, 1) - self.assertDictEqual( + self.assertListEqual( snapshot_object._read_data_names, self.fake_read_data_names ) - self.assertDictEqual( + self.assertListEqual( snapshot_object._write_data_names, self.fake_write_data_names ) self.assertTrue(os.path.isfile(complete_path)) @@ -144,8 +138,8 @@ def test_config(self): config._parameter_file_name.split("/")[-1], "test_parameter.hdf5" ) self.assertEqual(config._micro_file_name, "test_snapshot_computation") - self.assertDictEqual(config._read_data_names, self.fake_read_data_names) - self.assertDictEqual(config._write_data_names, self.fake_write_data_names) + self.assertListEqual(config._read_data_names, self.fake_read_data_names) + self.assertListEqual(config._write_data_names, self.fake_write_data_names) self.assertEqual(config._postprocessing_file_name, "snapshot_post_processing") self.assertTrue(config._initialize_once)