Skip to content

Commit b547a56

Browse files
authored
fix(apisimulation.py): fix exchange-related bugs (#99)
* __repr__ silently dropped the exchanges section (missing s +=) * get_exchange(None) failed to return the first detected exchange * ApiSimulation.load iterated the just-created empty exchanges dict instead of exchange_names, so exchanges and get_exchange() never returned a real exchange
1 parent 1d112bb commit b547a56

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

autotest/test_interface.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from modflow_devtools.misc import set_dir
88

99
from modflowapi import Callbacks, ModflowApi, run_simulation
10+
from modflowapi.extensions.apiexchange import ApiExchange
1011
from modflowapi.extensions.pakbase import AdvancedPackage, ArrayPackage, ListPackage
1112

1213
data_pth = Path("../docs/examples/data")
@@ -293,6 +294,20 @@ def callback(sim, step):
293294
if len(sim.models) != 2:
294295
raise AssertionError("Invalid number of models")
295296

297+
assert sim.exchange_names == ["gwf-gwf_1"]
298+
299+
exchange = sim.get_exchange()
300+
assert isinstance(exchange, ApiExchange)
301+
302+
named_exchange = sim.get_exchange("gwf-gwf_1")
303+
assert named_exchange is exchange
304+
305+
with pytest.raises(KeyError):
306+
sim.get_exchange("not_a_real_exchange")
307+
308+
assert "Exchanges include" in repr(sim)
309+
assert "gwf-gwf_1" in repr(sim)
310+
296311
name = "two_models"
297312
sim_pth = data_pth / name
298313
test_pth = function_tmpdir / name

modflowapi/extensions/apisimulation.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def __repr__(self):
6161
if self._exchanges:
6262
s += "\tExchanges include:\n"
6363
for name, exchange in self._exchanges.items():
64-
f"\t\t{name}: {type(exchange)}\n"
64+
s += f"\t\t{name}: {type(exchange)}\n"
6565

6666
return s
6767

@@ -256,8 +256,7 @@ def get_exchange(self, exchange_name=None):
256256
raise AssertionError("No exchanges are present in this simulation")
257257

258258
if exchange_name is None:
259-
for _, exg in self._exchanges:
260-
return exg
259+
return next(iter(self._exchanges.values()))
261260

262261
else:
263262
if exchange_name in self._exchanges:
@@ -375,7 +374,7 @@ def load(mf6):
375374

376375
# sim_packages: tdis, gwf-gwf, sln
377376
exchanges = {}
378-
for exchange_name in exchanges:
377+
for exchange_name in exchange_names:
379378
exchange = ApiExchange(mf6, exchange_name)
380379
exchanges[exchange_name.lower()] = exchange
381380

0 commit comments

Comments
 (0)