k-Wave-python 0.6.1__tar.gz → 0.6.3rc1__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.3rc1/.claude/scheduled_tasks.lock +1 -0
- {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.3rc1}/.claude/settings.local.json +3 -1
- k_wave_python-0.6.3rc1/CLAUDE.md +95 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/PKG-INFO +24 -13
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/docs/README.md +11 -1
- k_wave_python-0.6.3rc1/kwave/__init__.py +294 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/compat.py +11 -1
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/enums.py +12 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/create_absorption_variables.py +4 -4
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kgrid.py +1 -1
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kmedium.py +57 -44
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrder.py +72 -1
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrder2D.py +5 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrder3D.py +5 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/ktransducer.py +3 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/cpp_simulation.py +98 -13
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/kspace_solver.py +180 -62
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/checks.py +62 -0
- k_wave_python-0.6.3rc1/kwave/utils/cuda.py +117 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/mapgen.py +38 -35
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/math.py +2 -4
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/plot.py +2 -2
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/typing.py +16 -2
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/plans/release-strategy.md +69 -10
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/pyproject.toml +13 -12
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/uv.lock +1061 -497
- k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.git +0 -1
- k_wave_python-0.6.1/kwave/__init__.py +0 -205
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1/.claude/worktrees/add-agent-cli}/.claude/settings.local.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/CONTRIBUTING.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/code_enhancement.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/example.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/codecov.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/dependabot.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/codespell.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/link-check.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/pytest.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/ruff.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/run-examples.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/test_example.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/test_optional_dependencies.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/test_pages.yml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.gitignore +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.pre-commit-config.yaml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.readthedocs.yaml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/CITATION.cff +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/Dockerfile +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/LICENSE +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/Makefile +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/Makefile +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/conf.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/development/development_environment.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/examples_guide.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/contrib.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/first_simulation.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/grid_overview.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/legacy_licenses/gpl-3.0.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/legacy_licenses/mit.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/license.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/medium_overview.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/new_api.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/sensor_overview.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/source_overview.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/index.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.data.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.enums.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.executor.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.create_absorption_variables.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.display_simulation_params.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.expand_grid_matrices.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.retract_transducer_grid_size.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.save_to_disk_func.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.scale_source_terms_func.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.set_sound_speed_ref.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kgrid.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kmedium.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.ksensor.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.ksource.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder2D.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder3D.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrderAS.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.ktransducer.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.options.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.beamform.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.converter.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.shifted_transform.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.tools.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.recorder.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.checks.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.colormap.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.conversion.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.data.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.dotdictionary.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.filters.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.interp.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.io.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.mapgen.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.math.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.matrix.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.pml.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.signals.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.tictoc.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/make.bat +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/reconstruction/index.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/reconstruction/time_reversal.rst +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/at_array_as_sensor.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/at_array_as_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_array_as_source/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_array_as_source/at_array_as_source.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_array_as_source/at_array_as_source.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/at_circular_piston_3D.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/at_circular_piston_3D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/at_circular_piston_AS.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/at_circular_piston_AS.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/at_focused_annular_array_3D.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/at_focused_annular_array_3D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/at_focused_bowl_3D.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/at_focused_bowl_3D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/at_focused_bowl_AS.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/at_focused_bowl_AS.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/at_linear_array_transducer.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/at_linear_array_transducer.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/checkpointing/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/checkpointing/checkpoint.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/ivp_1D_simulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/ivp_photoacoustic_waveforms.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/ivp_photoacoustic_waveforms.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/modified_matlab_example.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/na_controlling_the_pml.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/new_api_ivp_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/new_api_transducer_3D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/pr_2D_FFT_line_sensor.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/pr_2D_FFT_line_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/pr_2D_TR_line_sensor.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/pr_2D_TR_line_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/pr_3D_FFT_planar_sensor.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/pr_3D_FFT_planar_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/pr_3D_TR_planar_sensor.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/pr_3D_TR_planar_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/sd_directivity_modelling_2D.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/sd_directivity_modelling_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/sd_focussed_detector_2D.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/sd_focussed_detector_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/sd_focussed_detector_3D.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/sd_focussed_detector_3D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/unified_entry_point_demo.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/us_beam_patterns.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/us_beam_patterns.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/example_utils.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/us_bmode_linear_transducer.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/us_bmode_linear_transducer.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/us_bmode_phased_array.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/us_bmode_phased_array.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/README.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/us_defining_transducer.ipynb +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/us_defining_transducer.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/bin/darwin/kspaceFirstOrder-OMP +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/phantom.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/plan.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/run.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/session_cmd.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/source.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/main.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/schema.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/session.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/compat.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/data.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/enums.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/executor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/create_absorption_variables.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/display_simulation_params.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/expand_grid_matrices.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/retract_transducer_grid_size.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/save_to_disk_func.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/scale_source_terms_func.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/set_sound_speed_ref.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kgrid.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kmedium.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/ksensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/ksource.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder3D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrderAS.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceLineRecon.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspacePlaneRecon.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/ktransducer.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/options/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/options/simulation_execution_options.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/options/simulation_options.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/beamform.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/time_reversal.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/tools.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/recorder.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/cpp_simulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/kspace_solver.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/native.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/validation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/angular_spectrum.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/angular_spectrum_cw.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/atten_comp.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/checks.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/colormap.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/conversion.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/data.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/dotdictionary.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/filters.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/interp.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/io.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/kwave_array.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/mapgen.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/math.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/matlab.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/matrix.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/plot.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/pml.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/sharpness_filters.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/signals.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/tictoc.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/typing.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/make_docs.sh +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/plans/release-strategy.md +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/pyproject.toml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/pytest.ini +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/run_examples.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/run_tests.sh +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/EXAMPLE_source_two.bmp +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/diff_utils.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/h5_summary.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/conftest.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/test_ivp_1D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/test_ivp_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/test_parity_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/test_photoacoustic.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/test_stubs.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+private_kwave_functions/tolStar.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+utils/TestRecorder.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+utils/rand_vector_in_range.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_FocusAnnulusONeil.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_FocusBowlONeil.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_angularSpectrum.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_angularSpectrumCW.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_at_linear_array_transducer.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_attenComp.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_brenner.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_cart2grid.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_checkStability.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_computeLinearTransform.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_createCWSignals.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_ivp_1D.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_ivp_2D.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_parity_2D.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_photoacoustic.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_expandMatrix.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_fourierShift.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gaussian.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gaussianFilter.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getAffineMatrix.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getColorMap.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getWin.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_get_delta_BLI.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gradientSpect.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_hounsfield2density.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_interpCartData.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_kWaveArray.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_kWaveGrid.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeArc.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeBall.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeBowl.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartArc.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartBowl.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartCircle.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartDisc.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartRect.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartSphere.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartSphericalSegment.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCircle.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeDisc.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeLine.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeMultiArc.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeMultiBowl.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeSphere.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeSphericalSection.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_maxND.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_minND.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_normvar.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_reorderBinarySensorData.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_reorderSensorData.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_resize.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_revolve2D.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_rotation_matrices.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scaleSI.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scaleTime.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scanConversion.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_smooth.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_tenenbaum.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_tolStar.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_toneBurst.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_trimCartPoints.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_unmaskSensorData.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeAttributes.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeFlags.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeGrid.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeMatrix.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/angularSpectrumCW_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/angularSpectrum_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/attenComp_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/cart2grid_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/computeLinearTransform_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/create_cw_signals_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/expandMatrix_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/focusBowlONeil_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/focusedAnnulusONeil_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/fourierShift_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/gaussianFilter_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/gaussian_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getAffineMatrix_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getColorMap_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getDeltaBLI_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getWin_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/h5io_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/hounsfield2density.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/kWaveArray_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/kWaveGrid_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeArc_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeBall_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeBowl_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartArc_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartBowl_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartCircle_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartRect_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartSphere_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartSphericalSegment_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCircle_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeDisc_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeLine_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeMultiArc_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeMultiBowl_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeSphere_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeSphericalSection_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/maxND_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/minND_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/phase_shift_interpolate_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/reorderBinarySensorData_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/reorderSensorData_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/revolve2D_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/rotation_matrices_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scaleSI_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scaleTime_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scanConversion_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/sharpness_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/smooth_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_check_stability.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_interpcartdata.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_linear_array_transducer.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_make_cart_disc.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_resize.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/tolStart_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/toneBurst_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/trimCartPoints_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/unmaskSensorData_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/check_equality.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/record_reader.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/run_all_collectors.m +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_cpp_io_in_parts.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_cpp_running_simulations.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_3D_simulation.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_axisymmetric_simulation.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_binary_sensor_mask.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_comparison_modelling_functions/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_comparison_modelling_functions/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_heterogeneous_medium.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_homogeneous_medium.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_loading_external_image.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_opposing_corners_sensor_mask.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_photoacoustic_waveforms/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_photoacoustic_waveforms/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_sensor_frequency_response/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_sensor_frequency_response/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_3.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_4.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_3.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_FFT_line_sensor.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_circular_sensor.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_directional_sensors/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_directional_sensors/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_line_sensor.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_3D_FFT_planar_sensor.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directional_array_elements.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_10.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_11.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_3.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_4.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_5.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_6.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_7.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_8.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_9.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_10.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_11.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_3.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_4.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_5.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_6.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_7.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_8.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_9.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_focussed_detector_2D.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_sensor_directivity_2D.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_3D_simulation.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_doppler_effect.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_homogeneous_medium_dipole.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_homogeneous_medium_monopole.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_beam_patterns.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_10.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_11.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_12.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_13.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_14.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_15.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_16.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_17.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_18.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_19.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_20.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_21.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_22.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_23.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_24.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_25.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_26.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_27.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_28.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_29.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_3.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_30.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_31.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_32.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_33.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_34.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_35.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_36.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_37.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_38.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_39.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_4.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_40.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_41.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_42.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_43.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_44.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_45.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_46.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_47.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_48.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_49.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_5.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_50.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_51.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_52.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_53.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_54.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_55.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_56.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_57.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_58.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_59.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_6.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_60.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_61.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_62.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_63.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_64.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_65.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_66.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_67.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_68.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_69.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_7.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_70.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_71.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_72.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_73.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_74.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_75.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_76.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_77.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_78.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_79.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_8.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_80.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_81.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_82.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_83.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_84.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_85.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_86.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_87.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_88.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_89.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_9.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_90.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_91.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_92.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_93.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_94.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_95.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_96.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_1.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_10.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_11.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_12.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_13.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_14.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_15.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_16.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_17.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_18.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_19.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_2.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_20.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_21.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_22.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_23.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_24.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_25.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_26.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_27.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_28.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_29.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_3.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_30.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_31.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_32.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_33.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_4.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_5.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_6.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_7.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_8.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_9.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_defining_transducer.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_transducer_as_sensor.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/setup_test.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_c_order.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_checks.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cli/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cli/conftest.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cli/test_1d_ivp.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cli/test_e2e.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_compat.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cpp_io_in_parts.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cpp_running_simulations.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_create_pixel_dim.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_display_simulation_params.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_element.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_executor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_filterutils.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_3D_simulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_axisymmetric_karray_simulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_axisymmetric_simulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_binary_sensor_mask.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_comparison_modelling_functions.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_heterogeneous_medium.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_homogeneous_medium.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_loading_external_image.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_opposing_corners_sensor_mask.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_photoacoustic_waveforms.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ivp_sensor_frequency_response.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ksource.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_kspaceFirstOrder.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_kutils.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_math.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_misc.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_na_controlling_the_PML.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_na_optimising_performance.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_native_solver.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_pmlutils.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_pr_2D_FFT_line_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_circular_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_directional_sensors.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_line_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_pr_3D_FFT_planar_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_reconstruction.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_sd_directional_array_elements.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_sd_directivity_modelling_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_sd_directivity_modelling_3D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_sd_focussed_detector_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_sd_sensor_directivity_2D.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_sharpness_filters.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_simulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_simulation_execution_options.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_time_reversal.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_tvsp_3D_simulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_tvsp_doppler_effect.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_tvsp_homogeneous_medium_dipole.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_tvsp_homogeneous_medium_monopole.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_us_beam_patterns.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_us_bmode_linear_transducer.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_us_bmode_phased_array.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_us_defining_transducer.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_us_transducer_as_sensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_utils.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_validation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_water.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/uv.lock +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.gitignore +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.pre-commit-config.yaml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.readthedocs.yaml +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/CITATION.cff +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/Dockerfile +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/LICENSE +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/.gitignore +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/class_index.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/coverage_html_cb_6fb7b396.js +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/function_index.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/index.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/status.json +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/style_cb_8e611ae1.css +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2___init___py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_checks_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_colormap_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_conversion_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_data_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_dotdictionary_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_filters_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_interp_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_io_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_mapgen_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_math_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_matlab_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_matrix_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_pml_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_signals_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_tictoc_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_typing_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069___init___py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_create_absorption_variables_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_display_simulation_params_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_expand_grid_matrices_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_retract_transducer_grid_size_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_save_to_disk_func_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_scale_source_terms_func_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_set_sound_speed_ref_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_af83d3eb1fd99cb4___init___py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_af83d3eb1fd99cb4_simulation_execution_options_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_af83d3eb1fd99cb4_simulation_options_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1___init___py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_data_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_enums_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_executor_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kWaveSimulation_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kgrid_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kmedium_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_ksensor_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_ksource_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kspaceFirstOrder2D_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_ktransducer_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_recorder_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c6e89a0ff279d0c3___init___py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c6e89a0ff279d0c3_time_reversal_py.html +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/data.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/executor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/display_simulation_params.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/expand_grid_matrices.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/retract_transducer_grid_size.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/save_to_disk_func.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/scale_source_terms_func.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/set_sound_speed_ref.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/ksensor.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/ksource.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrderAS.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceLineRecon.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspacePlaneRecon.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/options/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/options/simulation_execution_options.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/options/simulation_options.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/beamform.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/time_reversal.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/tools.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/recorder.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/native.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/validation.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/__init__.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/angular_spectrum.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/angular_spectrum_cw.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/atten_comp.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/colormap.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/conversion.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/data.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/dotdictionary.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/filters.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/interp.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/io.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/kwave_array.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/matlab.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/matrix.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/pml.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/sharpness_filters.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/signals.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/tictoc.py +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/make_docs.sh +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/pytest.ini +0 -0
- {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/run_tests.sh +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"sessionId":"d51433dc-c558-4f37-a81d-dad121d6e869","pid":22144,"acquiredAt":1777832541181}
|
|
@@ -39,7 +39,9 @@
|
|
|
39
39
|
"Bash(KWAVE_DEVICE=cpu uv run python examples/us_bmode_phased_array/us_bmode_phased_array.py)",
|
|
40
40
|
"Bash(KWAVE_DEVICE=cpu uv run python examples/checkpointing/checkpoint.py)",
|
|
41
41
|
"Bash(KWAVE_FORCE_CPU=1 uv run python examples/pr_2D_FFT_line_sensor/pr_2D_FFT_line_sensor.py)",
|
|
42
|
-
"mcp__greptile__list_merge_request_comments"
|
|
42
|
+
"mcp__greptile__list_merge_request_comments",
|
|
43
|
+
"Bash(git:*)",
|
|
44
|
+
"Bash(wc -l /Users/Walter/git/k-wave-python/tests/*.py)"
|
|
43
45
|
]
|
|
44
46
|
}
|
|
45
47
|
}
|
|
@@ -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.3rc1
|
|
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.1.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.1.0; extra == 'example'
|
|
201
202
|
Provides-Extra: test
|
|
202
|
-
Requires-Dist: coverage==7.
|
|
203
|
+
Requires-Dist: coverage==7.14.1; 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.2; extra == 'test'
|
|
207
208
|
Requires-Dist: testfixtures==8.3.0; extra == 'test'
|
|
208
209
|
Description-Content-Type: text/markdown
|
|
209
210
|
|
|
@@ -213,7 +214,7 @@ Description-Content-Type: text/markdown
|
|
|
213
214
|
[](https://k-wave-python.readthedocs.io/en/latest/?badge=latest)
|
|
214
215
|
[](https://codecov.io/gh/waltsims/k-wave-python)
|
|
215
216
|
|
|
216
|
-
A Python implementation of [k-Wave](http://www.k-wave.org/) — an acoustics toolbox for time-domain simulation of acoustic wave fields. Includes a pure NumPy/CuPy solver (`backend="python"
|
|
217
|
+
A Python implementation of [k-Wave](http://www.k-wave.org/) — an acoustics toolbox for time-domain simulation of acoustic wave fields. Includes a pure NumPy/CuPy solver (`backend="python"`, supports any CUDA-capable GPU) and an interface to the pre-compiled k-Wave C++ binaries (`backend="cpp"`) with NVIDIA GPU support for compute capability 7.5 (Turing) and newer — covers every consumer/datacenter GPU since 2018, including all shipping Blackwell variants (B200/GB200, B300/GB300, Jetson Thor, RTX 50xx, RTX PRO 6000 Blackwell, GB10/DGX Spark).
|
|
217
218
|
|
|
218
219
|
## Mission
|
|
219
220
|
|
|
@@ -245,6 +246,16 @@ Or with pip:
|
|
|
245
246
|
pip install k-wave-python
|
|
246
247
|
```
|
|
247
248
|
|
|
249
|
+
### Older GPUs (Maxwell, Pascal, Volta)
|
|
250
|
+
|
|
251
|
+
The `backend="cpp"` binaries shipped in v0.6.3+ require compute capability 7.5 (Turing) or newer. CUDA Toolkit 13.0 removed offline-compilation support for older architectures, so the following hardware is not covered by the bundled binaries:
|
|
252
|
+
|
|
253
|
+
- **Maxwell** (GTX 9xx, Titan X Maxwell, Tesla M-series, Jetson Nano)
|
|
254
|
+
- **Pascal** (GTX 10xx, P100, P40, Titan X(p)/Xp, Jetson TX2)
|
|
255
|
+
- **Volta** (V100, Titan V, Quadro GV100, Jetson AGX Xavier)
|
|
256
|
+
|
|
257
|
+
Use `backend="python"` instead (NumPy/CuPy works on every CUDA-capable GPU), or build the C++ backend from source against CUDA Toolkit 12.x.
|
|
258
|
+
|
|
248
259
|
## Development
|
|
249
260
|
|
|
250
261
|
Development instructions can be found [here](https://k-wave-python.readthedocs.io/en/latest/development/development_environment.html).
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://k-wave-python.readthedocs.io/en/latest/?badge=latest)
|
|
5
5
|
[](https://codecov.io/gh/waltsims/k-wave-python)
|
|
6
6
|
|
|
7
|
-
A Python implementation of [k-Wave](http://www.k-wave.org/) — an acoustics toolbox for time-domain simulation of acoustic wave fields. Includes a pure NumPy/CuPy solver (`backend="python"
|
|
7
|
+
A Python implementation of [k-Wave](http://www.k-wave.org/) — an acoustics toolbox for time-domain simulation of acoustic wave fields. Includes a pure NumPy/CuPy solver (`backend="python"`, supports any CUDA-capable GPU) and an interface to the pre-compiled k-Wave C++ binaries (`backend="cpp"`) with NVIDIA GPU support for compute capability 7.5 (Turing) and newer — covers every consumer/datacenter GPU since 2018, including all shipping Blackwell variants (B200/GB200, B300/GB300, Jetson Thor, RTX 50xx, RTX PRO 6000 Blackwell, GB10/DGX Spark).
|
|
8
8
|
|
|
9
9
|
## Mission
|
|
10
10
|
|
|
@@ -36,6 +36,16 @@ Or with pip:
|
|
|
36
36
|
pip install k-wave-python
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
+
### Older GPUs (Maxwell, Pascal, Volta)
|
|
40
|
+
|
|
41
|
+
The `backend="cpp"` binaries shipped in v0.6.3+ require compute capability 7.5 (Turing) or newer. CUDA Toolkit 13.0 removed offline-compilation support for older architectures, so the following hardware is not covered by the bundled binaries:
|
|
42
|
+
|
|
43
|
+
- **Maxwell** (GTX 9xx, Titan X Maxwell, Tesla M-series, Jetson Nano)
|
|
44
|
+
- **Pascal** (GTX 10xx, P100, P40, Titan X(p)/Xp, Jetson TX2)
|
|
45
|
+
- **Volta** (V100, Titan V, Quadro GV100, Jetson AGX Xavier)
|
|
46
|
+
|
|
47
|
+
Use `backend="python"` instead (NumPy/CuPy works on every CUDA-capable GPU), or build the C++ backend from source against CUDA Toolkit 12.x.
|
|
48
|
+
|
|
39
49
|
## Development
|
|
40
50
|
|
|
41
51
|
Development instructions can be found [here](https://k-wave-python.readthedocs.io/en/latest/development/development_environment.html).
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import hashlib
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
import platform
|
|
6
|
+
import stat
|
|
7
|
+
import warnings
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import List
|
|
10
|
+
from urllib.request import urlretrieve
|
|
11
|
+
|
|
12
|
+
# Test installation with:
|
|
13
|
+
# python3 -m pip install -i https://test.pypi.org/simple/ --extra-index-url=https://pypi.org/simple/ k-Wave-python==0.3.0
|
|
14
|
+
__version__ = "0.6.3rc1"
|
|
15
|
+
|
|
16
|
+
# Constants and Configurations
|
|
17
|
+
URL_BASE = "https://github.com/waltsims/"
|
|
18
|
+
BINARY_VERSION = "v1.4.2"
|
|
19
|
+
# Single unified release hosts every platform binary + Windows runtime DLL
|
|
20
|
+
# (consolidated from 5 mirror repos in v1.4.2; see kspacefirstorder-unified#13).
|
|
21
|
+
# One version pin, one set of assets, one source-tree SHA. CUDA binary covers
|
|
22
|
+
# compute capability 7.5+ (Turing through every Blackwell variant: B200/GB200,
|
|
23
|
+
# B300/GB300, Jetson Thor, RTX 50xx, RTX PRO 6000 Blackwell, GB10/DGX Spark).
|
|
24
|
+
_UNIFIED_RELEASE_URL = f"{URL_BASE}kspacefirstorder-unified/releases/download/{BINARY_VERSION}/"
|
|
25
|
+
PLATFORM = platform.system().lower()
|
|
26
|
+
|
|
27
|
+
if PLATFORM not in ["linux", "windows", "darwin"]:
|
|
28
|
+
raise NotImplementedError(f"k-wave-python is currently unsupported on this operating system: {PLATFORM}.")
|
|
29
|
+
|
|
30
|
+
# darwin C++ binary is arm64-only; universal2 coverage tracked for v0.6.5
|
|
31
|
+
DARWIN_BINARY_ARCH = "arm64"
|
|
32
|
+
_darwin_unsupported = PLATFORM == "darwin" and platform.machine() != DARWIN_BINARY_ARCH
|
|
33
|
+
if _darwin_unsupported:
|
|
34
|
+
warnings.warn(
|
|
35
|
+
f"k-wave-python's macOS C++ binary is {DARWIN_BINARY_ARCH}-only. "
|
|
36
|
+
f"Detected {platform.machine()} — the C++ backend (backend='cpp') will not run on this machine. "
|
|
37
|
+
"Use backend='python' instead. Universal2 (Intel + Apple Silicon) coverage is tracked for v0.6.5.",
|
|
38
|
+
RuntimeWarning,
|
|
39
|
+
stacklevel=2,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# TODO: install directly in to /bin/ directory system directory is no longer needed
|
|
43
|
+
# TODO: deprecate in 0.5.0
|
|
44
|
+
BINARY_PATH = Path(__file__).parent / "bin" / PLATFORM
|
|
45
|
+
BINARY_DIR = BINARY_PATH # add alias for BINARY_PATH for now
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# Windows runtime DLLs shipped alongside both .exe files in the unified v1.4.2
|
|
49
|
+
# release. The full bundle is downloaded for either backend selection because we
|
|
50
|
+
# don't know at install time which the user will invoke. Verified against the
|
|
51
|
+
# v1.4.2 release asset manifest (21 DLLs).
|
|
52
|
+
WINDOWS_DLLS = [
|
|
53
|
+
# CUDA runtime (CUDA 13.0 — used by the CUDA backend)
|
|
54
|
+
"cudart64_13.dll",
|
|
55
|
+
"cufft64_12.dll",
|
|
56
|
+
# FFTW3 (used by the OMP backend)
|
|
57
|
+
"fftw3.dll",
|
|
58
|
+
"fftw3f.dll",
|
|
59
|
+
"fftw3l.dll",
|
|
60
|
+
# HDF5 + szip + zlib (from vcpkg; used by both backends)
|
|
61
|
+
"aec.dll",
|
|
62
|
+
"hdf5.dll",
|
|
63
|
+
"hdf5_hl.dll",
|
|
64
|
+
"szip.dll",
|
|
65
|
+
"zlib1.dll",
|
|
66
|
+
# OpenMP runtime (used by the OMP backend)
|
|
67
|
+
"vcomp140.dll",
|
|
68
|
+
# MSVC CRT (Concurrency Runtime + C++ stdlib + C runtime)
|
|
69
|
+
"concrt140.dll",
|
|
70
|
+
"msvcp140.dll",
|
|
71
|
+
"msvcp140_1.dll",
|
|
72
|
+
"msvcp140_2.dll",
|
|
73
|
+
"msvcp140_atomic_wait.dll",
|
|
74
|
+
"msvcp140_codecvt_ids.dll",
|
|
75
|
+
"vccorlib140.dll",
|
|
76
|
+
"vcruntime140.dll",
|
|
77
|
+
"vcruntime140_1.dll",
|
|
78
|
+
"vcruntime140_threads.dll",
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
EXECUTABLE_PREFIX = "kspaceFirstOrder-"
|
|
82
|
+
ARCHITECTURES = ["omp", "cuda"]
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _platform_binary_url(platform_name: str, architecture: str) -> list:
|
|
86
|
+
"""URLs for a backend on a given platform from the unified v1.4.2+ release.
|
|
87
|
+
|
|
88
|
+
Takes ``platform_name`` explicitly so ``URL_DICT`` is correct for every OS
|
|
89
|
+
key, not just the host's. ``_darwin_unsupported`` only suppresses URLs
|
|
90
|
+
when actually running on darwin — building ``URL_DICT["darwin"]`` from a
|
|
91
|
+
Linux host still yields the canonical darwin asset URL.
|
|
92
|
+
"""
|
|
93
|
+
if architecture == "cuda" and platform_name == "darwin":
|
|
94
|
+
return []
|
|
95
|
+
if platform_name == "darwin" and platform_name == PLATFORM and _darwin_unsupported:
|
|
96
|
+
return []
|
|
97
|
+
backend = "CUDA" if architecture == "cuda" else "OMP"
|
|
98
|
+
ext = ".exe" if platform_name == "windows" else ""
|
|
99
|
+
exe_url = f"{_UNIFIED_RELEASE_URL}{EXECUTABLE_PREFIX}{backend}-{platform_name}{ext}"
|
|
100
|
+
# Shared runtime DLLs ship with the OMP entry only — both backends find
|
|
101
|
+
# them at the same BINARY_PATH, so attaching to both would download the
|
|
102
|
+
# full 21-DLL bundle twice on first install.
|
|
103
|
+
dll_urls = [_UNIFIED_RELEASE_URL + dll for dll in WINDOWS_DLLS] if platform_name == "windows" and architecture == "omp" else []
|
|
104
|
+
return [exe_url] + dll_urls
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
URL_DICT = {plat: {arch: _platform_binary_url(plat, arch) for arch in ARCHITECTURES} for plat in ["linux", "darwin", "windows"]}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _local_filename(asset_name: str) -> str:
|
|
111
|
+
"""Map a unified-release asset name to the local install filename.
|
|
112
|
+
|
|
113
|
+
The unified release tags platform binaries with the platform name
|
|
114
|
+
(e.g. ``kspaceFirstOrder-CUDA-linux``, ``kspaceFirstOrder-OMP-windows.exe``)
|
|
115
|
+
to disambiguate them in the GitHub asset list. Consumer code expects the
|
|
116
|
+
bare backend name (``kspaceFirstOrder-CUDA``, ``kspaceFirstOrder-OMP``,
|
|
117
|
+
plus ``.exe`` on Windows). Non-prefixed assets (DLLs, etc.) pass through.
|
|
118
|
+
"""
|
|
119
|
+
if not asset_name.startswith(EXECUTABLE_PREFIX):
|
|
120
|
+
return asset_name
|
|
121
|
+
backend = asset_name.split("-", 2)[1]
|
|
122
|
+
ext = ".exe" if asset_name.endswith(".exe") else ""
|
|
123
|
+
return f"{EXECUTABLE_PREFIX}{backend}{ext}"
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _hash_file(filepath: str) -> str:
|
|
127
|
+
buf_size = 65536 # 64kb chunks
|
|
128
|
+
md5 = hashlib.md5()
|
|
129
|
+
|
|
130
|
+
with open(filepath, "rb") as f:
|
|
131
|
+
while True:
|
|
132
|
+
data = f.read(buf_size)
|
|
133
|
+
if not data:
|
|
134
|
+
break
|
|
135
|
+
md5.update(data)
|
|
136
|
+
return md5.hexdigest()
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _ensure_executable(binary_filepath) -> None:
|
|
140
|
+
# Self-heal the executable bit on Linux/macOS. urlretrieve creates files
|
|
141
|
+
# at 0644, and prior versions of this package didn't fix that up, so users
|
|
142
|
+
# upgrading with a cached non-executable binary on disk would otherwise
|
|
143
|
+
# stay stuck (the cache check below returns True and skips re-download).
|
|
144
|
+
# Any OS-level failure here (broken symlink, read-only FS, wrong ownership,
|
|
145
|
+
# TOCTOU race) is degraded to a warning so it never aborts `import kwave`.
|
|
146
|
+
if PLATFORM == "windows":
|
|
147
|
+
return
|
|
148
|
+
try:
|
|
149
|
+
current_mode = os.stat(binary_filepath).st_mode
|
|
150
|
+
desired_mode = current_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
|
|
151
|
+
if current_mode == desired_mode:
|
|
152
|
+
return
|
|
153
|
+
os.chmod(binary_filepath, desired_mode)
|
|
154
|
+
except OSError: # pragma: no cover - defensive; degrades to warning, never fatal
|
|
155
|
+
# Don't abort import. The user can chmod +x manually or reinstall
|
|
156
|
+
# into a writable location.
|
|
157
|
+
logging.warning(
|
|
158
|
+
"kwave: cannot set executable bit on %s — backend='cpp' may fail with "
|
|
159
|
+
"Permission denied. Run `chmod +x` manually or reinstall.",
|
|
160
|
+
binary_filepath,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def _is_binary_present(binary_name: str, binary_type: str) -> bool:
|
|
165
|
+
binary_filepath = BINARY_PATH / binary_name
|
|
166
|
+
binary_file_exists = os.path.exists(binary_filepath)
|
|
167
|
+
if not binary_file_exists:
|
|
168
|
+
return False
|
|
169
|
+
|
|
170
|
+
if binary_type is None:
|
|
171
|
+
# this is non-kwave windows binary
|
|
172
|
+
# it already exists according to the check above
|
|
173
|
+
return True
|
|
174
|
+
existing_metadata_path = BINARY_PATH / f"{binary_name}_metadata.json"
|
|
175
|
+
|
|
176
|
+
if not os.path.exists(existing_metadata_path):
|
|
177
|
+
# metadata does not exist => binaries may or may not exist
|
|
178
|
+
# Let's play safe and claim they don't exist
|
|
179
|
+
# This will trigger binary download and generation of binary metadata
|
|
180
|
+
return False
|
|
181
|
+
existing_metadata = json.loads(Path(existing_metadata_path).read_text())
|
|
182
|
+
|
|
183
|
+
# If metadata was somehow corrupted
|
|
184
|
+
file_hash = _hash_file(binary_filepath)
|
|
185
|
+
if existing_metadata["file_hash"] != file_hash:
|
|
186
|
+
return False
|
|
187
|
+
|
|
188
|
+
# If there is a new binary
|
|
189
|
+
latest_urls = URL_DICT[PLATFORM][binary_type]
|
|
190
|
+
if existing_metadata["url"] not in latest_urls:
|
|
191
|
+
return False
|
|
192
|
+
|
|
193
|
+
_ensure_executable(binary_filepath)
|
|
194
|
+
|
|
195
|
+
# No need to check `version` field for now
|
|
196
|
+
# because we version is already present in the URL
|
|
197
|
+
return True
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def binaries_present() -> bool:
|
|
201
|
+
"""
|
|
202
|
+
Check if binaries are present
|
|
203
|
+
Returns:
|
|
204
|
+
bool, True if binaries are present, False otherwise
|
|
205
|
+
|
|
206
|
+
"""
|
|
207
|
+
binary_list = []
|
|
208
|
+
for binary_type in ARCHITECTURES:
|
|
209
|
+
for url in URL_DICT[PLATFORM][binary_type]:
|
|
210
|
+
binary_list.append((_local_filename(url.split("/")[-1]), binary_type))
|
|
211
|
+
|
|
212
|
+
missing_binaries: List[str] = []
|
|
213
|
+
|
|
214
|
+
for binary_name, binary_type in binary_list:
|
|
215
|
+
if not _is_binary_present(binary_name, binary_type):
|
|
216
|
+
missing_binaries.append(binary_name)
|
|
217
|
+
|
|
218
|
+
if len(missing_binaries) > 0:
|
|
219
|
+
missing_binaries_str = ", ".join(missing_binaries)
|
|
220
|
+
logging.log(
|
|
221
|
+
logging.INFO,
|
|
222
|
+
f"Following binaries were not found: {missing_binaries_str}"
|
|
223
|
+
"If this is first time you're running k-wave-python, "
|
|
224
|
+
"binaries will be downloaded automatically.",
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
return len(missing_binaries) == 0
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def _record_binary_metadata(binary_version: str, binary_filepath: str, binary_url: str, filename: str) -> None:
|
|
231
|
+
# note: version is not immediately useful at the moment
|
|
232
|
+
# because it is already present in the url and we use url to understand if versions match
|
|
233
|
+
# However, let's record it anyway. Maybe it will be useful in the future.
|
|
234
|
+
metadata = {"url": binary_url, "version": binary_version, "file_hash": _hash_file(binary_filepath)}
|
|
235
|
+
metadata_filename = f"{filename}_metadata.json"
|
|
236
|
+
metadata_filepath = BINARY_PATH / metadata_filename
|
|
237
|
+
with open(metadata_filepath, "w") as outfile:
|
|
238
|
+
json.dump(metadata, outfile, indent=4)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def download_binaries(system_os: str, bin_type: str):
|
|
242
|
+
"""
|
|
243
|
+
Download binary from release url
|
|
244
|
+
Args:
|
|
245
|
+
system_os: string, current system type
|
|
246
|
+
bin_type: string of "OMP" or "CUDA"
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
None
|
|
250
|
+
|
|
251
|
+
"""
|
|
252
|
+
for url in URL_DICT[system_os][bin_type]:
|
|
253
|
+
# Extract the asset name from the GitHub release URL, then map it to
|
|
254
|
+
# the local install filename consumer code expects (see _local_filename).
|
|
255
|
+
binary_version, asset_name = url.split("/")[-2:]
|
|
256
|
+
filename = _local_filename(asset_name)
|
|
257
|
+
|
|
258
|
+
logging.log(logging.INFO, f"Downloading {asset_name} -> {filename} in {BINARY_PATH}...")
|
|
259
|
+
|
|
260
|
+
# Create the directory if it does not yet exist
|
|
261
|
+
os.makedirs(BINARY_PATH, exist_ok=True)
|
|
262
|
+
|
|
263
|
+
# Download the binary file
|
|
264
|
+
try:
|
|
265
|
+
binary_filepath = os.path.join(BINARY_PATH, filename)
|
|
266
|
+
urlretrieve(url, binary_filepath)
|
|
267
|
+
_ensure_executable(binary_filepath)
|
|
268
|
+
_record_binary_metadata(binary_version=binary_version, binary_filepath=binary_filepath, binary_url=url, filename=filename)
|
|
269
|
+
|
|
270
|
+
except TimeoutError:
|
|
271
|
+
logging.log(
|
|
272
|
+
logging.WARN,
|
|
273
|
+
f"Download of {filename} timed out. "
|
|
274
|
+
"This can be due to slow internet connection. "
|
|
275
|
+
"Partially downloaded files will be removed.",
|
|
276
|
+
)
|
|
277
|
+
try:
|
|
278
|
+
os.remove(BINARY_PATH)
|
|
279
|
+
except Exception:
|
|
280
|
+
folder_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "bin")
|
|
281
|
+
logging.warning(
|
|
282
|
+
"Error occurred while removing partially downloaded binary. "
|
|
283
|
+
f"Please manually delete the `{folder_path}` folder which "
|
|
284
|
+
"can be found in your virtual environment."
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
def install_binaries():
|
|
289
|
+
for binary_type in ARCHITECTURES:
|
|
290
|
+
download_binaries(PLATFORM, binary_type)
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
if not binaries_present():
|
|
294
|
+
install_binaries()
|
|
@@ -39,7 +39,13 @@ def options_to_kwargs(simulation_options=None, execution_options=None):
|
|
|
39
39
|
kwargs["use_kspace"] = opts.use_kspace
|
|
40
40
|
kwargs["smooth_p0"] = opts.smooth_p0
|
|
41
41
|
if opts.data_path is not None:
|
|
42
|
-
|
|
42
|
+
import os
|
|
43
|
+
from tempfile import gettempdir
|
|
44
|
+
|
|
45
|
+
normalized_data_path = os.path.realpath(os.path.normpath(os.fspath(opts.data_path)))
|
|
46
|
+
normalized_tempdir = os.path.realpath(os.path.normpath(os.fspath(gettempdir())))
|
|
47
|
+
if normalized_data_path != normalized_tempdir:
|
|
48
|
+
kwargs["data_path"] = opts.data_path
|
|
43
49
|
if opts.save_to_disk_exit:
|
|
44
50
|
kwargs["save_only"] = True
|
|
45
51
|
|
|
@@ -70,5 +76,9 @@ def options_to_kwargs(simulation_options=None, execution_options=None):
|
|
|
70
76
|
kwargs["num_threads"] = opts.num_threads
|
|
71
77
|
if opts.device_num is not None:
|
|
72
78
|
kwargs["device_num"] = opts.device_num
|
|
79
|
+
# Read _binary_path directly: the property auto-resolves to a default,
|
|
80
|
+
# so it can't distinguish a user-set path from one.
|
|
81
|
+
if opts._binary_path is not None:
|
|
82
|
+
kwargs["binary_path"] = opts._binary_path
|
|
73
83
|
|
|
74
84
|
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"
|