From e639d59f0246da610b8c1e727b3a44efb6641db3 Mon Sep 17 00:00:00 2001 From: Benjamin Rodenberg Date: Wed, 19 Jun 2024 15:42:21 +0200 Subject: [PATCH 1/4] Use copy(deepcopy=true) --- fenicsprecice/solverstate.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fenicsprecice/solverstate.py b/fenicsprecice/solverstate.py index ca90a96f..1370080a 100644 --- a/fenicsprecice/solverstate.py +++ b/fenicsprecice/solverstate.py @@ -13,9 +13,9 @@ def __init__(self, payload, t, n): Iteration number. """ try: - self.payload = payload.copy() - except AttributeError: # if .copy() does not exist, it probably is a list - self.payload = [item.copy() for item in payload] + self.payload = payload.copy(deepcopy=True) + except (AttributeError, TypeError): # AttributeError, if .copy() does not exist; TypeError, if .copy(deepcopy) does not exist. -> Probably a list + self.payload = [item.copy(deepcopy=True) for item in payload] self.t = t self.n = n @@ -34,9 +34,9 @@ def get_state(self): Iteration number. """ try: - return self.payload.copy(), self.t, self.n - except AttributeError: # if .copy() does not exist, it probably is a list - return [item.copy() for item in self.payload], self.t, self.n + return self.payload.copy(deepcopy=True), self.t, self.n + except (AttributeError, TypeError): # AttributeError, if .copy() does not exist; TypeError, if .copy(deepcopy) does not exist. -> Probably a list + return [item.copy(deepcopy=True) for item in self.payload], self.t, self.n def print_state(self): payload, t, n = self.get_state() From e8aa3d7e155932567fa22e9af48e54b5409c4450 Mon Sep 17 00:00:00 2001 From: Benjamin Rodenberg Date: Tue, 20 Aug 2024 10:41:26 +0200 Subject: [PATCH 2/4] Fix MockedArray.copy. --- tests/integration/test_fenicsprecice.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/integration/test_fenicsprecice.py b/tests/integration/test_fenicsprecice.py index faec6038..5bca1e22 100644 --- a/tests/integration/test_fenicsprecice.py +++ b/tests/integration/test_fenicsprecice.py @@ -25,7 +25,11 @@ def assign(self, new_value): """ self.value = new_value.value - def copy(self): + def copy(self, deepcopy=False): + """ + mock of dolfin.Function.copy + :param deepcopy: has no effect but we need to provide it to avoid throwing TypeError if copy(deepcopy=True) is called + """ returned_array = MockedArray() returned_array.value = self.value return returned_array From 419ef68f8685ac4efaac2169b517792aa5c0f1ab Mon Sep 17 00:00:00 2001 From: Benjamin Rodenberg Date: Tue, 20 Aug 2024 10:47:36 +0200 Subject: [PATCH 3/4] Add changelog entry. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5f64a12..351f6c81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## latest +* Use `copy(deepcopy=True)` when checkpointing to make checkpointing more user-friendly and secure. [#172](https://github.com/precice/fenics-adapter/pull/172) * Add unit tests for checkpointing. [#173](https://github.com/precice/fenics-adapter/pull/173) ## 2.1.0 From 7b161b43593730a5ecb682dedec49c777711e5b4 Mon Sep 17 00:00:00 2001 From: Benjamin Rodenberg Date: Tue, 20 Aug 2024 10:59:48 +0200 Subject: [PATCH 4/4] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 351f6c81..1ad96d2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## latest -* Use `copy(deepcopy=True)` when checkpointing to make checkpointing more user-friendly and secure. [#172](https://github.com/precice/fenics-adapter/pull/172) +* Use `copy(deepcopy=True)` when checkpointing to make checkpointing more user-friendly and secure. IMPORTANT: might increase runtime, please open an issue if you face serious problems. [#172](https://github.com/precice/fenics-adapter/pull/172) * Add unit tests for checkpointing. [#173](https://github.com/precice/fenics-adapter/pull/173) ## 2.1.0