Fix: Prevent kspaceFirstOrder3D from modifying input source and sensor #613
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The kspaceFirstOrder3D simulation function was unintentionally modifying the input
source
andsensor
objects. This occurred because the internalkWaveSimulation
object and its helper functions were operating directly on these mutable input objects.This commit addresses the issue by:
Modifying
kWaveSimulation.__init__
to create deep copies of the inputsource
andsensor
objects. All internal operations withinkWaveSimulation
and its helper functions (likesave_to_disk_func
andretract_transducer_grid_size
) now use these copies. The original objects you passed remain unchanged.Adding a regression test (
tests/test_kspaceFirstOrder3D_state.py
). This test verifies that critical attributes of thesource
andsensor
objects (e.g.,source.p0
,sensor.mask
) are not altered after calls tokspaceFirstOrder3D
, and that the function can be called multiple times with the same input objects without error or state corruption.This ensures that the
source
andsensor
states remain consistent, allowing them to be reused for multiple simulations or checkpointing without unexpected side effects, resolving bug #600.