From 555a49a36b0a948f581fdfeef76cfec4f121320c Mon Sep 17 00:00:00 2001 From: Martin Lang Date: Sat, 8 Jun 2024 17:11:00 +0200 Subject: [PATCH] Fix kwarg setup: _checkargs must modify kwargs inplace to fulfil assumptions in micromagneticmodel --- oommfc/drivers/driver.py | 10 ++++------ oommfc/drivers/hysteresisdriver.py | 14 ++++++-------- oommfc/drivers/mindriver.py | 2 +- oommfc/drivers/timedriver.py | 1 - 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/oommfc/drivers/driver.py b/oommfc/drivers/driver.py index 47bdb9d..3403c37 100644 --- a/oommfc/drivers/driver.py +++ b/oommfc/drivers/driver.py @@ -21,12 +21,11 @@ def __init__(self, **kwargs): self.autoselect_evolver = True @abc.abstractmethod - def _checkargs(self, kwargs) -> dict: + def _checkargs(self, kwargs): """Check drive keyword arguments. - This method can also update keyword arguments where required. It must return - a dict of all keyword arguments (initial or modified) that shall be used for the - simulation. + This method can also update keyword arguments where required. Changes must + happen in-place, i.e. `kwargs` must be modified directly. """ def drive_kwargs_setup(self, drive_kwargs): @@ -61,12 +60,11 @@ def drive_kwargs_setup(self, drive_kwargs): save additional data. Defaults to ``None``. """ - drive_kwargs = self._checkargs(drive_kwargs) + self._checkargs(drive_kwargs) drive_kwargs.setdefault("fixed_subregions", None) drive_kwargs.setdefault("output_step", False) drive_kwargs.setdefault("n_threads", None) drive_kwargs.setdefault("compute", None) - return drive_kwargs def schedule_kwargs_setup(self, schedule_kwargs): """Additional keyword arguments allowed for schedule. diff --git a/oommfc/drivers/hysteresisdriver.py b/oommfc/drivers/hysteresisdriver.py index 75143ce..f4630fe 100644 --- a/oommfc/drivers/hysteresisdriver.py +++ b/oommfc/drivers/hysteresisdriver.py @@ -79,12 +79,12 @@ def _checkargs(self, kwargs): if all(item in kwargs for item in ["Hmin", "Hmax", "n"]): # case of a symmetric hysteresis simulation # construct symmetric Hsteps from (Hmin, Hmax, n) - kwargs = { - "Hsteps": [ - [kwargs["Hmin"], kwargs["Hmax"], kwargs["n"]], - [kwargs["Hmax"], kwargs["Hmin"], kwargs["n"]], - ] - } + kwargs["Hsteps"] = [ + [kwargs["Hmin"], kwargs["Hmax"], kwargs["n"]], + [kwargs["Hmax"], kwargs["Hmin"], kwargs["n"]], + ] + for key in ["Hmin", "Hmax", "n"]: + kwargs.pop(key) if "Hsteps" in kwargs: # case of a stepped hysteresis simulation @@ -101,8 +101,6 @@ def _checkargs(self, kwargs): ) return ValueError(msg) - return kwargs - @staticmethod def _checkvalues(Hmin, Hmax, n): for item in [Hmin, Hmax]: diff --git a/oommfc/drivers/mindriver.py b/oommfc/drivers/mindriver.py index a04b9aa..f93fbb7 100644 --- a/oommfc/drivers/mindriver.py +++ b/oommfc/drivers/mindriver.py @@ -57,7 +57,7 @@ class MinDriver(Driver): ] def _checkargs(self, kwargs): - return kwargs # no kwargs should be checked + pass # no kwargs should be checked def _check_system(self, system): """Checks the system has energy in it""" diff --git a/oommfc/drivers/timedriver.py b/oommfc/drivers/timedriver.py index 3df8070..9f6fff3 100644 --- a/oommfc/drivers/timedriver.py +++ b/oommfc/drivers/timedriver.py @@ -66,7 +66,6 @@ def _checkargs(self, kwargs): if n <= 0: msg = f"Cannot drive with {n=}." raise ValueError(msg) - return kwargs def _check_system(self, system): """Checks the system has dynamics in it"""