k-Wave-python 0.6.1__tar.gz → 0.6.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- k_wave_python-0.6.2/.git +1 -0
- k_wave_python-0.6.2/CLAUDE.md +95 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/PKG-INFO +13 -12
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/__init__.py +60 -7
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/compat.py +4 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/enums.py +12 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/create_absorption_variables.py +4 -4
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/kgrid.py +1 -1
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kmedium.py +57 -44
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/kspaceFirstOrder.py +72 -1
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspaceFirstOrder2D.py +5 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/kspaceFirstOrder3D.py +5 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/solvers/cpp_simulation.py +48 -13
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/solvers/kspace_solver.py +180 -62
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/checks.py +62 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/mapgen.py +38 -35
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/math.py +2 -4
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/plot.py +2 -2
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/typing.py +16 -2
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/plans/release-strategy.md +69 -10
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/pyproject.toml +13 -12
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/uv.lock +869 -437
- k_wave_python-0.6.1/.claude/settings.local.json +0 -45
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.claude/settings.local.json +0 -45
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.git +0 -1
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/CONTRIBUTING.md +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/code_enhancement.md +0 -28
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/config.yml +0 -1
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/example.md +0 -17
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/codecov.yml +0 -5
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/dependabot.yml +0 -11
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/codespell.yml +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/link-check.yml +0 -35
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/pytest.yml +0 -124
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/ruff.yml +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/run-examples.yml +0 -56
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/test_example.yml +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/test_optional_dependencies.yml +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/test_pages.yml +0 -18
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/Makefile +0 -44
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/Makefile +0 -20
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/README.md +0 -76
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/conf.py +0 -101
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/development/development_environment.rst +0 -187
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/examples_guide.rst +0 -179
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/contrib.rst +0 -4
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/first_simulation.rst +0 -215
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/grid_overview.rst +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/legacy_licenses/gpl-3.0.rst +0 -674
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/legacy_licenses/mit.rst +0 -17
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/license.rst +0 -30
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/medium_overview.rst +0 -48
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/new_api.rst +0 -137
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/sensor_overview.rst +0 -66
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/source_overview.rst +0 -52
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/index.rst +0 -62
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.data.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.enums.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.executor.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation.rst +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.create_absorption_variables.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.display_simulation_params.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.expand_grid_matrices.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.retract_transducer_grid_size.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.rst +0 -26
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.save_to_disk_func.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.scale_source_terms_func.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.set_sound_speed_ref.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kgrid.rst +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kmedium.rst +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.ksensor.rst +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.ksource.rst +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder2D.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder3D.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrderAS.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.ktransducer.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.options.rst +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.beamform.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.converter.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.rst +0 -21
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.shifted_transform.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.tools.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.recorder.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.rst +0 -42
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.checks.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.colormap.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.conversion.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.data.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.dotdictionary.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.filters.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.interp.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.io.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.mapgen.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.math.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.matrix.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.pml.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.rst +0 -31
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.signals.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.tictoc.rst +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/make.bat +0 -35
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/reconstruction/index.rst +0 -19
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/reconstruction/time_reversal.rst +0 -80
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/README.md +0 -57
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/at_array_as_sensor.ipynb +0 -299
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/at_array_as_sensor.py +0 -166
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_source/README.md +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_source/at_array_as_source.ipynb +0 -262
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_source/at_array_as_source.py +0 -161
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/README.md +0 -5
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/at_circular_piston_3D.ipynb +0 -455
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/at_circular_piston_3D.py +0 -207
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/README.md +0 -5
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/at_circular_piston_AS.ipynb +0 -383
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/at_circular_piston_AS.py +0 -233
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/README.md +0 -5
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/at_focused_annular_array_3D.ipynb +0 -452
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/at_focused_annular_array_3D.py +0 -214
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/README.md +0 -5
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/at_focused_bowl_3D.ipynb +0 -451
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/at_focused_bowl_3D.py +0 -233
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/README.md +0 -5
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/at_focused_bowl_AS.ipynb +0 -384
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/at_focused_bowl_AS.py +0 -236
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/at_linear_array_transducer.ipynb +0 -201
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/at_linear_array_transducer.py +0 -108
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/checkpointing/README.md +0 -5
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/checkpointing/checkpoint.py +0 -107
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_1D_simulation.py +0 -81
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/README.md +0 -16
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/ivp_photoacoustic_waveforms.ipynb +0 -284
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/ivp_photoacoustic_waveforms.py +0 -164
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/README.md +0 -21
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/modified_matlab_example.m +0 -68
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/na_controlling_the_pml.ipynb +0 -232
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/new_api_ivp_2D.py +0 -39
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/new_api_transducer_3D.py +0 -48
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/pr_2D_FFT_line_sensor.ipynb +0 -298
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/pr_2D_FFT_line_sensor.py +0 -154
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/pr_2D_TR_line_sensor.ipynb +0 -335
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/pr_2D_TR_line_sensor.py +0 -182
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/pr_3D_FFT_planar_sensor.ipynb +0 -313
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/pr_3D_FFT_planar_sensor.py +0 -205
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/pr_3D_TR_planar_sensor.ipynb +0 -307
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/pr_3D_TR_planar_sensor.py +0 -214
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/sd_directivity_modelling_2D.ipynb +0 -244
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/sd_directivity_modelling_2D.py +0 -126
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/sd_focussed_detector_2D.ipynb +0 -207
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/sd_focussed_detector_2D.py +0 -107
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/sd_focussed_detector_3D.ipynb +0 -275
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/sd_focussed_detector_3D.py +0 -132
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/unified_entry_point_demo.py +0 -85
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/README.md +0 -7
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/us_beam_patterns.ipynb +0 -345
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/us_beam_patterns.py +0 -272
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/README.md +0 -8
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/example_utils.py +0 -16
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/us_bmode_linear_transducer.ipynb +0 -478
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/us_bmode_linear_transducer.py +0 -286
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/README.md +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/us_bmode_phased_array.ipynb +0 -468
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/us_bmode_phased_array.py +0 -277
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/README.md +0 -8
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/us_defining_transducer.ipynb +0 -271
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/us_defining_transducer.py +0 -148
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/__init__.py +0 -205
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/bin/darwin/kspaceFirstOrder-OMP +0 -0
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/__init__.py +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/phantom.py +0 -132
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/plan.py +0 -77
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/run.py +0 -88
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/sensor.py +0 -40
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/session_cmd.py +0 -39
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/source.py +0 -43
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/main.py +0 -34
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/schema.py +0 -98
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/session.py +0 -226
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/enums.py +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/executor.py +0 -143
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/kgrid.py +0 -701
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder.py +0 -275
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder3D.py +0 -388
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/solvers/cpp_simulation.py +0 -350
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/solvers/kspace_solver.py +0 -833
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/utils/__init__.py +0 -0
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/utils/filters.py +0 -601
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/plans/release-strategy.md +0 -435
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/pyproject.toml +0 -131
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/pytest.ini +0 -6
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/run_examples.py +0 -26
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/EXAMPLE_source_two.bmp +0 -0
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/__init__.py +0 -8
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/diff_utils.py +0 -32
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/h5_summary.py +0 -104
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/__init__.py +0 -0
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/conftest.py +0 -77
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_ivp_1D.py +0 -44
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_ivp_2D.py +0 -46
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_parity_2D.py +0 -122
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_photoacoustic.py +0 -71
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_stubs.py +0 -81
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+private_kwave_functions/tolStar.m +0 -231
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+utils/TestRecorder.m +0 -42
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+utils/rand_vector_in_range.m +0 -3
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_FocusAnnulusONeil.m +0 -32
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_FocusBowlONeil.m +0 -33
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_angularSpectrum.m +0 -24
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_angularSpectrumCW.m +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_at_linear_array_transducer.m +0 -131
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_attenComp.m +0 -24
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_brenner.m +0 -13
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_cart2grid.m +0 -75
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_checkStability.m +0 -50
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_computeLinearTransform.m +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_createCWSignals.m +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_ivp_1D.m +0 -35
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_ivp_2D.m +0 -33
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_parity_2D.m +0 -58
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_photoacoustic.m +0 -50
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_expandMatrix.m +0 -53
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_fourierShift.m +0 -40
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gaussian.m +0 -12
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gaussianFilter.m +0 -23
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getAffineMatrix.m +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getColorMap.m +0 -13
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getWin.m +0 -92
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_get_delta_BLI.m +0 -36
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gradientSpect.m +0 -19
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_hounsfield2density.m +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_interpCartData.m +0 -76
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_kWaveArray.m +0 -175
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_kWaveGrid.m +0 -97
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeArc.m +0 -36
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeBall.m +0 -23
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeBowl.m +0 -23
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartArc.m +0 -23
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartBowl.m +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartCircle.m +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartDisc.m +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartRect.m +0 -21
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartSphere.m +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartSphericalSegment.m +0 -60
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCircle.m +0 -31
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeDisc.m +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeLine.m +0 -26
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeMultiArc.m +0 -20
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeMultiBowl.m +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeSphere.m +0 -21
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeSphericalSection.m +0 -20
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_maxND.m +0 -24
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_minND.m +0 -28
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_normvar.m +0 -13
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_reorderBinarySensorData.m +0 -12
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_reorderSensorData.m +0 -20
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_resize.m +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_revolve2D.m +0 -21
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_rotation_matrices.m +0 -34
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scaleSI.m +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scaleTime.m +0 -23
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scanConversion.m +0 -23
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_smooth.m +0 -9
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_tenenbaum.m +0 -14
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_tolStar.m +0 -63
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_toneBurst.m +0 -27
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_trimCartPoints.m +0 -41
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_unmaskSensorData.m +0 -63
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeAttributes.m +0 -11
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeFlags.m +0 -15
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeGrid.m +0 -14
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeMatrix.m +0 -12
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/__init__.py +0 -0
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/angularSpectrumCW_test.py +0 -24
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/angularSpectrum_test.py +0 -27
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/attenComp_test.py +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/cart2grid_test.py +0 -63
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/computeLinearTransform_test.py +0 -39
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/create_cw_signals_test.py +0 -32
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/expandMatrix_test.py +0 -34
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/focusBowlONeil_test.py +0 -43
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/focusedAnnulusONeil_test.py +0 -140
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/fourierShift_test.py +0 -40
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/gaussianFilter_test.py +0 -24
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/gaussian_test.py +0 -17
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getAffineMatrix_test.py +0 -22
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getColorMap_test.py +0 -35
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getDeltaBLI_test.py +0 -26
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getWin_test.py +0 -48
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/h5io_test.py +0 -87
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/hounsfield2density.py +0 -21
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/kWaveArray_test.py +0 -180
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/kWaveGrid_test.py +0 -78
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeArc_test.py +0 -38
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeBall_test.py +0 -36
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeBowl_test.py +0 -43
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartArc_test.py +0 -47
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartBowl_test.py +0 -27
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartCircle_test.py +0 -41
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartRect_test.py +0 -26
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartSphere_test.py +0 -35
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartSphericalSegment_test.py +0 -63
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCircle_test.py +0 -35
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeDisc_test.py +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeLine_test.py +0 -45
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeMultiArc_test.py +0 -30
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeMultiBowl_test.py +0 -33
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeSphere_test.py +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeSphericalSection_test.py +0 -37
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/maxND_test.py +0 -30
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/minND_test.py +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/phase_shift_interpolate_test.py +0 -65
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/reorderBinarySensorData_test.py +0 -26
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/reorderSensorData_test.py +0 -39
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/revolve2D_test.py +0 -30
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/rotation_matrices_test.py +0 -37
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scaleSI_test.py +0 -44
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scaleTime_test.py +0 -29
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scanConversion_test.py +0 -30
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/sharpness_test.py +0 -64
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/smooth_test.py +0 -18
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_check_stability.py +0 -83
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_interpcartdata.py +0 -70
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_linear_array_transducer.py +0 -63
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_make_cart_disc.py +0 -25
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_resize.py +0 -30
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/tolStart_test.py +0 -52
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/toneBurst_test.py +0 -58
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/trimCartPoints_test.py +0 -28
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/unmaskSensorData_test.py +0 -44
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/__init__.py +0 -0
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/check_equality.py +0 -146
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/record_reader.py +0 -28
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/run_all_collectors.m +0 -38
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_cpp_io_in_parts.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_cpp_running_simulations.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_3D_simulation.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_axisymmetric_simulation.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_binary_sensor_mask.json +0 -792
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_comparison_modelling_functions/input_1.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_comparison_modelling_functions/input_2.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_heterogeneous_medium.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_homogeneous_medium.json +0 -792
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_loading_external_image.json +0 -792
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_opposing_corners_sensor_mask.json +0 -792
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_photoacoustic_waveforms/input_1.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_photoacoustic_waveforms/input_2.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_sensor_frequency_response/input_1.json +0 -792
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_sensor_frequency_response/input_2.json +0 -792
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_1.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_2.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_3.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_4.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_1.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_2.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_3.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_FFT_line_sensor.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_circular_sensor.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_directional_sensors/input_1.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_directional_sensors/input_2.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_line_sensor.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_3D_FFT_planar_sensor.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directional_array_elements.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_1.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_10.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_11.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_2.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_3.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_4.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_5.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_6.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_7.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_8.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_9.json +0 -812
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_1.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_10.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_11.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_2.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_3.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_4.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_5.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_6.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_7.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_8.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_9.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_focussed_detector_2D.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_sensor_directivity_2D.json +0 -752
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_3D_simulation.json +0 -872
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_doppler_effect.json +0 -852
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_homogeneous_medium_dipole.json +0 -852
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_homogeneous_medium_monopole.json +0 -852
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_beam_patterns.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_1.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_10.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_11.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_12.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_13.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_14.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_15.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_16.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_17.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_18.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_19.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_2.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_20.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_21.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_22.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_23.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_24.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_25.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_26.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_27.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_28.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_29.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_3.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_30.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_31.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_32.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_33.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_34.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_35.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_36.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_37.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_38.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_39.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_4.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_40.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_41.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_42.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_43.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_44.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_45.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_46.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_47.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_48.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_49.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_5.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_50.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_51.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_52.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_53.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_54.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_55.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_56.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_57.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_58.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_59.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_6.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_60.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_61.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_62.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_63.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_64.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_65.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_66.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_67.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_68.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_69.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_7.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_70.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_71.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_72.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_73.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_74.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_75.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_76.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_77.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_78.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_79.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_8.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_80.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_81.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_82.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_83.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_84.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_85.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_86.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_87.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_88.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_89.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_9.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_90.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_91.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_92.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_93.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_94.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_95.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_96.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_1.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_10.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_11.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_12.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_13.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_14.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_15.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_16.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_17.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_18.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_19.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_2.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_20.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_21.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_22.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_23.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_24.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_25.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_26.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_27.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_28.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_29.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_3.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_30.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_31.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_32.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_33.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_4.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_5.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_6.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_7.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_8.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_9.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_defining_transducer.json +0 -912
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_transducer_as_sensor.json +0 -932
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/setup_test.py +0 -8
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test__init__.py +0 -16
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_c_order.py +0 -299
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_checks.py +0 -143
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/__init__.py +0 -0
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/conftest.py +0 -45
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/test_1d_ivp.py +0 -133
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/test_e2e.py +0 -163
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_compat.py +0 -88
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cpp_io_in_parts.py +0 -271
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cpp_running_simulations.py +0 -178
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_create_pixel_dim.py +0 -64
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_display_simulation_params.py +0 -81
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_element.py +0 -74
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_executor.py +0 -277
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_filterutils.py +0 -168
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_3D_simulation.py +0 -87
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_axisymmetric_karray_simulation.py +0 -105
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_axisymmetric_simulation.py +0 -74
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_binary_sensor_mask.py +0 -71
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_comparison_modelling_functions.py +0 -113
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_heterogeneous_medium.py +0 -74
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_homogeneous_medium.py +0 -69
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_loading_external_image.py +0 -70
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_opposing_corners_sensor_mask.py +0 -90
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_photoacoustic_waveforms.py +0 -149
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_sensor_frequency_response.py +0 -92
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ksource.py +0 -44
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_kspaceFirstOrder.py +0 -70
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_kutils.py +0 -309
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_math.py +0 -160
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_misc.py +0 -26
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_na_controlling_the_PML.py +0 -123
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_na_optimising_performance.py +0 -101
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_native_solver.py +0 -353
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pmlutils.py +0 -150
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_FFT_line_sensor.py +0 -93
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_circular_sensor.py +0 -85
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_directional_sensors.py +0 -113
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_line_sensor.py +0 -87
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_3D_FFT_planar_sensor.py +0 -84
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_reconstruction.py +0 -243
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_directional_array_elements.py +0 -114
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_directivity_modelling_2D.py +0 -100
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_directivity_modelling_3D.py +0 -105
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_focussed_detector_2D.py +0 -66
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_sensor_directivity_2D.py +0 -95
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sharpness_filters.py +0 -101
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_simulation.py +0 -126
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_simulation_execution_options.py +0 -330
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_time_reversal.py +0 -463
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_3D_simulation.py +0 -89
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_doppler_effect.py +0 -108
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_homogeneous_medium_dipole.py +0 -76
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_homogeneous_medium_monopole.py +0 -76
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_beam_patterns.py +0 -189
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_bmode_linear_transducer.py +0 -255
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_bmode_phased_array.py +0 -233
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_defining_transducer.py +0 -181
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_transducer_as_sensor.py +0 -173
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_utils.py +0 -420
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_validation.py +0 -122
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_water.py +0 -425
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/uv.lock +0 -2272
- k_wave_python-0.6.1/.gitignore +0 -47
- k_wave_python-0.6.1/.pre-commit-config.yaml +0 -39
- k_wave_python-0.6.1/.readthedocs.yaml +0 -14
- k_wave_python-0.6.1/CITATION.cff +0 -21
- k_wave_python-0.6.1/Dockerfile +0 -11
- k_wave_python-0.6.1/LICENSE +0 -165
- k_wave_python-0.6.1/htmlcov/.gitignore +0 -2
- k_wave_python-0.6.1/htmlcov/class_index.html +0 -733
- k_wave_python-0.6.1/htmlcov/coverage_html_cb_6fb7b396.js +0 -733
- k_wave_python-0.6.1/htmlcov/function_index.html +0 -4913
- k_wave_python-0.6.1/htmlcov/index.html +0 -488
- k_wave_python-0.6.1/htmlcov/status.json +0 -1
- k_wave_python-0.6.1/htmlcov/style_cb_8e611ae1.css +0 -337
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2___init___py.html +0 -99
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_checks_py.html +0 -396
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_colormap_py.html +0 -192
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_conversion_py.html +0 -605
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_data_py.html +0 -307
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_dotdictionary_py.html +0 -156
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_filters_py.html +0 -700
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_interp_py.html +0 -492
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_io_py.html +0 -593
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_mapgen_py.html +0 -3212
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_math_py.html +0 -566
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_matlab_py.html +0 -264
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_matrix_py.html +0 -537
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_pml_py.html +0 -250
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_signals_py.html +0 -833
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_tictoc_py.html +0 -143
- k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_typing_py.html +0 -133
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069___init___py.html +0 -106
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_create_absorption_variables_py.html +0 -207
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_display_simulation_params_py.html +0 -191
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_expand_grid_matrices_py.html +0 -411
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_retract_transducer_grid_size_py.html +0 -121
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_save_to_disk_func_py.html +0 -622
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_scale_source_terms_func_py.html +0 -494
- k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_set_sound_speed_ref_py.html +0 -190
- k_wave_python-0.6.1/htmlcov/z_af83d3eb1fd99cb4___init___py.html +0 -110
- k_wave_python-0.6.1/htmlcov/z_af83d3eb1fd99cb4_simulation_execution_options_py.html +0 -342
- k_wave_python-0.6.1/htmlcov/z_af83d3eb1fd99cb4_simulation_options_py.html +0 -449
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1___init___py.html +0 -304
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_data_py.html +0 -220
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_enums_py.html +0 -121
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_executor_py.html +0 -242
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kWaveSimulation_py.html +0 -1593
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kgrid_py.html +0 -800
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kmedium_py.html +0 -331
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_ksensor_py.html +0 -241
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_ksource_py.html +0 -481
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kspaceFirstOrder2D_py.html +0 -547
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_ktransducer_py.html +0 -863
- k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_recorder_py.html +0 -242
- k_wave_python-0.6.1/htmlcov/z_c6e89a0ff279d0c3___init___py.html +0 -110
- k_wave_python-0.6.1/htmlcov/z_c6e89a0ff279d0c3_time_reversal_py.html +0 -243
- k_wave_python-0.6.1/kwave/compat.py +0 -74
- k_wave_python-0.6.1/kwave/data.py +0 -121
- k_wave_python-0.6.1/kwave/kWaveSimulation.py +0 -1532
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/__init__.py +0 -7
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/create_absorption_variables.py +0 -130
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/display_simulation_params.py +0 -92
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/expand_grid_matrices.py +0 -317
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/retract_transducer_grid_size.py +0 -22
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/save_to_disk_func.py +0 -523
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/scale_source_terms_func.py +0 -395
- k_wave_python-0.6.1/kwave/kWaveSimulation_helper/set_sound_speed_ref.py +0 -91
- k_wave_python-0.6.1/kwave/kmedium.py +0 -232
- k_wave_python-0.6.1/kwave/ksensor.py +0 -142
- k_wave_python-0.6.1/kwave/ksource.py +0 -382
- k_wave_python-0.6.1/kwave/kspaceFirstOrder2D.py +0 -377
- k_wave_python-0.6.1/kwave/kspaceFirstOrderAS.py +0 -370
- k_wave_python-0.6.1/kwave/kspaceLineRecon.py +0 -128
- k_wave_python-0.6.1/kwave/kspacePlaneRecon.py +0 -132
- k_wave_python-0.6.1/kwave/ktransducer.py +0 -764
- k_wave_python-0.6.1/kwave/options/__init__.py +0 -11
- k_wave_python-0.6.1/kwave/options/simulation_execution_options.py +0 -337
- k_wave_python-0.6.1/kwave/options/simulation_options.py +0 -348
- k_wave_python-0.6.1/kwave/reconstruction/__init__.py +0 -11
- k_wave_python-0.6.1/kwave/reconstruction/beamform.py +0 -145
- k_wave_python-0.6.1/kwave/reconstruction/time_reversal.py +0 -150
- k_wave_python-0.6.1/kwave/reconstruction/tools.py +0 -65
- k_wave_python-0.6.1/kwave/recorder.py +0 -143
- k_wave_python-0.6.1/kwave/solvers/__init__.py +0 -7
- k_wave_python-0.6.1/kwave/solvers/native.py +0 -30
- k_wave_python-0.6.1/kwave/solvers/validation.py +0 -108
- k_wave_python-0.6.1/kwave/utils/__init__.py +0 -0
- k_wave_python-0.6.1/kwave/utils/angular_spectrum.py +0 -389
- k_wave_python-0.6.1/kwave/utils/angular_spectrum_cw.py +0 -294
- k_wave_python-0.6.1/kwave/utils/atten_comp.py +0 -311
- k_wave_python-0.6.1/kwave/utils/checks.py +0 -297
- k_wave_python-0.6.1/kwave/utils/colormap.py +0 -93
- k_wave_python-0.6.1/kwave/utils/conversion.py +0 -518
- k_wave_python-0.6.1/kwave/utils/data.py +0 -208
- k_wave_python-0.6.1/kwave/utils/dotdictionary.py +0 -57
- k_wave_python-0.6.1/kwave/utils/interp.py +0 -393
- k_wave_python-0.6.1/kwave/utils/io.py +0 -494
- k_wave_python-0.6.1/kwave/utils/kwave_array.py +0 -1009
- k_wave_python-0.6.1/kwave/utils/mapgen.py +0 -3113
- k_wave_python-0.6.1/kwave/utils/math.py +0 -467
- k_wave_python-0.6.1/kwave/utils/matlab.py +0 -165
- k_wave_python-0.6.1/kwave/utils/matrix.py +0 -438
- k_wave_python-0.6.1/kwave/utils/plot.py +0 -43
- k_wave_python-0.6.1/kwave/utils/pml.py +0 -159
- k_wave_python-0.6.1/kwave/utils/sharpness_filters.py +0 -126
- k_wave_python-0.6.1/kwave/utils/signals.py +0 -734
- k_wave_python-0.6.1/kwave/utils/tictoc.py +0 -44
- k_wave_python-0.6.1/kwave/utils/typing.py +0 -34
- k_wave_python-0.6.1/make_docs.sh +0 -4
- k_wave_python-0.6.1/run_tests.sh +0 -11
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/.gitignore +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/.pre-commit-config.yaml +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/.readthedocs.yaml +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/CITATION.cff +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/Dockerfile +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/LICENSE +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/docs/README.md +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/data.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/executor.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/__init__.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/display_simulation_params.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/expand_grid_matrices.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/retract_transducer_grid_size.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/save_to_disk_func.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/scale_source_terms_func.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/set_sound_speed_ref.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/ksensor.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/ksource.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspaceFirstOrderAS.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspaceLineRecon.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspacePlaneRecon.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/ktransducer.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/options/__init__.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/options/simulation_execution_options.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/options/simulation_options.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/__init__.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/beamform.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/time_reversal.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/tools.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/recorder.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/solvers/__init__.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/solvers/native.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/solvers/validation.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands → k_wave_python-0.6.2/kwave/utils}/__init__.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/angular_spectrum.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/angular_spectrum_cw.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/atten_comp.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/colormap.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/conversion.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/data.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/dotdictionary.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/utils/filters.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/interp.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/io.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/kwave_array.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/matlab.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/matrix.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/pml.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/sharpness_filters.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/signals.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/tictoc.py +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/make_docs.sh +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.2}/pytest.ini +0 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/run_tests.sh +0 -0
k_wave_python-0.6.2/.git
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
gitdir: /Users/Walter/git/k-wave-python/.git/worktrees/kwave-v0.6.2
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What is k-wave-python?
|
|
6
|
+
|
|
7
|
+
Python implementation of the [k-Wave](http://www.k-wave.org/) acoustics toolbox for time-domain acoustic and ultrasound simulations. Two backends: a pure Python/NumPy/CuPy solver and C++ binaries (OMP/CUDA).
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Setup
|
|
13
|
+
uv sync --extra dev --extra test
|
|
14
|
+
uv run pre-commit install
|
|
15
|
+
|
|
16
|
+
# Run tests
|
|
17
|
+
uv run pytest # all tests
|
|
18
|
+
uv run pytest tests/test_kgrid.py # single file
|
|
19
|
+
uv run pytest tests/test_kgrid.py::test_name # single test
|
|
20
|
+
uv run pytest -m integration # MATLAB-reference tests only
|
|
21
|
+
|
|
22
|
+
# Lint/format
|
|
23
|
+
uv run ruff check . --fix
|
|
24
|
+
uv run ruff format .
|
|
25
|
+
uv run pre-commit run --all-files
|
|
26
|
+
|
|
27
|
+
# Run an example
|
|
28
|
+
uv run examples/ivp_homogeneous_medium.py
|
|
29
|
+
|
|
30
|
+
# Build
|
|
31
|
+
uv build
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Always use `uv run` (not `uv run python`) for pytest, examples, and scripts.
|
|
35
|
+
|
|
36
|
+
## Code Style
|
|
37
|
+
|
|
38
|
+
- Line length: 140 (configured in `pyproject.toml` under `[tool.ruff]`)
|
|
39
|
+
- Pre-commit hooks: ruff (lint + format), codespell, nb-clean
|
|
40
|
+
- Ruff ignores F821 (nested function refs) and F722 (jaxtyping annotations)
|
|
41
|
+
- Type annotations use `beartype` + `jaxtyping`
|
|
42
|
+
|
|
43
|
+
## Architecture
|
|
44
|
+
|
|
45
|
+
### Entry point
|
|
46
|
+
|
|
47
|
+
`kwave/kspaceFirstOrder.py` — `kspaceFirstOrder()` is the unified API. It accepts `kgrid`, `medium`, `source`, `sensor` and dispatches to the appropriate backend.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
kspaceFirstOrder(kgrid, medium, source, sensor, backend="python"|"cpp", device="cpu"|"gpu")
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Two backends
|
|
54
|
+
|
|
55
|
+
- **Python backend** (`kwave/solvers/kspace_solver.py`): `Simulation` class implementing k-space pseudospectral method in NumPy/CuPy. Supports 1D/2D/3D. Uses CuPy for GPU when `device="gpu"`.
|
|
56
|
+
- **C++ backend** (`kwave/solvers/cpp_simulation.py` + `kwave/executor.py`): Serializes to HDF5, invokes compiled C++ binary, reads results back. `save_only=True` writes HDF5 without running (for cluster jobs).
|
|
57
|
+
|
|
58
|
+
### Core data classes
|
|
59
|
+
|
|
60
|
+
- `kWaveGrid` (`kwave/kgrid.py`) — domain discretization, spacing, time array
|
|
61
|
+
- `kWaveMedium` (`kwave/kmedium.py`) — sound speed, density, absorption, nonlinearity
|
|
62
|
+
- `kSource` (`kwave/ksource.py`) — pressure/velocity sources with masks and signals
|
|
63
|
+
- `kSensor` (`kwave/ksensor.py`) — sensor mask and recording configuration
|
|
64
|
+
|
|
65
|
+
### Legacy path
|
|
66
|
+
|
|
67
|
+
`kspaceFirstOrder2D()` / `kspaceFirstOrder3D()` in their respective files route through `kWaveSimulation` (`kwave/kWaveSimulation.py`) — a large legacy dataclass used by the C++ backend path. New code should use `kspaceFirstOrder()` directly.
|
|
68
|
+
|
|
69
|
+
### PML handling
|
|
70
|
+
|
|
71
|
+
When `pml_inside=False` (default), `kspaceFirstOrder()` expands the grid by `2*pml_size` before simulation and strips PML from full-grid output fields afterward. `pml_size="auto"` selects optimal sizes via `get_optimal_pml_size()`.
|
|
72
|
+
|
|
73
|
+
### Key utilities
|
|
74
|
+
|
|
75
|
+
- `kwave/utils/pml.py` — PML sizing (`get_pml()`, `get_optimal_pml_size()`)
|
|
76
|
+
- `kwave/utils/mapgen.py` — geometry generators (`make_disc`, `make_ball`, `make_cart_circle`, etc.)
|
|
77
|
+
- `kwave/utils/signals.py` — signal generation (tone bursts, filtering)
|
|
78
|
+
- `kwave/utils/filters.py` — spatial smoothing, Gaussian filters
|
|
79
|
+
- `kwave/utils/io.py` — HDF5 read/write
|
|
80
|
+
- `kwave/utils/conversion.py` — unit conversion, `cart2grid`
|
|
81
|
+
|
|
82
|
+
## Testing
|
|
83
|
+
|
|
84
|
+
- Tests in `tests/`, configured via `[tool.pytest.ini_options]` in `pyproject.toml`
|
|
85
|
+
- Integration tests (`@pytest.mark.integration`) compare against MATLAB reference data
|
|
86
|
+
- Test fixtures in `tests/integration/conftest.py`: `load_matlab_ref` (fixture), `assert_fields_close` (helper function for field comparison)
|
|
87
|
+
- MATLAB reference data for `@pytest.mark.integration` tests lives in `tests/matlab_test_data_collectors/python_testers/collectedValues/` (hardcoded in `conftest.py`)
|
|
88
|
+
- `test_example_parity.py` (MATLAB-parity tests) reads `KWAVE_MATLAB_REF_DIR` (defaults to `~/git/k-wave-cupy/tests` if unset)
|
|
89
|
+
|
|
90
|
+
## Naming Conventions
|
|
91
|
+
|
|
92
|
+
- `backend="python"` or `"cpp"` (not "native")
|
|
93
|
+
- `device="cpu"` or `"gpu"` (not `use_gpu` bool)
|
|
94
|
+
- `quiet=True` to suppress output; `debug=True` for detailed output
|
|
95
|
+
- `pml_size="auto"` for automatic PML sizing (not a separate boolean)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: k-Wave-python
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Acoustics toolbox for time domain acoustic and ultrasound simulations in complex and tissue-realistic media.
|
|
5
5
|
Project-URL: Homepage, http://www.k-wave.org/
|
|
6
6
|
Project-URL: Documentation, https://waltersimson.com/k-wave-python/
|
|
@@ -179,31 +179,32 @@ Classifier: Operating System :: OS Independent
|
|
|
179
179
|
Classifier: Programming Language :: Python :: 3
|
|
180
180
|
Requires-Python: >=3.10
|
|
181
181
|
Requires-Dist: beartype==0.22.9
|
|
182
|
-
Requires-Dist: deepdiff==
|
|
182
|
+
Requires-Dist: deepdiff==9.0.0
|
|
183
183
|
Requires-Dist: deprecated>=1.2.14
|
|
184
|
-
Requires-Dist: h5py==3.
|
|
185
|
-
Requires-Dist: jaxtyping==0.3.
|
|
186
|
-
Requires-Dist: matplotlib==3.10.
|
|
184
|
+
Requires-Dist: h5py==3.16.0
|
|
185
|
+
Requires-Dist: jaxtyping==0.3.7
|
|
186
|
+
Requires-Dist: matplotlib==3.10.9
|
|
187
187
|
Requires-Dist: numpy<2.3.0,>=1.22.2
|
|
188
188
|
Requires-Dist: opencv-python==4.13.0.92
|
|
189
189
|
Requires-Dist: scipy==1.15.3
|
|
190
190
|
Requires-Dist: tqdm>=4.60
|
|
191
191
|
Provides-Extra: dev
|
|
192
|
-
Requires-Dist: pre-commit==4.
|
|
192
|
+
Requires-Dist: pre-commit==4.6.0; extra == 'dev'
|
|
193
193
|
Provides-Extra: docs
|
|
194
|
-
Requires-Dist: furo==
|
|
194
|
+
Requires-Dist: furo==2025.12.19; extra == 'docs'
|
|
195
195
|
Requires-Dist: sphinx-copybutton==0.5.2; extra == 'docs'
|
|
196
196
|
Requires-Dist: sphinx-mdinclude==0.6.2; extra == 'docs'
|
|
197
|
-
Requires-Dist: sphinx-tabs==3.4.
|
|
198
|
-
Requires-Dist: sphinx-toolbox==
|
|
197
|
+
Requires-Dist: sphinx-tabs==3.4.5; extra == 'docs'
|
|
198
|
+
Requires-Dist: sphinx-toolbox==4.1.2; extra == 'docs'
|
|
199
|
+
Requires-Dist: sphinx<9; extra == 'docs'
|
|
199
200
|
Provides-Extra: example
|
|
200
|
-
Requires-Dist: gdown==
|
|
201
|
+
Requires-Dist: gdown==6.0.0; extra == 'example'
|
|
201
202
|
Provides-Extra: test
|
|
202
|
-
Requires-Dist: coverage==7.
|
|
203
|
+
Requires-Dist: coverage==7.14.0; extra == 'test'
|
|
203
204
|
Requires-Dist: phantominator; extra == 'test'
|
|
204
205
|
Requires-Dist: pytest; extra == 'test'
|
|
205
206
|
Requires-Dist: pytest-xdist; extra == 'test'
|
|
206
|
-
Requires-Dist: requests==2.
|
|
207
|
+
Requires-Dist: requests==2.34.0; extra == 'test'
|
|
207
208
|
Requires-Dist: testfixtures==8.3.0; extra == 'test'
|
|
208
209
|
Description-Content-Type: text/markdown
|
|
209
210
|
|
|
@@ -3,23 +3,45 @@ import json
|
|
|
3
3
|
import logging
|
|
4
4
|
import os
|
|
5
5
|
import platform
|
|
6
|
+
import stat
|
|
7
|
+
import warnings
|
|
6
8
|
from pathlib import Path
|
|
7
9
|
from typing import List
|
|
8
10
|
from urllib.request import urlretrieve
|
|
9
11
|
|
|
10
12
|
# Test installation with:
|
|
11
13
|
# python3 -m pip install -i https://test.pypi.org/simple/ --extra-index-url=https://pypi.org/simple/ k-Wave-python==0.3.0
|
|
12
|
-
__version__ = "0.6.
|
|
14
|
+
__version__ = "0.6.2"
|
|
13
15
|
|
|
14
16
|
# Constants and Configurations
|
|
15
17
|
URL_BASE = "https://github.com/waltsims/"
|
|
16
|
-
BINARY_VERSION = "v1.
|
|
17
|
-
|
|
18
|
+
BINARY_VERSION = "v1.4.1"
|
|
19
|
+
# Pin both Windows binaries to v1.3.0. v1.4.x windows builds switched compiler /
|
|
20
|
+
# OpenMP / FFT / CUDA runtime stacks and neither v1.4.x release ships its runtime
|
|
21
|
+
# DLLs (cufft, cudart, vcomp, vcruntime140_1, fftw3f, etc.). v1.3.0 binaries are
|
|
22
|
+
# self-contained with their Intel-era DLL bundle (listed in WINDOWS_DLLS below,
|
|
23
|
+
# downloaded with the OMP request and used by both .exe files since they share
|
|
24
|
+
# kwave/bin/windows/). OMP DLL bundling is fixed in kspacefirstorder-unified#14
|
|
25
|
+
# (awaiting validation); CUDA DLL bundling is tracked in kspacefirstorder-unified#17.
|
|
26
|
+
WINDOWS_OMP_VERSION = "v1.3.0"
|
|
27
|
+
WINDOWS_CUDA_VERSION = "v1.3.0"
|
|
18
28
|
PLATFORM = platform.system().lower()
|
|
19
29
|
|
|
20
30
|
if PLATFORM not in ["linux", "windows", "darwin"]:
|
|
21
31
|
raise NotImplementedError(f"k-wave-python is currently unsupported on this operating system: {PLATFORM}.")
|
|
22
32
|
|
|
33
|
+
# darwin C++ binary is arm64-only; universal2 coverage tracked for v0.6.5
|
|
34
|
+
DARWIN_BINARY_ARCH = "arm64"
|
|
35
|
+
_darwin_unsupported = PLATFORM == "darwin" and platform.machine() != DARWIN_BINARY_ARCH
|
|
36
|
+
if _darwin_unsupported:
|
|
37
|
+
warnings.warn(
|
|
38
|
+
f"k-wave-python's macOS C++ binary is {DARWIN_BINARY_ARCH}-only. "
|
|
39
|
+
f"Detected {platform.machine()} — the C++ backend (backend='cpp') will not run on this machine. "
|
|
40
|
+
"Use backend='python' instead. Universal2 (Intel + Apple Silicon) coverage is tracked for v0.6.5.",
|
|
41
|
+
RuntimeWarning,
|
|
42
|
+
stacklevel=2,
|
|
43
|
+
)
|
|
44
|
+
|
|
23
45
|
# TODO: install directly in to /bin/ directory system directory is no longer needed
|
|
24
46
|
# TODO: deprecate in 0.5.0
|
|
25
47
|
BINARY_PATH = Path(__file__).parent / "bin" / PLATFORM
|
|
@@ -44,21 +66,24 @@ ARCHITECTURES = ["omp", "cuda"]
|
|
|
44
66
|
|
|
45
67
|
|
|
46
68
|
def get_windows_release_urls(architecture: str) -> list:
|
|
69
|
+
version = WINDOWS_OMP_VERSION if architecture == "omp" else WINDOWS_CUDA_VERSION
|
|
47
70
|
specific_filenames = [EXECUTABLE_PREFIX + architecture + ".exe"]
|
|
48
71
|
if architecture == "omp":
|
|
49
72
|
specific_filenames += WINDOWS_DLLS
|
|
50
|
-
|
|
51
|
-
return
|
|
73
|
+
base = f"{URL_BASE}kspaceFirstOrder-{architecture.upper()}-{PLATFORM.lower()}/releases/download/{version}/"
|
|
74
|
+
return [base + filename for filename in specific_filenames]
|
|
52
75
|
|
|
53
76
|
|
|
54
77
|
URL_DICT = {
|
|
55
78
|
"linux": {
|
|
56
|
-
"cuda": [URL_BASE + f"kspaceFirstOrder-CUDA-{PLATFORM}/releases/download/
|
|
79
|
+
"cuda": [URL_BASE + f"kspaceFirstOrder-CUDA-{PLATFORM}/releases/download/{BINARY_VERSION}/{EXECUTABLE_PREFIX}CUDA"],
|
|
57
80
|
"omp": [URL_BASE + f"kspaceFirstOrder-OMP-{PLATFORM}/releases/download/{BINARY_VERSION}/{EXECUTABLE_PREFIX}OMP"],
|
|
58
81
|
},
|
|
59
82
|
"darwin": {
|
|
60
83
|
"cuda": [],
|
|
61
|
-
"omp":
|
|
84
|
+
"omp": (
|
|
85
|
+
[] if _darwin_unsupported else [URL_BASE + f"k-wave-omp-{PLATFORM}/releases/download/{BINARY_VERSION}/{EXECUTABLE_PREFIX}OMP"]
|
|
86
|
+
),
|
|
62
87
|
},
|
|
63
88
|
"windows": {architecture: get_windows_release_urls(architecture) for architecture in ARCHITECTURES},
|
|
64
89
|
}
|
|
@@ -77,6 +102,31 @@ def _hash_file(filepath: str) -> str:
|
|
|
77
102
|
return md5.hexdigest()
|
|
78
103
|
|
|
79
104
|
|
|
105
|
+
def _ensure_executable(binary_filepath) -> None:
|
|
106
|
+
# Self-heal the executable bit on Linux/macOS. urlretrieve creates files
|
|
107
|
+
# at 0644, and prior versions of this package didn't fix that up, so users
|
|
108
|
+
# upgrading with a cached non-executable binary on disk would otherwise
|
|
109
|
+
# stay stuck (the cache check below returns True and skips re-download).
|
|
110
|
+
# Any OS-level failure here (broken symlink, read-only FS, wrong ownership,
|
|
111
|
+
# TOCTOU race) is degraded to a warning so it never aborts `import kwave`.
|
|
112
|
+
if PLATFORM == "windows":
|
|
113
|
+
return
|
|
114
|
+
try:
|
|
115
|
+
current_mode = os.stat(binary_filepath).st_mode
|
|
116
|
+
desired_mode = current_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
|
|
117
|
+
if current_mode == desired_mode:
|
|
118
|
+
return
|
|
119
|
+
os.chmod(binary_filepath, desired_mode)
|
|
120
|
+
except OSError: # pragma: no cover - defensive; degrades to warning, never fatal
|
|
121
|
+
# Don't abort import. The user can chmod +x manually or reinstall
|
|
122
|
+
# into a writable location.
|
|
123
|
+
logging.warning(
|
|
124
|
+
"kwave: cannot set executable bit on %s — backend='cpp' may fail with "
|
|
125
|
+
"Permission denied. Run `chmod +x` manually or reinstall.",
|
|
126
|
+
binary_filepath,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
|
|
80
130
|
def _is_binary_present(binary_name: str, binary_type: str) -> bool:
|
|
81
131
|
binary_filepath = BINARY_PATH / binary_name
|
|
82
132
|
binary_file_exists = os.path.exists(binary_filepath)
|
|
@@ -106,6 +156,8 @@ def _is_binary_present(binary_name: str, binary_type: str) -> bool:
|
|
|
106
156
|
if existing_metadata["url"] not in latest_urls:
|
|
107
157
|
return False
|
|
108
158
|
|
|
159
|
+
_ensure_executable(binary_filepath)
|
|
160
|
+
|
|
109
161
|
# No need to check `version` field for now
|
|
110
162
|
# because we version is already present in the URL
|
|
111
163
|
return True
|
|
@@ -176,6 +228,7 @@ def download_binaries(system_os: str, bin_type: str):
|
|
|
176
228
|
try:
|
|
177
229
|
binary_filepath = os.path.join(BINARY_PATH, filename)
|
|
178
230
|
urlretrieve(url, binary_filepath)
|
|
231
|
+
_ensure_executable(binary_filepath)
|
|
179
232
|
_record_binary_metadata(binary_version=binary_version, binary_filepath=binary_filepath, binary_url=url, filename=filename)
|
|
180
233
|
|
|
181
234
|
except TimeoutError:
|
|
@@ -70,5 +70,9 @@ def options_to_kwargs(simulation_options=None, execution_options=None):
|
|
|
70
70
|
kwargs["num_threads"] = opts.num_threads
|
|
71
71
|
if opts.device_num is not None:
|
|
72
72
|
kwargs["device_num"] = opts.device_num
|
|
73
|
+
# Read _binary_path directly: the property auto-resolves to a default,
|
|
74
|
+
# so it can't distinguish a user-set path from one.
|
|
75
|
+
if opts._binary_path is not None:
|
|
76
|
+
kwargs["binary_path"] = opts._binary_path
|
|
73
77
|
|
|
74
78
|
return kwargs
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
from enum import Enum
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
class AlphaMode(str, Enum):
|
|
5
|
+
"""Controls which absorption/dispersion terms are included in the equation of state."""
|
|
6
|
+
|
|
7
|
+
NO_ABSORPTION = "no_absorption"
|
|
8
|
+
NO_DISPERSION = "no_dispersion"
|
|
9
|
+
STOKES = "stokes"
|
|
10
|
+
|
|
11
|
+
def __str__(self):
|
|
12
|
+
return self.value
|
|
13
|
+
|
|
14
|
+
|
|
3
15
|
################################################################
|
|
4
16
|
# literals that link the discrete cosine and sine transform types with
|
|
5
17
|
# their type definitions in the functions dtt1D, dtt2D, and dtt3D
|
|
@@ -12,19 +12,19 @@ def create_absorption_variables(kgrid: kWaveGrid, medium: kWaveMedium, equation_
|
|
|
12
12
|
# define the lossy derivative operators and proportionality coefficients
|
|
13
13
|
"""
|
|
14
14
|
Selects and returns absorption and dispersion operators and coefficients for the given medium based on the equation of state.
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
Parameters:
|
|
17
17
|
kgrid (kWaveGrid): Grid object providing wavenumber array via `kgrid.k`.
|
|
18
18
|
medium (kWaveMedium): Medium properties used to compute absorption/dispersion coefficients.
|
|
19
19
|
equation_of_state (str): One of `"absorbing"`, `"stokes"`, or `"lossless"` determining which variables to produce.
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
Returns:
|
|
22
22
|
tuple: (nabla1, nabla2, tau, eta)
|
|
23
23
|
- nabla1: First-order absorption operator or `None` when not applicable.
|
|
24
24
|
- nabla2: Dispersion operator or `None` when not applicable.
|
|
25
25
|
- tau: Absorbing coefficient or `None` when not applicable.
|
|
26
26
|
- eta: Dispersive coefficient or `None` when not applicable.
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
Behavior:
|
|
29
29
|
- "absorbing": returns (nabla1, nabla2, tau, eta) computed for an absorbing medium.
|
|
30
30
|
- "stokes": returns (None, None, tau, None) where `tau` is the Stokes absorbing coefficient.
|
|
@@ -127,4 +127,4 @@ def apply_alpha_filter(medium, nabla1, nabla2):
|
|
|
127
127
|
# shift the parameters back
|
|
128
128
|
nabla1 = np.fft.ifftshift(nabla1)
|
|
129
129
|
nabla2 = np.fft.ifftshift(nabla2)
|
|
130
|
-
return nabla1, nabla2
|
|
130
|
+
return nabla1, nabla2
|
|
@@ -108,7 +108,7 @@ class kWaveGrid(object):
|
|
|
108
108
|
@t_array.setter
|
|
109
109
|
def t_array(self, t_array):
|
|
110
110
|
# check for 'auto' input
|
|
111
|
-
if t_array == "auto":
|
|
111
|
+
if isinstance(t_array, str) and t_array == "auto":
|
|
112
112
|
# set values to auto
|
|
113
113
|
self.Nt = "auto"
|
|
114
114
|
self.dt = "auto"
|
{k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kmedium.py
RENAMED
|
@@ -1,50 +1,65 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from dataclasses import dataclass
|
|
3
|
-
from typing import List
|
|
3
|
+
from typing import List, Optional, Sequence, Union
|
|
4
4
|
|
|
5
5
|
import numpy as np
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
from kwave.enums import AlphaMode
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _to_alpha_mode(value):
|
|
11
|
+
"""Normalize a value to AlphaMode. Accepts None, AlphaMode, or a valid string."""
|
|
12
|
+
if value is None or isinstance(value, AlphaMode):
|
|
13
|
+
return value
|
|
14
|
+
try:
|
|
15
|
+
return AlphaMode(value)
|
|
16
|
+
except (ValueError, TypeError):
|
|
17
|
+
raise ValueError(
|
|
18
|
+
f"medium.alpha_mode must be an AlphaMode enum value or one of 'no_absorption', 'no_dispersion', 'stokes', got {value!r}"
|
|
19
|
+
) from None
|
|
8
20
|
|
|
9
21
|
|
|
10
22
|
@dataclass
|
|
11
23
|
class kWaveMedium(object):
|
|
24
|
+
"""
|
|
25
|
+
Medium properties for k-Wave simulations.
|
|
26
|
+
|
|
27
|
+
Note: For heterogeneous medium parameters, medium.sound_speed and medium.density
|
|
28
|
+
must be given in matrix form with the same dimensions as kgrid. For homogeneous
|
|
29
|
+
medium parameters, these can be given as single numeric values. If the medium is
|
|
30
|
+
homogeneous and velocity inputs or outputs are not required, it is not necessary
|
|
31
|
+
to specify medium.density.
|
|
32
|
+
"""
|
|
33
|
+
|
|
12
34
|
# sound speed distribution within the acoustic medium [m/s] | required to be defined
|
|
13
|
-
sound_speed: np.
|
|
35
|
+
sound_speed: Union[float, int, np.ndarray]
|
|
14
36
|
# reference sound speed used within the k-space operator (phase correction term) [m/s]
|
|
15
|
-
sound_speed_ref: np.
|
|
37
|
+
sound_speed_ref: Optional[Union[float, int, np.ndarray]] = None
|
|
16
38
|
# density distribution within the acoustic medium [kg/m^3]
|
|
17
|
-
density: np.
|
|
39
|
+
density: Optional[Union[float, int, np.ndarray]] = None
|
|
18
40
|
# power law absorption coefficient [dB/(MHz^y cm)]
|
|
19
|
-
alpha_coeff: np.
|
|
41
|
+
alpha_coeff: Optional[Union[float, int, np.ndarray]] = None
|
|
20
42
|
# power law absorption exponent
|
|
21
|
-
alpha_power: np.
|
|
43
|
+
alpha_power: Optional[Union[float, int, np.ndarray]] = None
|
|
22
44
|
# optional input to force either the absorption or dispersion terms in the equation of state to be excluded;
|
|
23
|
-
# valid inputs are
|
|
24
|
-
alpha_mode:
|
|
45
|
+
# valid inputs are AlphaMode.NO_ABSORPTION, AlphaMode.NO_DISPERSION, or the equivalent strings
|
|
46
|
+
alpha_mode: Optional[Union[AlphaMode, str]] = None
|
|
25
47
|
# frequency domain filter applied to the absorption and dispersion terms in the equation of state
|
|
26
|
-
alpha_filter: np.
|
|
48
|
+
alpha_filter: Optional[np.ndarray] = None
|
|
27
49
|
# two element array used to control the sign of absorption and dispersion terms in the equation of state
|
|
28
|
-
alpha_sign: np.
|
|
50
|
+
alpha_sign: Optional[np.ndarray] = None
|
|
29
51
|
# parameter of nonlinearity
|
|
30
|
-
BonA: np.
|
|
52
|
+
BonA: Optional[Union[float, int, np.ndarray]] = None
|
|
31
53
|
# is the medium absorbing?
|
|
32
54
|
absorbing: bool = False
|
|
33
55
|
# is the medium absorbing stokes?
|
|
34
56
|
stokes: bool = False
|
|
35
57
|
|
|
36
|
-
# """
|
|
37
|
-
# Note: For heterogeneous medium parameters, medium.sound_speed and
|
|
38
|
-
# medium.density must be given in matrix form with the same dimensions as
|
|
39
|
-
# kgrid. For homogeneous medium parameters, these can be given as single
|
|
40
|
-
# numeric values. If the medium is homogeneous and velocity inputs or
|
|
41
|
-
# outputs are not required, it is not necessary to specify medium.density.
|
|
42
|
-
# """
|
|
43
|
-
|
|
44
58
|
def __post_init__(self):
|
|
45
59
|
self.sound_speed = np.atleast_1d(self.sound_speed)
|
|
60
|
+
self.alpha_mode = _to_alpha_mode(self.alpha_mode)
|
|
46
61
|
|
|
47
|
-
def check_fields(self, kgrid_shape:
|
|
62
|
+
def check_fields(self, kgrid_shape: Sequence[int]) -> None:
|
|
48
63
|
"""
|
|
49
64
|
Check whether the given properties are valid
|
|
50
65
|
|
|
@@ -54,26 +69,21 @@ class kWaveMedium(object):
|
|
|
54
69
|
Returns:
|
|
55
70
|
None
|
|
56
71
|
"""
|
|
57
|
-
#
|
|
58
|
-
|
|
59
|
-
assert self.alpha_mode in [
|
|
60
|
-
"no_absorption",
|
|
61
|
-
"no_dispersion",
|
|
62
|
-
"stokes",
|
|
63
|
-
], "medium.alpha_mode must be set to 'no_absorption', 'no_dispersion', or 'stokes'."
|
|
72
|
+
# re-normalize alpha_mode in case it was reassigned as a plain string post-construction
|
|
73
|
+
self.alpha_mode = _to_alpha_mode(self.alpha_mode)
|
|
64
74
|
|
|
65
75
|
# check the absorption filter input is valid
|
|
66
|
-
if self.alpha_filter is not None and
|
|
76
|
+
if self.alpha_filter is not None and self.alpha_filter.shape != tuple(kgrid_shape):
|
|
67
77
|
raise ValueError("medium.alpha_filter must be the same size as the computational grid.")
|
|
68
78
|
|
|
69
79
|
# check the absorption sign input is valid
|
|
70
|
-
if self.alpha_sign is not None
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
80
|
+
if self.alpha_sign is not None:
|
|
81
|
+
alpha_sign_arr = np.atleast_1d(self.alpha_sign)
|
|
82
|
+
if alpha_sign_arr.size != 2 or not np.issubdtype(alpha_sign_arr.dtype, np.number):
|
|
83
|
+
raise ValueError("medium.alpha_sign must be a 2 element numeric array controlling absorption and dispersion, respectively.")
|
|
74
84
|
|
|
75
85
|
# check alpha_coeff is non-negative and real
|
|
76
|
-
if not np.all(np.isreal(self.alpha_coeff)) or np.any(self.alpha_coeff < 0):
|
|
86
|
+
if self.alpha_coeff is not None and (not np.all(np.isreal(self.alpha_coeff)) or np.any(self.alpha_coeff < 0)):
|
|
77
87
|
raise ValueError("medium.alpha_coeff must be non-negative and real.")
|
|
78
88
|
|
|
79
89
|
def is_defined(self, *fields) -> List[bool]:
|
|
@@ -102,7 +112,7 @@ class kWaveMedium(object):
|
|
|
102
112
|
None
|
|
103
113
|
"""
|
|
104
114
|
for f in fields:
|
|
105
|
-
assert getattr(self, f) is not None, f"The field {f} must
|
|
115
|
+
assert getattr(self, f) is not None, f"The field {f} must not be None"
|
|
106
116
|
|
|
107
117
|
def is_nonlinear(self) -> bool:
|
|
108
118
|
"""
|
|
@@ -141,13 +151,14 @@ class kWaveMedium(object):
|
|
|
141
151
|
# enforce both absorption parameters
|
|
142
152
|
self.ensure_defined("alpha_coeff", "alpha_power")
|
|
143
153
|
|
|
144
|
-
# check y is a scalar
|
|
145
|
-
|
|
154
|
+
# check y is a scalar (np.isscalar rejects 0-d ndarrays — accept np.array(1.5) too)
|
|
155
|
+
is_scalar = np.isscalar(self.alpha_power) or (isinstance(self.alpha_power, np.ndarray) and self.alpha_power.size == 1)
|
|
156
|
+
assert is_scalar, "medium.alpha_power must be scalar."
|
|
146
157
|
|
|
147
158
|
# check y is real and within 0 to 3
|
|
148
|
-
assert (
|
|
149
|
-
|
|
150
|
-
)
|
|
159
|
+
assert np.all(np.isreal(self.alpha_coeff)) and 0 <= self.alpha_power < 3, (
|
|
160
|
+
"medium.alpha_power must be a real number between 0 and 3."
|
|
161
|
+
)
|
|
151
162
|
|
|
152
163
|
# display warning if y is close to 1 and the dispersion term has not been set to zero
|
|
153
164
|
if self.alpha_mode != "no_dispersion":
|
|
@@ -167,8 +178,10 @@ class kWaveMedium(object):
|
|
|
167
178
|
self.ensure_defined("alpha_coeff")
|
|
168
179
|
|
|
169
180
|
# give warning if y is specified
|
|
170
|
-
if self.alpha_power is not None
|
|
171
|
-
|
|
181
|
+
if self.alpha_power is not None:
|
|
182
|
+
ap = np.asarray(self.alpha_power)
|
|
183
|
+
if ap.size != 1 or not np.isclose(ap.item(), 2.0):
|
|
184
|
+
logging.warning("the axisymmetric code and stokes absorption assume alpha_power = 2, user value ignored.")
|
|
172
185
|
|
|
173
186
|
# overwrite y value
|
|
174
187
|
self.alpha_power = 2
|
|
@@ -176,12 +189,12 @@ class kWaveMedium(object):
|
|
|
176
189
|
# don't allow medium.alpha_mode with the axisymmetric code
|
|
177
190
|
if self.alpha_mode is not None and (self.alpha_mode in ["no_absorption", "no_dispersion"]):
|
|
178
191
|
raise NotImplementedError(
|
|
179
|
-
"Input option medium.alpha_mode is not supported with the axisymmetric code
|
|
192
|
+
"Input option medium.alpha_mode is not supported with the axisymmetric code or medium.alpha_mode = stokes."
|
|
180
193
|
)
|
|
181
194
|
|
|
182
195
|
# don't allow alpha_filter with stokes absorption (no variables are applied in k-space)
|
|
183
196
|
assert self.alpha_filter is None, (
|
|
184
|
-
"Input option medium.alpha_filter is not supported with the axisymmetric code
|
|
197
|
+
"Input option medium.alpha_filter is not supported with the axisymmetric code or medium.alpha_mode = 'stokes'. "
|
|
185
198
|
)
|
|
186
199
|
|
|
187
200
|
##########################################
|
|
@@ -82,6 +82,40 @@ def _strip_pml(result, pml_size, ndim, suffixes=_FULL_GRID_SUFFIXES):
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
|
|
85
|
+
def _resolve_dtype(value):
|
|
86
|
+
"""Normalize a dtype-like input to ``np.float32`` or ``np.float64``.
|
|
87
|
+
|
|
88
|
+
Accepts numpy dtypes/types (``np.float32``, ``np.float64``), strings
|
|
89
|
+
(``"float32"`` etc., plus MATLAB aliases ``"single"`` / ``"double"``),
|
|
90
|
+
Python ``float``, ``None`` (default → float64), and the legacy MATLAB
|
|
91
|
+
``"off"`` alias for float64. Anything that resolves to a non-float32 /
|
|
92
|
+
non-float64 dtype raises ``ValueError`` — the solver isn't validated
|
|
93
|
+
for ``float16`` / complex dtypes.
|
|
94
|
+
|
|
95
|
+
Cupy dtypes (``cp.float32``, ``cp.float64``) work for free because cupy
|
|
96
|
+
re-exports numpy's scalar types. Torch / JAX dtypes are not accepted —
|
|
97
|
+
they live in different ecosystems and don't translate via ``np.dtype()``;
|
|
98
|
+
the error message points the user at the equivalent numpy dtype.
|
|
99
|
+
"""
|
|
100
|
+
if value is None or value == "off":
|
|
101
|
+
return np.float64
|
|
102
|
+
try:
|
|
103
|
+
resolved = np.dtype(value).type
|
|
104
|
+
except TypeError as e:
|
|
105
|
+
framework = getattr(type(value), "__module__", "").split(".")[0]
|
|
106
|
+
hint = ""
|
|
107
|
+
if framework in ("torch", "jax", "jaxlib", "tensorflow"):
|
|
108
|
+
hint = f" {framework}.dtype objects aren't supported; pass the equivalent numpy dtype (np.float32 / np.float64)."
|
|
109
|
+
raise ValueError(
|
|
110
|
+
f"dtype must be a numpy dtype, type, or string (e.g. 'float32', 'single'), got {value!r}.{hint}"
|
|
111
|
+
) from e
|
|
112
|
+
if resolved is np.float32:
|
|
113
|
+
return np.float32
|
|
114
|
+
if resolved is np.float64:
|
|
115
|
+
return np.float64
|
|
116
|
+
raise ValueError(f"dtype must resolve to float32 or float64; got {resolved.__name__} from {value!r}")
|
|
117
|
+
|
|
118
|
+
|
|
85
119
|
def kspaceFirstOrder(
|
|
86
120
|
kgrid: kWaveGrid,
|
|
87
121
|
medium: kWaveMedium,
|
|
@@ -96,12 +130,14 @@ def kspaceFirstOrder(
|
|
|
96
130
|
smooth_p0: bool = True,
|
|
97
131
|
backend: str = "python",
|
|
98
132
|
device: str = "cpu",
|
|
133
|
+
dtype=None,
|
|
99
134
|
save_only: bool = False,
|
|
100
135
|
data_path: Optional[str] = None,
|
|
101
136
|
quiet: bool = False,
|
|
102
137
|
debug: bool = False,
|
|
103
138
|
num_threads: Optional[int] = None,
|
|
104
139
|
device_num: Optional[int] = None,
|
|
140
|
+
binary_path: Optional[str] = None,
|
|
105
141
|
) -> dict:
|
|
106
142
|
"""Run a k-Wave simulation.
|
|
107
143
|
|
|
@@ -142,6 +178,24 @@ def kspaceFirstOrder(
|
|
|
142
178
|
device: ``"cpu"`` or ``"gpu"``. For ``backend="python"`` this
|
|
143
179
|
selects NumPy (cpu) vs CuPy (gpu). For ``backend="cpp"`` it
|
|
144
180
|
selects the OMP vs CUDA binary. Default ``"cpu"``.
|
|
181
|
+
dtype: Numerical precision for state arrays in the Python backend.
|
|
182
|
+
Accepts dtype-like input — a numpy dtype (``np.float32``,
|
|
183
|
+
``np.float64``; cupy aliases like ``cp.float32`` work since cupy
|
|
184
|
+
re-exports numpy's scalar types), a string (``"float32"``,
|
|
185
|
+
``"float64"``, ``"single"``, ``"double"``), a Python type
|
|
186
|
+
(``float``), or ``None`` for the default (float64). The
|
|
187
|
+
MATLAB-style alias ``"off"`` is accepted as a synonym for
|
|
188
|
+
float64 to ease migration from the legacy
|
|
189
|
+
``SimulationOptions.data_cast``. Torch / JAX dtypes are not
|
|
190
|
+
accepted; pass the numpy equivalent (e.g. ``np.float32`` for
|
|
191
|
+
``torch.float32``).
|
|
192
|
+
``np.float32`` uses roughly half the memory and is faster on
|
|
193
|
+
most hardware, at the cost of reduced numerical accuracy.
|
|
194
|
+
Only ``float32`` and ``float64`` are supported; other dtypes
|
|
195
|
+
raise ``ValueError``. Has no effect on ``backend="cpp"`` (the
|
|
196
|
+
C++ binary uses fixed internal precision regardless); a warning
|
|
197
|
+
is emitted if ``dtype`` resolves to anything other than float64
|
|
198
|
+
with the C++ backend. Default ``None`` (float64).
|
|
145
199
|
save_only: When ``True`` (``backend="cpp"`` only), write the HDF5
|
|
146
200
|
input file and return without running the binary. Useful for
|
|
147
201
|
cluster submission. Default ``False``.
|
|
@@ -154,6 +208,9 @@ def kspaceFirstOrder(
|
|
|
154
208
|
num_threads: Thread count for the C++ OMP binary. ``None`` uses all
|
|
155
209
|
available cores. Default ``None``.
|
|
156
210
|
device_num: GPU device index for CUDA execution. Default ``None``.
|
|
211
|
+
binary_path: Path to a custom C++ binary. When ``None`` (default),
|
|
212
|
+
the binary bundled with ``k-wave-data`` is used. Only applies
|
|
213
|
+
when ``backend="cpp"``.
|
|
157
214
|
|
|
158
215
|
Returns:
|
|
159
216
|
dict: Recorded sensor data keyed by field name (e.g.
|
|
@@ -167,6 +224,7 @@ def kspaceFirstOrder(
|
|
|
167
224
|
raise ValueError(f"device must be 'cpu' or 'gpu', got {device!r}")
|
|
168
225
|
if backend not in ("python", "cpp"):
|
|
169
226
|
raise ValueError(f"Unknown backend: {backend!r}. Use 'python' or 'cpp'.")
|
|
227
|
+
dtype = _resolve_dtype(dtype)
|
|
170
228
|
|
|
171
229
|
if isinstance(pml_size, str) and pml_size.lower() == "auto":
|
|
172
230
|
pml_size = tuple(int(x) for x in get_optimal_pml_size(kgrid))
|
|
@@ -206,10 +264,23 @@ def kspaceFirstOrder(
|
|
|
206
264
|
pml_size=pml_size,
|
|
207
265
|
pml_alpha=pml_alpha,
|
|
208
266
|
quiet=quiet,
|
|
267
|
+
dtype=dtype,
|
|
209
268
|
).run()
|
|
210
269
|
|
|
211
270
|
elif backend == "cpp":
|
|
212
271
|
from kwave.solvers.cpp_simulation import CppSimulation
|
|
272
|
+
from kwave.utils.checks import check_alpha_mode_cpp_compatible, warn_alpha_power_near_unity_cpp
|
|
273
|
+
|
|
274
|
+
check_alpha_mode_cpp_compatible(medium)
|
|
275
|
+
warn_alpha_power_near_unity_cpp(medium)
|
|
276
|
+
|
|
277
|
+
if dtype is not np.float64:
|
|
278
|
+
warnings.warn(
|
|
279
|
+
f"dtype={np.dtype(dtype).name!r} has no effect with backend='cpp'; the C++ binary "
|
|
280
|
+
"uses fixed internal precision regardless. Use backend='python' to control "
|
|
281
|
+
"computational precision.",
|
|
282
|
+
stacklevel=2,
|
|
283
|
+
)
|
|
213
284
|
|
|
214
285
|
if not use_kspace:
|
|
215
286
|
warnings.warn(
|
|
@@ -243,7 +314,7 @@ def kspaceFirstOrder(
|
|
|
243
314
|
if not pml_inside:
|
|
244
315
|
result["pml_size"] = pml_size
|
|
245
316
|
return result
|
|
246
|
-
result = cpp_sim.run(device=device, num_threads=num_threads, device_num=device_num, quiet=quiet, debug=debug, data_path=data_path)
|
|
317
|
+
result = cpp_sim.run(device=device, num_threads=num_threads, device_num=device_num, quiet=quiet, debug=debug, data_path=data_path, binary_path=binary_path)
|
|
247
318
|
|
|
248
319
|
# --- Post-processing: strip PML from full-grid fields ---
|
|
249
320
|
|