Skip to content

Commit fbd5cd1

Browse files
authored
Fixes isses missed due to "invisible" tests (#291)
* apply fixes for previously missed test cases
1 parent e31ac08 commit fbd5cd1

9 files changed

Lines changed: 70 additions & 54 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## latest
44

5+
- Applied fixes for previously missed test cases due to #290 [#291](https://github.com/precice/micro-manager/pull/291)
56
- Fixed non-visible CI test cases on PR interface [#290](https://github.com/precice/micro-manager/pull/290)
67
- Moved Simulation Class ownership and loading to Model Manager [#286](https://github.com/precice/micro-manager/pull/286)
78
- Added simulation container for more encapsulation [#284](https://github.com/precice/micro-manager/pull/284)

micro_manager/micro_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,7 @@ def _solve_micro_simulations_with_model_adaptivity(
11161116
sim = self._sim_container[lid]
11171117
res = -1
11181118
if sim is not None:
1119-
res = self._model_adaptivity_controller.get_sim_class_resolution(sim)
1119+
res = self._model_manager.get_idx_of_sim(sim)
11201120
output[lid]["model_resolution"] = res
11211121
return output
11221122

micro_manager/snapshot/snapshot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def solve(self) -> None:
8787
micro_problem_cls = create_simulation_class(
8888
self._logger,
8989
self._micro_problem,
90-
self._config.micro_file_name(),
90+
self._config.micro_file_names()[0],
9191
1,
9292
None,
9393
)
@@ -261,7 +261,7 @@ def initialize(self) -> None:
261261
for i in range(self._local_number_of_sims):
262262
self._global_ids_of_local_sims.append(sim_id)
263263
sim_id += 1
264-
self._micro_problem = load_backend_class(self._config.micro_file_name())
264+
self._micro_problem = load_backend_class(self._config.micro_file_names()[0])
265265

266266
self._micro_sims_have_output = False
267267
if hasattr(self._micro_problem, "output") and callable(

tests/unit/snapshot-config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"micro_file_name": "test_snapshot_computation",
2+
"micro_file_names": ["test_snapshot_computation"],
33
"output_directory": "output",
44
"coupling_params": {
55
"parameter_file_name": "hdf_files/test_parameter.hdf5",

tests/unit/test_adaptivity_parallel.py

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from unittest.mock import MagicMock
33

44
import numpy as np
5+
from micro_manager.simulation_container import SimulationContainer
56
from mpi4py import MPI
67

78
from micro_manager.tools.p2p import get_ranks_of_sims
@@ -60,17 +61,20 @@ def test_update_inactive_sims_global_adaptivity(self):
6061
self._configurator.adaptivity_similarity_measure = MagicMock(return_value="L1")
6162

6263
sim_cls = create_simulation_class(
63-
MagicMock(),
64-
MicroSimulation,
65-
__file__,
66-
1,
67-
None,
64+
MagicMock(), MicroSimulation, __file__, 1, None, "test_micro_manager"
6865
)
6966

70-
adaptivity_controller = GlobalAdaptivityCalculator(
71-
self._configurator,
67+
container = SimulationContainer()
68+
container.initialize(
7269
5,
70+
len(global_ids),
7371
global_ids,
72+
[np.zeros(3) for _ in range(len(global_ids))],
73+
)
74+
75+
adaptivity_controller = GlobalAdaptivityCalculator(
76+
self._configurator,
77+
sim_container=container,
7478
participant=MagicMock(),
7579
base_logger=MagicMock(),
7680
rank=self._rank,
@@ -93,11 +97,10 @@ def check_for_activation(i, active):
9397

9498
adaptivity_controller._check_for_activation = check_for_activation
9599

96-
dummy_micro_sims = []
97-
for i in global_ids:
98-
dummy_micro_sims.append(sim_cls(i))
100+
for lid, gid in enumerate(container.local_gids):
101+
container[lid] = sim_cls(gid)
99102

100-
adaptivity_controller._update_inactive_sims(dummy_micro_sims)
103+
adaptivity_controller._update_inactive_sims()
101104

102105
self.assertTrue(
103106
np.array_equal(expected_is_sim_active, adaptivity_controller._is_sim_active)
@@ -110,9 +113,9 @@ def check_for_activation(i, active):
110113
)
111114

112115
if self._rank == 0:
113-
self.assertTrue(np.array_equal([3, 3, 3], dummy_micro_sims[0].get_state()))
116+
self.assertTrue(np.array_equal([3, 3, 3], container[0].get_state()))
114117
elif self._rank == 1:
115-
self.assertTrue(np.array_equal([2, 2, 2], dummy_micro_sims[1].get_state()))
118+
self.assertTrue(np.array_equal([2, 2, 2], container[1].get_state()))
116119

117120
def test_update_all_active_sims_global_adaptivity(self):
118121
"""
@@ -150,10 +153,17 @@ def test_update_all_active_sims_global_adaptivity(self):
150153
None,
151154
)
152155

153-
adaptivity_controller = GlobalAdaptivityCalculator(
154-
self._configurator,
156+
container = SimulationContainer()
157+
container.initialize(
155158
5,
159+
len(global_ids),
156160
global_ids,
161+
[np.zeros(3) for _ in range(len(global_ids))],
162+
)
163+
164+
adaptivity_controller = GlobalAdaptivityCalculator(
165+
self._configurator,
166+
sim_container=container,
157167
participant=MagicMock(),
158168
base_logger=MagicMock(),
159169
rank=self._rank,
@@ -164,13 +174,11 @@ def test_update_all_active_sims_global_adaptivity(self):
164174

165175
adaptivity_controller._adaptivity_data_names = ["data1", "data2"]
166176

167-
dummy_micro_sims = []
168-
for i in global_ids:
169-
dummy_micro_sims.append(sim_cls(i))
177+
for lid, gid in enumerate(container.local_gids):
178+
container[lid] = sim_cls(gid)
170179

171180
adaptivity_controller.compute_adaptivity(
172181
0.1,
173-
dummy_micro_sims,
174182
data_for_adaptivity,
175183
)
176184

@@ -212,10 +220,17 @@ def test_communicate_micro_output(self):
212220
None,
213221
)
214222

215-
adaptivity_controller = GlobalAdaptivityCalculator(
216-
self._configurator,
223+
container = SimulationContainer()
224+
container.initialize(
217225
5,
226+
len(global_ids),
218227
global_ids,
228+
[np.zeros(3) for _ in range(len(global_ids))],
229+
)
230+
231+
adaptivity_controller = GlobalAdaptivityCalculator(
232+
self._configurator,
233+
sim_container=container,
219234
participant=MagicMock(),
220235
base_logger=MagicMock(),
221236
rank=self._rank,
@@ -250,26 +265,6 @@ def test_get_ranks_of_sims(self):
250265
global_ids = [3, 4]
251266
expected_ranks_of_sims = [0, 0, 0, 1, 1]
252267

253-
sim_cls = create_simulation_class(
254-
MagicMock(),
255-
MicroSimulation,
256-
__file__,
257-
1,
258-
None,
259-
)
260-
261-
adaptivity_controller = GlobalAdaptivityCalculator(
262-
self._configurator,
263-
5,
264-
global_ids,
265-
participant=MagicMock(),
266-
base_logger=MagicMock(),
267-
rank=self._rank,
268-
comm=self._comm,
269-
micro_problem_cls=sim_cls,
270-
model_manager=ModelManager(),
271-
)
272-
273268
actual_ranks_of_sims = get_ranks_of_sims(global_ids, self._rank, self._comm, 5)
274269

275270
self.assertTrue(np.array_equal(expected_ranks_of_sims, actual_ranks_of_sims))

tests/unit/test_load_balancing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def test_redistribute_active_sims_two_ranks(self):
277277
load_balancer.balance()
278278

279279
actual_global_ids = [] #
280-
for lid in container.local_gids:
280+
for lid, gid in enumerate(container.local_gids):
281281
sim = container[lid]
282282
actual_global_ids.append(sim.get_global_id())
283283
self.assertListEqual(actual_global_ids, expected_global_ids)
@@ -457,7 +457,7 @@ def test_redistribute_active_sims_four_ranks(self):
457457
load_balancer.balance()
458458

459459
actual_global_ids = []
460-
for lid in container.local_gids:
460+
for lid, gid in enumerate(container.local_gids):
461461
sim = container[lid]
462462
actual_global_ids.append(sim.get_global_id())
463463
self.assertListEqual(actual_global_ids, expected_global_ids)

tests/unit/test_micro_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def test_config(self):
140140
self.assertEqual(
141141
config.precice_config_file_name().split("/")[-1], "dummy-config.xml"
142142
)
143-
self.assertEqual(config.micro_file_name(), "test_micro_manager")
143+
self.assertListEqual(config.micro_file_names(), ["test_micro_manager"])
144144
self.assertEqual(config.macro_mesh_name(), "Macro-Mesh")
145145
self.assertEqual(config.micro_output_n(), 10)
146146
self.assertListEqual(config.read_data_names(), self.fake_read_data_names)

tests/unit/test_model_adaptivity.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ def destroy(self):
3939
class DummyModelManager:
4040
def __init__(self):
4141
self.created_instances = []
42+
self.num_models = 2
43+
self.models = [
44+
DummyModelClass("fine"),
45+
DummyModelClass("coarse"),
46+
]
47+
self.name_to_idx = {
48+
"fine": 0,
49+
"coarse": 1,
50+
}
4251

4352
def get_instance(self, gid, target_class, *, late_init=False):
4453
self.created_instances.append(
@@ -50,15 +59,24 @@ def get_instance(self, gid, target_class, *, late_init=False):
5059
)
5160
return DummySimulation(target_class.name, gid, late_init=late_init)
5261

62+
def get_idx_of_sim(self, sim):
63+
if sim.name not in self.name_to_idx:
64+
raise KeyError("unknown sim type")
65+
return self.name_to_idx[sim.name]
66+
67+
def get_cls_by_idx(self, idx):
68+
return self.models[idx]
69+
70+
def get_cls_by_name(self, name):
71+
if name not in self.name_to_idx:
72+
raise KeyError("unknown model name")
73+
return self.models[self.name_to_idx[name]]
74+
5375

5476
class TestModelAdaptivity(TestCase):
5577
def _make_controller(self, container, switching_func):
5678
controller = ModelAdaptivity.__new__(ModelAdaptivity)
5779
controller._switching_func = switching_func
58-
controller._model_classes = [
59-
DummyModelClass("fine"),
60-
DummyModelClass("coarse"),
61-
]
6280
controller._sim_container = container
6381
controller._model_manager = DummyModelManager()
6482
controller._comm = MPI.COMM_SELF
@@ -150,13 +168,14 @@ def switching_function(resolution, location, t, input, prev_output):
150168
manager._mesh_vertex_coords = np.array([[0.0, 0.0, 0.0]])
151169
manager._t = 1.0
152170
manager._sim_container = container
171+
manager._model_manager = controller._model_manager
153172

154173
solve_calls = []
155174

156175
def solve_variant(micro_sims_input, dt, computed_outputs):
157176
solve_calls.append(
158177
{
159-
"sim_name": manager._micro_sims[0].name,
178+
"sim_name": manager._sim_container[0].name,
160179
"computed_outputs": computed_outputs.copy(),
161180
}
162181
)
@@ -201,6 +220,7 @@ def test_manager_loop_exits_on_invalid_switch_request(self):
201220
manager._mesh_vertex_coords = np.array([[0.0, 0.0, 0.0]])
202221
manager._t = 1.0
203222
manager._sim_container = container
223+
manager._model_manager = controller._model_manager
204224

205225
solve_calls = []
206226

tests/unit/test_snapshot_computation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def test_config(self):
150150
self.assertEqual(
151151
config.parameter_file_name().split("/")[-1], "test_parameter.hdf5"
152152
)
153-
self.assertEqual(config.micro_file_name(), "test_snapshot_computation")
153+
self.assertListEqual(config.micro_file_names(), ["test_snapshot_computation"])
154154
self.assertListEqual(config.read_data_names(), self.fake_read_data_names)
155155
self.assertListEqual(config.write_data_names(), self.fake_write_data_names)
156156
self.assertEqual(config.postprocessing_file_name(), "snapshot_post_processing")

0 commit comments

Comments
 (0)