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.
Files changed (762) hide show
  1. k_wave_python-0.6.3rc1/.claude/scheduled_tasks.lock +1 -0
  2. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.3rc1}/.claude/settings.local.json +3 -1
  3. k_wave_python-0.6.3rc1/CLAUDE.md +95 -0
  4. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/PKG-INFO +24 -13
  5. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/docs/README.md +11 -1
  6. k_wave_python-0.6.3rc1/kwave/__init__.py +294 -0
  7. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/compat.py +11 -1
  8. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/enums.py +12 -0
  9. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/create_absorption_variables.py +4 -4
  10. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kgrid.py +1 -1
  11. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kmedium.py +57 -44
  12. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrder.py +72 -1
  13. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrder2D.py +5 -0
  14. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrder3D.py +5 -0
  15. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/ktransducer.py +3 -0
  16. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/cpp_simulation.py +98 -13
  17. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/kspace_solver.py +180 -62
  18. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/checks.py +62 -0
  19. k_wave_python-0.6.3rc1/kwave/utils/cuda.py +117 -0
  20. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/mapgen.py +38 -35
  21. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/math.py +2 -4
  22. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/plot.py +2 -2
  23. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/typing.py +16 -2
  24. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/plans/release-strategy.md +69 -10
  25. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/pyproject.toml +13 -12
  26. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/uv.lock +1061 -497
  27. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.git +0 -1
  28. k_wave_python-0.6.1/kwave/__init__.py +0 -205
  29. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1/.claude/worktrees/add-agent-cli}/.claude/settings.local.json +0 -0
  30. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/CONTRIBUTING.md +0 -0
  31. {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
  32. {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
  33. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/config.yml +0 -0
  34. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/example.md +0 -0
  35. {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
  36. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/codecov.yml +0 -0
  37. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/dependabot.yml +0 -0
  38. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/codespell.yml +0 -0
  39. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/link-check.yml +0 -0
  40. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/pytest.yml +0 -0
  41. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/ruff.yml +0 -0
  42. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/run-examples.yml +0 -0
  43. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/test_example.yml +0 -0
  44. {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
  45. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.github/workflows/test_pages.yml +0 -0
  46. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.gitignore +0 -0
  47. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.pre-commit-config.yaml +0 -0
  48. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/.readthedocs.yaml +0 -0
  49. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/CITATION.cff +0 -0
  50. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/Dockerfile +0 -0
  51. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/LICENSE +0 -0
  52. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/Makefile +0 -0
  53. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/Makefile +0 -0
  54. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/README.md +0 -0
  55. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/conf.py +0 -0
  56. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/development/development_environment.rst +0 -0
  57. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/examples_guide.rst +0 -0
  58. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/contrib.rst +0 -0
  59. {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
  60. {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
  61. {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
  62. {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
  63. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/get_started/license.rst +0 -0
  64. {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
  65. {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
  66. {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
  67. {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
  68. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/index.rst +0 -0
  69. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.data.rst +0 -0
  70. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.enums.rst +0 -0
  71. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.executor.rst +0 -0
  72. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation.rst +0 -0
  73. {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
  74. {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
  75. {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
  76. {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
  77. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.rst +0 -0
  78. {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
  79. {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
  80. {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
  81. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kgrid.rst +0 -0
  82. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kmedium.rst +0 -0
  83. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.ksensor.rst +0 -0
  84. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.ksource.rst +0 -0
  85. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder.rst +0 -0
  86. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder2D.rst +0 -0
  87. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder3D.rst +0 -0
  88. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrderAS.rst +0 -0
  89. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.ktransducer.rst +0 -0
  90. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.options.rst +0 -0
  91. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.beamform.rst +0 -0
  92. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.converter.rst +0 -0
  93. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.rst +0 -0
  94. {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
  95. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.tools.rst +0 -0
  96. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.recorder.rst +0 -0
  97. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.rst +0 -0
  98. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.checks.rst +0 -0
  99. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.colormap.rst +0 -0
  100. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.conversion.rst +0 -0
  101. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.data.rst +0 -0
  102. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.dotdictionary.rst +0 -0
  103. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.filters.rst +0 -0
  104. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.interp.rst +0 -0
  105. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.io.rst +0 -0
  106. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.mapgen.rst +0 -0
  107. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.math.rst +0 -0
  108. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.matrix.rst +0 -0
  109. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.pml.rst +0 -0
  110. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.rst +0 -0
  111. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.signals.rst +0 -0
  112. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/kwave.utils.tictoc.rst +0 -0
  113. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/make.bat +0 -0
  114. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/reconstruction/index.rst +0 -0
  115. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/docs/reconstruction/time_reversal.rst +0 -0
  116. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/README.md +0 -0
  117. {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
  118. {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
  119. {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
  120. {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
  121. {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
  122. {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
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {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
  130. {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
  131. {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
  132. {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
  133. {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
  134. {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
  135. {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
  136. {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
  137. {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
  138. {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
  139. {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
  140. {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
  141. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/checkpointing/README.md +0 -0
  142. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/checkpointing/checkpoint.py +0 -0
  143. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/examples/ivp_1D_simulation.py +0 -0
  144. {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
  145. {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
  146. {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
  147. {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
  148. {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
  149. {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
  150. {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
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {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
  159. {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
  160. {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
  161. {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
  162. {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
  163. {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
  164. {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
  165. {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
  166. {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
  167. {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
  168. {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
  169. {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
  170. {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
  171. {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
  172. {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
  173. {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
  174. {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
  175. {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
  176. {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
  177. {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
  178. {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
  179. {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
  180. {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
  181. {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
  182. {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
  183. {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
  184. {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
  185. {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
  186. {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
  187. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/__init__.py +0 -0
  188. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/bin/darwin/kspaceFirstOrder-OMP +0 -0
  189. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/__init__.py +0 -0
  190. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/__init__.py +0 -0
  191. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/phantom.py +0 -0
  192. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/plan.py +0 -0
  193. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/run.py +0 -0
  194. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/sensor.py +0 -0
  195. {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
  196. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/commands/source.py +0 -0
  197. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/main.py +0 -0
  198. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/schema.py +0 -0
  199. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/cli/session.py +0 -0
  200. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/compat.py +0 -0
  201. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/data.py +0 -0
  202. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/enums.py +0 -0
  203. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/executor.py +0 -0
  204. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation.py +0 -0
  205. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kWaveSimulation_helper/__init__.py +0 -0
  206. {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
  207. {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
  208. {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
  209. {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
  210. {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
  211. {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
  212. {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
  213. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kgrid.py +0 -0
  214. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kmedium.py +0 -0
  215. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/ksensor.py +0 -0
  216. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/ksource.py +0 -0
  217. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder.py +0 -0
  218. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder2D.py +0 -0
  219. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder3D.py +0 -0
  220. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrderAS.py +0 -0
  221. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspaceLineRecon.py +0 -0
  222. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/kspacePlaneRecon.py +0 -0
  223. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/ktransducer.py +0 -0
  224. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/options/__init__.py +0 -0
  225. {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
  226. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/options/simulation_options.py +0 -0
  227. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/__init__.py +0 -0
  228. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/beamform.py +0 -0
  229. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/time_reversal.py +0 -0
  230. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/reconstruction/tools.py +0 -0
  231. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/recorder.py +0 -0
  232. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/__init__.py +0 -0
  233. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/cpp_simulation.py +0 -0
  234. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/kspace_solver.py +0 -0
  235. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/native.py +0 -0
  236. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/solvers/validation.py +0 -0
  237. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/__init__.py +0 -0
  238. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/angular_spectrum.py +0 -0
  239. {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
  240. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/atten_comp.py +0 -0
  241. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/checks.py +0 -0
  242. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/colormap.py +0 -0
  243. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/conversion.py +0 -0
  244. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/data.py +0 -0
  245. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/dotdictionary.py +0 -0
  246. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/filters.py +0 -0
  247. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/interp.py +0 -0
  248. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/io.py +0 -0
  249. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/kwave_array.py +0 -0
  250. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/mapgen.py +0 -0
  251. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/math.py +0 -0
  252. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/matlab.py +0 -0
  253. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/matrix.py +0 -0
  254. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/plot.py +0 -0
  255. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/pml.py +0 -0
  256. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/sharpness_filters.py +0 -0
  257. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/signals.py +0 -0
  258. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/tictoc.py +0 -0
  259. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/kwave/utils/typing.py +0 -0
  260. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/make_docs.sh +0 -0
  261. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/plans/release-strategy.md +0 -0
  262. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/pyproject.toml +0 -0
  263. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/pytest.ini +0 -0
  264. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/run_examples.py +0 -0
  265. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/run_tests.sh +0 -0
  266. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/EXAMPLE_source_two.bmp +0 -0
  267. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/__init__.py +0 -0
  268. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/diff_utils.py +0 -0
  269. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/h5_summary.py +0 -0
  270. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/__init__.py +0 -0
  271. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/conftest.py +0 -0
  272. {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
  273. {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
  274. {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
  275. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/test_photoacoustic.py +0 -0
  276. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/integration/test_stubs.py +0 -0
  277. {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
  278. {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
  279. {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
  280. {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
  281. {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
  282. {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
  283. {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
  284. {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
  285. {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
  286. {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
  287. {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
  288. {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
  289. {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
  290. {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
  291. {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
  292. {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
  293. {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
  294. {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
  295. {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
  296. {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
  297. {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
  298. {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
  299. {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
  300. {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
  301. {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
  302. {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
  303. {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
  304. {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
  305. {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
  306. {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
  307. {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
  308. {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
  309. {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
  310. {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
  311. {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
  312. {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
  313. {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
  314. {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
  315. {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
  316. {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
  317. {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
  318. {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
  319. {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
  320. {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
  321. {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
  322. {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
  323. {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
  324. {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
  325. {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
  326. {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
  327. {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
  328. {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
  329. {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
  330. {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
  331. {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
  332. {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
  333. {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
  334. {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
  335. {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
  336. {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
  337. {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
  338. {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
  339. {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
  340. {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
  341. {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
  342. {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
  343. {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
  344. {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
  345. {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
  346. {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
  347. {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
  348. {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
  349. {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
  350. {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
  351. {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
  352. {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
  353. {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
  354. {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
  355. {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
  356. {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
  357. {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
  358. {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
  359. {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
  360. {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
  361. {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
  362. {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
  363. {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
  364. {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
  365. {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
  366. {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
  367. {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
  368. {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
  369. {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
  370. {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
  371. {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
  372. {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
  373. {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
  374. {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
  375. {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
  376. {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
  377. {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
  378. {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
  379. {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
  380. {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
  381. {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
  382. {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
  383. {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
  384. {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
  385. {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
  386. {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
  387. {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
  388. {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
  389. {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
  390. {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
  391. {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
  392. {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
  393. {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
  394. {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
  395. {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
  396. {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
  397. {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
  398. {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
  399. {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
  400. {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
  401. {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
  402. {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
  403. {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
  404. {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
  405. {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
  406. {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
  407. {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
  408. {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
  409. {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
  410. {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
  411. {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
  412. {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
  413. {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
  414. {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
  415. {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
  416. {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
  417. {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
  418. {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
  419. {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
  420. {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
  421. {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
  422. {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
  423. {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
  424. {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
  425. {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
  426. {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
  427. {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
  428. {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
  429. {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
  430. {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
  431. {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
  432. {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
  433. {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
  434. {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
  435. {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
  436. {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
  437. {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
  438. {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
  439. {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
  440. {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
  441. {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
  442. {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
  443. {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
  444. {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
  445. {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
  446. {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
  447. {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
  448. {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
  449. {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
  450. {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
  451. {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
  452. {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
  453. {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
  454. {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
  455. {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
  456. {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
  457. {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
  458. {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
  459. {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
  460. {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
  461. {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
  462. {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
  463. {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
  464. {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
  465. {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
  466. {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
  467. {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
  468. {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
  469. {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
  470. {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
  471. {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
  472. {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
  473. {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
  474. {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
  475. {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
  476. {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
  477. {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
  478. {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
  479. {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
  480. {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
  481. {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
  482. {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
  483. {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
  484. {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
  485. {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
  486. {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
  487. {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
  488. {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
  489. {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
  490. {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
  491. {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
  492. {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
  493. {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
  494. {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
  495. {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
  496. {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
  497. {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
  498. {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
  499. {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
  500. {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
  501. {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
  502. {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
  503. {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
  504. {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
  505. {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
  506. {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
  507. {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
  508. {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
  509. {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
  510. {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
  511. {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
  512. {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
  513. {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
  514. {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
  515. {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
  516. {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
  517. {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
  518. {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
  519. {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
  520. {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
  521. {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
  522. {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
  523. {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
  524. {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
  525. {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
  526. {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
  527. {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
  528. {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
  529. {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
  530. {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
  531. {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
  532. {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
  533. {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
  534. {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
  535. {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
  536. {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
  537. {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
  538. {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
  539. {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
  540. {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
  541. {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
  542. {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
  543. {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
  544. {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
  545. {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
  546. {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
  547. {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
  548. {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
  549. {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
  550. {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
  551. {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
  552. {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
  553. {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
  554. {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
  555. {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
  556. {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
  557. {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
  558. {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
  559. {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
  560. {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
  561. {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
  562. {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
  563. {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
  564. {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
  565. {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
  566. {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
  567. {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
  568. {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
  569. {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
  570. {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
  571. {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
  572. {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
  573. {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
  574. {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
  575. {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
  576. {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
  577. {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
  578. {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
  579. {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
  580. {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
  581. {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
  582. {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
  583. {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
  584. {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
  585. {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
  586. {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
  587. {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
  588. {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
  589. {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
  590. {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
  591. {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
  592. {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
  593. {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
  594. {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
  595. {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
  596. {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
  597. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/setup_test.py +0 -0
  598. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test__init__.py +0 -0
  599. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_c_order.py +0 -0
  600. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_checks.py +0 -0
  601. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cli/__init__.py +0 -0
  602. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_cli/conftest.py +0 -0
  603. {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
  604. {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
  605. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_compat.py +0 -0
  606. {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
  607. {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
  608. {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
  609. {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
  610. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_element.py +0 -0
  611. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_executor.py +0 -0
  612. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_filterutils.py +0 -0
  613. {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
  614. {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
  615. {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
  616. {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
  617. {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
  618. {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
  619. {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
  620. {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
  621. {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
  622. {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
  623. {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
  624. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_ksource.py +0 -0
  625. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_kspaceFirstOrder.py +0 -0
  626. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_kutils.py +0 -0
  627. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_math.py +0 -0
  628. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_misc.py +0 -0
  629. {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
  630. {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
  631. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_native_solver.py +0 -0
  632. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_pmlutils.py +0 -0
  633. {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
  634. {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
  635. {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
  636. {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
  637. {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
  638. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_reconstruction.py +0 -0
  639. {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
  640. {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
  641. {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
  642. {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
  643. {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
  644. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_sharpness_filters.py +0 -0
  645. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_simulation.py +0 -0
  646. {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
  647. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_time_reversal.py +0 -0
  648. {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
  649. {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
  650. {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
  651. {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
  652. {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
  653. {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
  654. {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
  655. {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
  656. {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
  657. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_utils.py +0 -0
  658. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_validation.py +0 -0
  659. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/tests/test_water.py +0 -0
  660. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.claude/worktrees/add-agent-cli/uv.lock +0 -0
  661. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.gitignore +0 -0
  662. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.pre-commit-config.yaml +0 -0
  663. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/.readthedocs.yaml +0 -0
  664. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/CITATION.cff +0 -0
  665. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/Dockerfile +0 -0
  666. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/LICENSE +0 -0
  667. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/.gitignore +0 -0
  668. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/class_index.html +0 -0
  669. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/coverage_html_cb_6fb7b396.js +0 -0
  670. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/function_index.html +0 -0
  671. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/index.html +0 -0
  672. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/status.json +0 -0
  673. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/style_cb_8e611ae1.css +0 -0
  674. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2___init___py.html +0 -0
  675. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_checks_py.html +0 -0
  676. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_colormap_py.html +0 -0
  677. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_conversion_py.html +0 -0
  678. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_data_py.html +0 -0
  679. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_dotdictionary_py.html +0 -0
  680. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_filters_py.html +0 -0
  681. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_interp_py.html +0 -0
  682. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_io_py.html +0 -0
  683. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_mapgen_py.html +0 -0
  684. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_math_py.html +0 -0
  685. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_matlab_py.html +0 -0
  686. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_matrix_py.html +0 -0
  687. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_pml_py.html +0 -0
  688. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_signals_py.html +0 -0
  689. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_tictoc_py.html +0 -0
  690. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_008abe0f134486c2_typing_py.html +0 -0
  691. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069___init___py.html +0 -0
  692. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_create_absorption_variables_py.html +0 -0
  693. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_display_simulation_params_py.html +0 -0
  694. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_expand_grid_matrices_py.html +0 -0
  695. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_retract_transducer_grid_size_py.html +0 -0
  696. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_save_to_disk_func_py.html +0 -0
  697. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_scale_source_terms_func_py.html +0 -0
  698. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_08ccaf6f6fd0d069_set_sound_speed_ref_py.html +0 -0
  699. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_af83d3eb1fd99cb4___init___py.html +0 -0
  700. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_af83d3eb1fd99cb4_simulation_execution_options_py.html +0 -0
  701. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_af83d3eb1fd99cb4_simulation_options_py.html +0 -0
  702. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1___init___py.html +0 -0
  703. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_data_py.html +0 -0
  704. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_enums_py.html +0 -0
  705. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_executor_py.html +0 -0
  706. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kWaveSimulation_py.html +0 -0
  707. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kgrid_py.html +0 -0
  708. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kmedium_py.html +0 -0
  709. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_ksensor_py.html +0 -0
  710. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_ksource_py.html +0 -0
  711. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_kspaceFirstOrder2D_py.html +0 -0
  712. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_ktransducer_py.html +0 -0
  713. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c3dba8f0d3a212d1_recorder_py.html +0 -0
  714. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c6e89a0ff279d0c3___init___py.html +0 -0
  715. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/htmlcov/z_c6e89a0ff279d0c3_time_reversal_py.html +0 -0
  716. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/data.py +0 -0
  717. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/executor.py +0 -0
  718. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation.py +0 -0
  719. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/__init__.py +0 -0
  720. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/display_simulation_params.py +0 -0
  721. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/expand_grid_matrices.py +0 -0
  722. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/retract_transducer_grid_size.py +0 -0
  723. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/save_to_disk_func.py +0 -0
  724. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/scale_source_terms_func.py +0 -0
  725. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kWaveSimulation_helper/set_sound_speed_ref.py +0 -0
  726. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/ksensor.py +0 -0
  727. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/ksource.py +0 -0
  728. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceFirstOrderAS.py +0 -0
  729. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspaceLineRecon.py +0 -0
  730. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/kspacePlaneRecon.py +0 -0
  731. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/options/__init__.py +0 -0
  732. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/options/simulation_execution_options.py +0 -0
  733. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/options/simulation_options.py +0 -0
  734. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/__init__.py +0 -0
  735. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/beamform.py +0 -0
  736. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/time_reversal.py +0 -0
  737. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/reconstruction/tools.py +0 -0
  738. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/recorder.py +0 -0
  739. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/__init__.py +0 -0
  740. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/native.py +0 -0
  741. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/solvers/validation.py +0 -0
  742. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/__init__.py +0 -0
  743. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/angular_spectrum.py +0 -0
  744. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/angular_spectrum_cw.py +0 -0
  745. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/atten_comp.py +0 -0
  746. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/colormap.py +0 -0
  747. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/conversion.py +0 -0
  748. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/data.py +0 -0
  749. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/dotdictionary.py +0 -0
  750. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/filters.py +0 -0
  751. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/interp.py +0 -0
  752. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/io.py +0 -0
  753. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/kwave_array.py +0 -0
  754. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/matlab.py +0 -0
  755. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/matrix.py +0 -0
  756. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/pml.py +0 -0
  757. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/sharpness_filters.py +0 -0
  758. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/signals.py +0 -0
  759. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/kwave/utils/tictoc.py +0 -0
  760. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/make_docs.sh +0 -0
  761. {k_wave_python-0.6.1 → k_wave_python-0.6.3rc1}/pytest.ini +0 -0
  762. {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.1
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==8.6.2
182
+ Requires-Dist: deepdiff==9.1.0
183
183
  Requires-Dist: deprecated>=1.2.14
184
- Requires-Dist: h5py==3.15.1
185
- Requires-Dist: jaxtyping==0.3.2
186
- Requires-Dist: matplotlib==3.10.7
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.5.1; extra == 'dev'
192
+ Requires-Dist: pre-commit==4.6.0; extra == 'dev'
193
193
  Provides-Extra: docs
194
- Requires-Dist: furo==2024.8.6; extra == 'docs'
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.7; extra == 'docs'
198
- Requires-Dist: sphinx-toolbox==3.8.0; extra == 'docs'
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==5.2.0; extra == 'example'
201
+ Requires-Dist: gdown==6.1.0; extra == 'example'
201
202
  Provides-Extra: test
202
- Requires-Dist: coverage==7.10.6; extra == 'test'
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.33.0; extra == 'test'
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
  [![Documentation Status](https://readthedocs.org/projects/k-wave-python/badge/?version=latest)](https://k-wave-python.readthedocs.io/en/latest/?badge=latest)
214
215
  [![codecov](https://codecov.io/gh/waltsims/k-wave-python/graph/badge.svg?token=6ofwtPiDNG)](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"`) and an interface to the pre-compiled k-Wave C++ binaries (`backend="cpp"`) with NVIDIA GPU support (sm 5.0–9.0a).
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
  [![Documentation Status](https://readthedocs.org/projects/k-wave-python/badge/?version=latest)](https://k-wave-python.readthedocs.io/en/latest/?badge=latest)
5
5
  [![codecov](https://codecov.io/gh/waltsims/k-wave-python/graph/badge.svg?token=6ofwtPiDNG)](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"`) and an interface to the pre-compiled k-Wave C++ binaries (`backend="cpp"`) with NVIDIA GPU support (sm 5.0–9.0a).
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
- kwargs["data_path"] = opts.data_path
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"