k-Wave-python 0.6.1__tar.gz → 0.6.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (760) hide show
  1. k_wave_python-0.6.2/.git +1 -0
  2. k_wave_python-0.6.2/CLAUDE.md +95 -0
  3. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/PKG-INFO +13 -12
  4. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/__init__.py +60 -7
  5. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/compat.py +4 -0
  6. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/enums.py +12 -0
  7. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/create_absorption_variables.py +4 -4
  8. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/kgrid.py +1 -1
  9. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kmedium.py +57 -44
  10. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/kspaceFirstOrder.py +72 -1
  11. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspaceFirstOrder2D.py +5 -0
  12. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/kspaceFirstOrder3D.py +5 -0
  13. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/solvers/cpp_simulation.py +48 -13
  14. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/solvers/kspace_solver.py +180 -62
  15. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/checks.py +62 -0
  16. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/mapgen.py +38 -35
  17. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/math.py +2 -4
  18. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/plot.py +2 -2
  19. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/typing.py +16 -2
  20. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/plans/release-strategy.md +69 -10
  21. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/pyproject.toml +13 -12
  22. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/uv.lock +869 -437
  23. k_wave_python-0.6.1/.claude/settings.local.json +0 -45
  24. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.claude/settings.local.json +0 -45
  25. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.git +0 -1
  26. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/CONTRIBUTING.md +0 -29
  27. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  28. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/code_enhancement.md +0 -28
  29. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/config.yml +0 -1
  30. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/example.md +0 -17
  31. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  32. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/codecov.yml +0 -5
  33. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/dependabot.yml +0 -11
  34. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/codespell.yml +0 -25
  35. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/link-check.yml +0 -35
  36. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/pytest.yml +0 -124
  37. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/ruff.yml +0 -9
  38. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/run-examples.yml +0 -56
  39. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/test_example.yml +0 -29
  40. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/test_optional_dependencies.yml +0 -29
  41. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/.github/workflows/test_pages.yml +0 -18
  42. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/Makefile +0 -44
  43. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/Makefile +0 -20
  44. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/README.md +0 -76
  45. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/conf.py +0 -101
  46. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/development/development_environment.rst +0 -187
  47. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/examples_guide.rst +0 -179
  48. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/contrib.rst +0 -4
  49. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/first_simulation.rst +0 -215
  50. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/grid_overview.rst +0 -25
  51. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/legacy_licenses/gpl-3.0.rst +0 -674
  52. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/legacy_licenses/mit.rst +0 -17
  53. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/license.rst +0 -30
  54. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/medium_overview.rst +0 -48
  55. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/new_api.rst +0 -137
  56. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/sensor_overview.rst +0 -66
  57. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/get_started/source_overview.rst +0 -52
  58. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/index.rst +0 -62
  59. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.data.rst +0 -7
  60. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.enums.rst +0 -7
  61. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.executor.rst +0 -7
  62. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation.rst +0 -9
  63. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.create_absorption_variables.rst +0 -7
  64. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.display_simulation_params.rst +0 -7
  65. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.expand_grid_matrices.rst +0 -7
  66. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.retract_transducer_grid_size.rst +0 -7
  67. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.rst +0 -26
  68. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.save_to_disk_func.rst +0 -7
  69. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.scale_source_terms_func.rst +0 -7
  70. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kWaveSimulation_helper.set_sound_speed_ref.rst +0 -7
  71. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kgrid.rst +0 -9
  72. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kmedium.rst +0 -9
  73. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.ksensor.rst +0 -9
  74. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.ksource.rst +0 -9
  75. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder.rst +0 -7
  76. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder2D.rst +0 -7
  77. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrder3D.rst +0 -7
  78. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.kspaceFirstOrderAS.rst +0 -7
  79. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.ktransducer.rst +0 -7
  80. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.options.rst +0 -9
  81. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.beamform.rst +0 -7
  82. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.converter.rst +0 -7
  83. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.rst +0 -21
  84. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.shifted_transform.rst +0 -7
  85. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.reconstruction.tools.rst +0 -7
  86. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.recorder.rst +0 -7
  87. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.rst +0 -42
  88. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.checks.rst +0 -7
  89. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.colormap.rst +0 -7
  90. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.conversion.rst +0 -7
  91. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.data.rst +0 -7
  92. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.dotdictionary.rst +0 -7
  93. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.filters.rst +0 -7
  94. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.interp.rst +0 -7
  95. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.io.rst +0 -7
  96. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.mapgen.rst +0 -7
  97. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.math.rst +0 -7
  98. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.matrix.rst +0 -7
  99. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.pml.rst +0 -7
  100. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.rst +0 -31
  101. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.signals.rst +0 -7
  102. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/kwave.utils.tictoc.rst +0 -7
  103. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/make.bat +0 -35
  104. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/reconstruction/index.rst +0 -19
  105. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/docs/reconstruction/time_reversal.rst +0 -80
  106. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/README.md +0 -57
  107. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/README.md +0 -7
  108. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/at_array_as_sensor.ipynb +0 -299
  109. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_sensor/at_array_as_sensor.py +0 -166
  110. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_source/README.md +0 -9
  111. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_source/at_array_as_source.ipynb +0 -262
  112. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_array_as_source/at_array_as_source.py +0 -161
  113. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/README.md +0 -5
  114. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/at_circular_piston_3D.ipynb +0 -455
  115. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_3D/at_circular_piston_3D.py +0 -207
  116. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/README.md +0 -5
  117. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/at_circular_piston_AS.ipynb +0 -383
  118. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_circular_piston_AS/at_circular_piston_AS.py +0 -233
  119. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/README.md +0 -5
  120. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/at_focused_annular_array_3D.ipynb +0 -452
  121. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_annular_array_3D/at_focused_annular_array_3D.py +0 -214
  122. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/README.md +0 -5
  123. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/at_focused_bowl_3D.ipynb +0 -451
  124. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_3D/at_focused_bowl_3D.py +0 -233
  125. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/README.md +0 -5
  126. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/at_focused_bowl_AS.ipynb +0 -384
  127. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_focused_bowl_AS/at_focused_bowl_AS.py +0 -236
  128. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/README.md +0 -7
  129. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/at_linear_array_transducer.ipynb +0 -201
  130. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/at_linear_array_transducer/at_linear_array_transducer.py +0 -108
  131. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/checkpointing/README.md +0 -5
  132. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/checkpointing/checkpoint.py +0 -107
  133. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_1D_simulation.py +0 -81
  134. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/README.md +0 -16
  135. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/ivp_photoacoustic_waveforms.ipynb +0 -284
  136. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/ivp_photoacoustic_waveforms/ivp_photoacoustic_waveforms.py +0 -164
  137. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/README.md +0 -21
  138. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/modified_matlab_example.m +0 -68
  139. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/na_controlling_the_pml/na_controlling_the_pml.ipynb +0 -232
  140. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/new_api_ivp_2D.py +0 -39
  141. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/new_api_transducer_3D.py +0 -48
  142. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/README.md +0 -7
  143. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/pr_2D_FFT_line_sensor.ipynb +0 -298
  144. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_FFT_line_sensor/pr_2D_FFT_line_sensor.py +0 -154
  145. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/README.md +0 -7
  146. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/pr_2D_TR_line_sensor.ipynb +0 -335
  147. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_2D_TR_line_sensor/pr_2D_TR_line_sensor.py +0 -182
  148. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/README.md +0 -7
  149. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/pr_3D_FFT_planar_sensor.ipynb +0 -313
  150. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_FFT_planar_sensor/pr_3D_FFT_planar_sensor.py +0 -205
  151. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/README.md +0 -7
  152. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/pr_3D_TR_planar_sensor.ipynb +0 -307
  153. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/pr_3D_TR_planar_sensor/pr_3D_TR_planar_sensor.py +0 -214
  154. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/README.md +0 -7
  155. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/sd_directivity_modelling_2D.ipynb +0 -244
  156. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_directivity_modelling_2D/sd_directivity_modelling_2D.py +0 -126
  157. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/README.md +0 -7
  158. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/sd_focussed_detector_2D.ipynb +0 -207
  159. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_2D/sd_focussed_detector_2D.py +0 -107
  160. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/README.md +0 -7
  161. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/sd_focussed_detector_3D.ipynb +0 -275
  162. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/sd_focussed_detector_3D/sd_focussed_detector_3D.py +0 -132
  163. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/unified_entry_point_demo.py +0 -85
  164. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/README.md +0 -7
  165. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/us_beam_patterns.ipynb +0 -345
  166. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_beam_patterns/us_beam_patterns.py +0 -272
  167. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/README.md +0 -8
  168. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/example_utils.py +0 -16
  169. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/us_bmode_linear_transducer.ipynb +0 -478
  170. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_linear_transducer/us_bmode_linear_transducer.py +0 -286
  171. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/README.md +0 -9
  172. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/us_bmode_phased_array.ipynb +0 -468
  173. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_bmode_phased_array/us_bmode_phased_array.py +0 -277
  174. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/README.md +0 -8
  175. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/us_defining_transducer.ipynb +0 -271
  176. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/examples/us_defining_transducer/us_defining_transducer.py +0 -148
  177. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/__init__.py +0 -205
  178. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/bin/darwin/kspaceFirstOrder-OMP +0 -0
  179. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/__init__.py +0 -9
  180. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/phantom.py +0 -132
  181. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/plan.py +0 -77
  182. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/run.py +0 -88
  183. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/sensor.py +0 -40
  184. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/session_cmd.py +0 -39
  185. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands/source.py +0 -43
  186. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/main.py +0 -34
  187. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/schema.py +0 -98
  188. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/session.py +0 -226
  189. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/enums.py +0 -22
  190. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/executor.py +0 -143
  191. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/kgrid.py +0 -701
  192. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder.py +0 -275
  193. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/kspaceFirstOrder3D.py +0 -388
  194. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/solvers/cpp_simulation.py +0 -350
  195. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/solvers/kspace_solver.py +0 -833
  196. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/utils/__init__.py +0 -0
  197. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/utils/filters.py +0 -601
  198. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/plans/release-strategy.md +0 -435
  199. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/pyproject.toml +0 -131
  200. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/pytest.ini +0 -6
  201. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/run_examples.py +0 -26
  202. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/EXAMPLE_source_two.bmp +0 -0
  203. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/__init__.py +0 -8
  204. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/diff_utils.py +0 -32
  205. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/h5_summary.py +0 -104
  206. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/__init__.py +0 -0
  207. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/conftest.py +0 -77
  208. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_ivp_1D.py +0 -44
  209. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_ivp_2D.py +0 -46
  210. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_parity_2D.py +0 -122
  211. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_photoacoustic.py +0 -71
  212. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/integration/test_stubs.py +0 -81
  213. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+private_kwave_functions/tolStar.m +0 -231
  214. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+utils/TestRecorder.m +0 -42
  215. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/+utils/rand_vector_in_range.m +0 -3
  216. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_FocusAnnulusONeil.m +0 -32
  217. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_FocusBowlONeil.m +0 -33
  218. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_angularSpectrum.m +0 -24
  219. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_angularSpectrumCW.m +0 -25
  220. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_at_linear_array_transducer.m +0 -131
  221. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_attenComp.m +0 -24
  222. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_brenner.m +0 -13
  223. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_cart2grid.m +0 -75
  224. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_checkStability.m +0 -50
  225. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_computeLinearTransform.m +0 -25
  226. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_createCWSignals.m +0 -22
  227. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_ivp_1D.m +0 -35
  228. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_ivp_2D.m +0 -33
  229. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_parity_2D.m +0 -58
  230. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_example_photoacoustic.m +0 -50
  231. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_expandMatrix.m +0 -53
  232. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_fourierShift.m +0 -40
  233. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gaussian.m +0 -12
  234. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gaussianFilter.m +0 -23
  235. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getAffineMatrix.m +0 -25
  236. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getColorMap.m +0 -13
  237. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_getWin.m +0 -92
  238. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_get_delta_BLI.m +0 -36
  239. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_gradientSpect.m +0 -19
  240. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_hounsfield2density.m +0 -9
  241. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_interpCartData.m +0 -76
  242. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_kWaveArray.m +0 -175
  243. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_kWaveGrid.m +0 -97
  244. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeArc.m +0 -36
  245. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeBall.m +0 -23
  246. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeBowl.m +0 -23
  247. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartArc.m +0 -23
  248. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartBowl.m +0 -22
  249. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartCircle.m +0 -25
  250. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartDisc.m +0 -22
  251. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartRect.m +0 -21
  252. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartSphere.m +0 -22
  253. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCartSphericalSegment.m +0 -60
  254. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeCircle.m +0 -31
  255. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeDisc.m +0 -22
  256. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeLine.m +0 -26
  257. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeMultiArc.m +0 -20
  258. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeMultiBowl.m +0 -22
  259. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeSphere.m +0 -21
  260. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_makeSphericalSection.m +0 -20
  261. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_maxND.m +0 -24
  262. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_minND.m +0 -28
  263. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_normvar.m +0 -13
  264. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_reorderBinarySensorData.m +0 -12
  265. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_reorderSensorData.m +0 -20
  266. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_resize.m +0 -29
  267. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_revolve2D.m +0 -21
  268. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_rotation_matrices.m +0 -34
  269. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scaleSI.m +0 -25
  270. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scaleTime.m +0 -23
  271. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_scanConversion.m +0 -23
  272. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_smooth.m +0 -9
  273. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_tenenbaum.m +0 -14
  274. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_tolStar.m +0 -63
  275. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_toneBurst.m +0 -27
  276. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_trimCartPoints.m +0 -41
  277. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_unmaskSensorData.m +0 -63
  278. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeAttributes.m +0 -11
  279. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeFlags.m +0 -15
  280. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeGrid.m +0 -14
  281. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/matlab_collectors/collect_writeMatrix.m +0 -12
  282. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/__init__.py +0 -0
  283. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/angularSpectrumCW_test.py +0 -24
  284. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/angularSpectrum_test.py +0 -27
  285. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/attenComp_test.py +0 -29
  286. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/cart2grid_test.py +0 -63
  287. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/computeLinearTransform_test.py +0 -39
  288. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/create_cw_signals_test.py +0 -32
  289. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/expandMatrix_test.py +0 -34
  290. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/focusBowlONeil_test.py +0 -43
  291. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/focusedAnnulusONeil_test.py +0 -140
  292. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/fourierShift_test.py +0 -40
  293. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/gaussianFilter_test.py +0 -24
  294. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/gaussian_test.py +0 -17
  295. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getAffineMatrix_test.py +0 -22
  296. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getColorMap_test.py +0 -35
  297. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getDeltaBLI_test.py +0 -26
  298. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/getWin_test.py +0 -48
  299. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/h5io_test.py +0 -87
  300. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/hounsfield2density.py +0 -21
  301. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/kWaveArray_test.py +0 -180
  302. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/kWaveGrid_test.py +0 -78
  303. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeArc_test.py +0 -38
  304. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeBall_test.py +0 -36
  305. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeBowl_test.py +0 -43
  306. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartArc_test.py +0 -47
  307. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartBowl_test.py +0 -27
  308. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartCircle_test.py +0 -41
  309. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartRect_test.py +0 -26
  310. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartSphere_test.py +0 -35
  311. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCartSphericalSegment_test.py +0 -63
  312. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeCircle_test.py +0 -35
  313. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeDisc_test.py +0 -29
  314. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeLine_test.py +0 -45
  315. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeMultiArc_test.py +0 -30
  316. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeMultiBowl_test.py +0 -33
  317. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeSphere_test.py +0 -29
  318. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/makeSphericalSection_test.py +0 -37
  319. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/maxND_test.py +0 -30
  320. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/minND_test.py +0 -25
  321. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/phase_shift_interpolate_test.py +0 -65
  322. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/reorderBinarySensorData_test.py +0 -26
  323. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/reorderSensorData_test.py +0 -39
  324. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/revolve2D_test.py +0 -30
  325. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/rotation_matrices_test.py +0 -37
  326. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scaleSI_test.py +0 -44
  327. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scaleTime_test.py +0 -29
  328. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/scanConversion_test.py +0 -30
  329. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/sharpness_test.py +0 -64
  330. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/smooth_test.py +0 -18
  331. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_check_stability.py +0 -83
  332. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_interpcartdata.py +0 -70
  333. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_linear_array_transducer.py +0 -63
  334. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_make_cart_disc.py +0 -25
  335. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/test_resize.py +0 -30
  336. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/tolStart_test.py +0 -52
  337. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/toneBurst_test.py +0 -58
  338. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/trimCartPoints_test.py +0 -28
  339. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/unmaskSensorData_test.py +0 -44
  340. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/__init__.py +0 -0
  341. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/check_equality.py +0 -146
  342. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/python_testers/utils/record_reader.py +0 -28
  343. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/matlab_test_data_collectors/run_all_collectors.m +0 -38
  344. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_cpp_io_in_parts.json +0 -912
  345. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_cpp_running_simulations.json +0 -912
  346. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_3D_simulation.json +0 -812
  347. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_axisymmetric_simulation.json +0 -752
  348. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_binary_sensor_mask.json +0 -792
  349. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_comparison_modelling_functions/input_1.json +0 -752
  350. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_comparison_modelling_functions/input_2.json +0 -752
  351. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_heterogeneous_medium.json +0 -752
  352. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_homogeneous_medium.json +0 -792
  353. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_loading_external_image.json +0 -792
  354. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_opposing_corners_sensor_mask.json +0 -792
  355. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_photoacoustic_waveforms/input_1.json +0 -752
  356. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_photoacoustic_waveforms/input_2.json +0 -812
  357. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_sensor_frequency_response/input_1.json +0 -792
  358. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_ivp_sensor_frequency_response/input_2.json +0 -792
  359. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_1.json +0 -752
  360. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_2.json +0 -752
  361. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_3.json +0 -752
  362. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_controlling_the_PML/input_4.json +0 -752
  363. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_1.json +0 -752
  364. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_2.json +0 -752
  365. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_na_optimising_performance/input_3.json +0 -752
  366. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_FFT_line_sensor.json +0 -752
  367. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_circular_sensor.json +0 -752
  368. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_directional_sensors/input_1.json +0 -752
  369. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_directional_sensors/input_2.json +0 -752
  370. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_2D_TR_line_sensor.json +0 -752
  371. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_pr_3D_FFT_planar_sensor.json +0 -812
  372. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directional_array_elements.json +0 -812
  373. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_1.json +0 -812
  374. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_10.json +0 -812
  375. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_11.json +0 -812
  376. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_2.json +0 -812
  377. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_3.json +0 -812
  378. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_4.json +0 -812
  379. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_5.json +0 -812
  380. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_6.json +0 -812
  381. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_7.json +0 -812
  382. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_8.json +0 -812
  383. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_2D/input_9.json +0 -812
  384. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_1.json +0 -872
  385. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_10.json +0 -872
  386. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_11.json +0 -872
  387. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_2.json +0 -872
  388. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_3.json +0 -872
  389. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_4.json +0 -872
  390. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_5.json +0 -872
  391. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_6.json +0 -872
  392. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_7.json +0 -872
  393. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_8.json +0 -872
  394. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_directivity_modelling_3D/input_9.json +0 -872
  395. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_focussed_detector_2D.json +0 -752
  396. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_sd_sensor_directivity_2D.json +0 -752
  397. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_3D_simulation.json +0 -872
  398. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_doppler_effect.json +0 -852
  399. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_homogeneous_medium_dipole.json +0 -852
  400. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_tvsp_homogeneous_medium_monopole.json +0 -852
  401. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_beam_patterns.json +0 -912
  402. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_1.json +0 -912
  403. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_10.json +0 -912
  404. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_11.json +0 -912
  405. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_12.json +0 -912
  406. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_13.json +0 -912
  407. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_14.json +0 -912
  408. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_15.json +0 -912
  409. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_16.json +0 -912
  410. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_17.json +0 -912
  411. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_18.json +0 -912
  412. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_19.json +0 -912
  413. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_2.json +0 -912
  414. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_20.json +0 -912
  415. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_21.json +0 -912
  416. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_22.json +0 -912
  417. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_23.json +0 -912
  418. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_24.json +0 -912
  419. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_25.json +0 -912
  420. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_26.json +0 -912
  421. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_27.json +0 -912
  422. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_28.json +0 -912
  423. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_29.json +0 -912
  424. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_3.json +0 -912
  425. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_30.json +0 -912
  426. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_31.json +0 -912
  427. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_32.json +0 -912
  428. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_33.json +0 -912
  429. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_34.json +0 -912
  430. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_35.json +0 -912
  431. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_36.json +0 -912
  432. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_37.json +0 -912
  433. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_38.json +0 -912
  434. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_39.json +0 -912
  435. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_4.json +0 -912
  436. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_40.json +0 -912
  437. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_41.json +0 -912
  438. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_42.json +0 -912
  439. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_43.json +0 -912
  440. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_44.json +0 -912
  441. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_45.json +0 -912
  442. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_46.json +0 -912
  443. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_47.json +0 -912
  444. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_48.json +0 -912
  445. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_49.json +0 -912
  446. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_5.json +0 -912
  447. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_50.json +0 -912
  448. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_51.json +0 -912
  449. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_52.json +0 -912
  450. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_53.json +0 -912
  451. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_54.json +0 -912
  452. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_55.json +0 -912
  453. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_56.json +0 -912
  454. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_57.json +0 -912
  455. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_58.json +0 -912
  456. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_59.json +0 -912
  457. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_6.json +0 -912
  458. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_60.json +0 -912
  459. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_61.json +0 -912
  460. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_62.json +0 -912
  461. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_63.json +0 -912
  462. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_64.json +0 -912
  463. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_65.json +0 -912
  464. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_66.json +0 -912
  465. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_67.json +0 -912
  466. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_68.json +0 -912
  467. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_69.json +0 -912
  468. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_7.json +0 -912
  469. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_70.json +0 -912
  470. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_71.json +0 -912
  471. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_72.json +0 -912
  472. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_73.json +0 -912
  473. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_74.json +0 -912
  474. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_75.json +0 -912
  475. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_76.json +0 -912
  476. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_77.json +0 -912
  477. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_78.json +0 -912
  478. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_79.json +0 -912
  479. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_8.json +0 -912
  480. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_80.json +0 -912
  481. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_81.json +0 -912
  482. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_82.json +0 -912
  483. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_83.json +0 -912
  484. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_84.json +0 -912
  485. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_85.json +0 -912
  486. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_86.json +0 -912
  487. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_87.json +0 -912
  488. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_88.json +0 -912
  489. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_89.json +0 -912
  490. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_9.json +0 -912
  491. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_90.json +0 -912
  492. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_91.json +0 -912
  493. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_92.json +0 -912
  494. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_93.json +0 -912
  495. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_94.json +0 -912
  496. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_95.json +0 -912
  497. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_linear_transducer/input_96.json +0 -912
  498. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_1.json +0 -912
  499. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_10.json +0 -912
  500. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_11.json +0 -912
  501. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_12.json +0 -912
  502. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_13.json +0 -912
  503. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_14.json +0 -912
  504. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_15.json +0 -912
  505. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_16.json +0 -912
  506. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_17.json +0 -912
  507. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_18.json +0 -912
  508. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_19.json +0 -912
  509. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_2.json +0 -912
  510. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_20.json +0 -912
  511. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_21.json +0 -912
  512. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_22.json +0 -912
  513. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_23.json +0 -912
  514. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_24.json +0 -912
  515. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_25.json +0 -912
  516. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_26.json +0 -912
  517. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_27.json +0 -912
  518. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_28.json +0 -912
  519. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_29.json +0 -912
  520. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_3.json +0 -912
  521. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_30.json +0 -912
  522. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_31.json +0 -912
  523. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_32.json +0 -912
  524. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_33.json +0 -912
  525. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_4.json +0 -912
  526. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_5.json +0 -912
  527. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_6.json +0 -912
  528. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_7.json +0 -912
  529. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_8.json +0 -912
  530. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_bmode_phased_array/input_9.json +0 -912
  531. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_defining_transducer.json +0 -912
  532. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/reference_outputs/out_us_transducer_as_sensor.json +0 -932
  533. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/setup_test.py +0 -8
  534. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test__init__.py +0 -16
  535. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_c_order.py +0 -299
  536. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_checks.py +0 -143
  537. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/__init__.py +0 -0
  538. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/conftest.py +0 -45
  539. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/test_1d_ivp.py +0 -133
  540. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cli/test_e2e.py +0 -163
  541. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_compat.py +0 -88
  542. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cpp_io_in_parts.py +0 -271
  543. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_cpp_running_simulations.py +0 -178
  544. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_create_pixel_dim.py +0 -64
  545. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_display_simulation_params.py +0 -81
  546. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_element.py +0 -74
  547. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_executor.py +0 -277
  548. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_filterutils.py +0 -168
  549. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_3D_simulation.py +0 -87
  550. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_axisymmetric_karray_simulation.py +0 -105
  551. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_axisymmetric_simulation.py +0 -74
  552. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_binary_sensor_mask.py +0 -71
  553. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_comparison_modelling_functions.py +0 -113
  554. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_heterogeneous_medium.py +0 -74
  555. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_homogeneous_medium.py +0 -69
  556. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_loading_external_image.py +0 -70
  557. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_opposing_corners_sensor_mask.py +0 -90
  558. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_photoacoustic_waveforms.py +0 -149
  559. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ivp_sensor_frequency_response.py +0 -92
  560. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_ksource.py +0 -44
  561. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_kspaceFirstOrder.py +0 -70
  562. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_kutils.py +0 -309
  563. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_math.py +0 -160
  564. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_misc.py +0 -26
  565. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_na_controlling_the_PML.py +0 -123
  566. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_na_optimising_performance.py +0 -101
  567. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_native_solver.py +0 -353
  568. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pmlutils.py +0 -150
  569. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_FFT_line_sensor.py +0 -93
  570. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_circular_sensor.py +0 -85
  571. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_directional_sensors.py +0 -113
  572. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_2D_TR_line_sensor.py +0 -87
  573. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_pr_3D_FFT_planar_sensor.py +0 -84
  574. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_reconstruction.py +0 -243
  575. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_directional_array_elements.py +0 -114
  576. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_directivity_modelling_2D.py +0 -100
  577. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_directivity_modelling_3D.py +0 -105
  578. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_focussed_detector_2D.py +0 -66
  579. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sd_sensor_directivity_2D.py +0 -95
  580. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_sharpness_filters.py +0 -101
  581. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_simulation.py +0 -126
  582. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_simulation_execution_options.py +0 -330
  583. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_time_reversal.py +0 -463
  584. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_3D_simulation.py +0 -89
  585. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_doppler_effect.py +0 -108
  586. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_homogeneous_medium_dipole.py +0 -76
  587. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_tvsp_homogeneous_medium_monopole.py +0 -76
  588. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_beam_patterns.py +0 -189
  589. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_bmode_linear_transducer.py +0 -255
  590. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_bmode_phased_array.py +0 -233
  591. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_defining_transducer.py +0 -181
  592. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_us_transducer_as_sensor.py +0 -173
  593. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_utils.py +0 -420
  594. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_validation.py +0 -122
  595. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/tests/test_water.py +0 -425
  596. k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/uv.lock +0 -2272
  597. k_wave_python-0.6.1/.gitignore +0 -47
  598. k_wave_python-0.6.1/.pre-commit-config.yaml +0 -39
  599. k_wave_python-0.6.1/.readthedocs.yaml +0 -14
  600. k_wave_python-0.6.1/CITATION.cff +0 -21
  601. k_wave_python-0.6.1/Dockerfile +0 -11
  602. k_wave_python-0.6.1/LICENSE +0 -165
  603. k_wave_python-0.6.1/htmlcov/.gitignore +0 -2
  604. k_wave_python-0.6.1/htmlcov/class_index.html +0 -733
  605. k_wave_python-0.6.1/htmlcov/coverage_html_cb_6fb7b396.js +0 -733
  606. k_wave_python-0.6.1/htmlcov/function_index.html +0 -4913
  607. k_wave_python-0.6.1/htmlcov/index.html +0 -488
  608. k_wave_python-0.6.1/htmlcov/status.json +0 -1
  609. k_wave_python-0.6.1/htmlcov/style_cb_8e611ae1.css +0 -337
  610. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2___init___py.html +0 -99
  611. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_checks_py.html +0 -396
  612. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_colormap_py.html +0 -192
  613. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_conversion_py.html +0 -605
  614. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_data_py.html +0 -307
  615. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_dotdictionary_py.html +0 -156
  616. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_filters_py.html +0 -700
  617. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_interp_py.html +0 -492
  618. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_io_py.html +0 -593
  619. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_mapgen_py.html +0 -3212
  620. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_math_py.html +0 -566
  621. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_matlab_py.html +0 -264
  622. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_matrix_py.html +0 -537
  623. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_pml_py.html +0 -250
  624. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_signals_py.html +0 -833
  625. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_tictoc_py.html +0 -143
  626. k_wave_python-0.6.1/htmlcov/z_008abe0f134486c2_typing_py.html +0 -133
  627. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069___init___py.html +0 -106
  628. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_create_absorption_variables_py.html +0 -207
  629. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_display_simulation_params_py.html +0 -191
  630. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_expand_grid_matrices_py.html +0 -411
  631. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_retract_transducer_grid_size_py.html +0 -121
  632. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_save_to_disk_func_py.html +0 -622
  633. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_scale_source_terms_func_py.html +0 -494
  634. k_wave_python-0.6.1/htmlcov/z_08ccaf6f6fd0d069_set_sound_speed_ref_py.html +0 -190
  635. k_wave_python-0.6.1/htmlcov/z_af83d3eb1fd99cb4___init___py.html +0 -110
  636. k_wave_python-0.6.1/htmlcov/z_af83d3eb1fd99cb4_simulation_execution_options_py.html +0 -342
  637. k_wave_python-0.6.1/htmlcov/z_af83d3eb1fd99cb4_simulation_options_py.html +0 -449
  638. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1___init___py.html +0 -304
  639. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_data_py.html +0 -220
  640. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_enums_py.html +0 -121
  641. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_executor_py.html +0 -242
  642. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kWaveSimulation_py.html +0 -1593
  643. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kgrid_py.html +0 -800
  644. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kmedium_py.html +0 -331
  645. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_ksensor_py.html +0 -241
  646. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_ksource_py.html +0 -481
  647. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_kspaceFirstOrder2D_py.html +0 -547
  648. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_ktransducer_py.html +0 -863
  649. k_wave_python-0.6.1/htmlcov/z_c3dba8f0d3a212d1_recorder_py.html +0 -242
  650. k_wave_python-0.6.1/htmlcov/z_c6e89a0ff279d0c3___init___py.html +0 -110
  651. k_wave_python-0.6.1/htmlcov/z_c6e89a0ff279d0c3_time_reversal_py.html +0 -243
  652. k_wave_python-0.6.1/kwave/compat.py +0 -74
  653. k_wave_python-0.6.1/kwave/data.py +0 -121
  654. k_wave_python-0.6.1/kwave/kWaveSimulation.py +0 -1532
  655. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/__init__.py +0 -7
  656. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/create_absorption_variables.py +0 -130
  657. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/display_simulation_params.py +0 -92
  658. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/expand_grid_matrices.py +0 -317
  659. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/retract_transducer_grid_size.py +0 -22
  660. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/save_to_disk_func.py +0 -523
  661. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/scale_source_terms_func.py +0 -395
  662. k_wave_python-0.6.1/kwave/kWaveSimulation_helper/set_sound_speed_ref.py +0 -91
  663. k_wave_python-0.6.1/kwave/kmedium.py +0 -232
  664. k_wave_python-0.6.1/kwave/ksensor.py +0 -142
  665. k_wave_python-0.6.1/kwave/ksource.py +0 -382
  666. k_wave_python-0.6.1/kwave/kspaceFirstOrder2D.py +0 -377
  667. k_wave_python-0.6.1/kwave/kspaceFirstOrderAS.py +0 -370
  668. k_wave_python-0.6.1/kwave/kspaceLineRecon.py +0 -128
  669. k_wave_python-0.6.1/kwave/kspacePlaneRecon.py +0 -132
  670. k_wave_python-0.6.1/kwave/ktransducer.py +0 -764
  671. k_wave_python-0.6.1/kwave/options/__init__.py +0 -11
  672. k_wave_python-0.6.1/kwave/options/simulation_execution_options.py +0 -337
  673. k_wave_python-0.6.1/kwave/options/simulation_options.py +0 -348
  674. k_wave_python-0.6.1/kwave/reconstruction/__init__.py +0 -11
  675. k_wave_python-0.6.1/kwave/reconstruction/beamform.py +0 -145
  676. k_wave_python-0.6.1/kwave/reconstruction/time_reversal.py +0 -150
  677. k_wave_python-0.6.1/kwave/reconstruction/tools.py +0 -65
  678. k_wave_python-0.6.1/kwave/recorder.py +0 -143
  679. k_wave_python-0.6.1/kwave/solvers/__init__.py +0 -7
  680. k_wave_python-0.6.1/kwave/solvers/native.py +0 -30
  681. k_wave_python-0.6.1/kwave/solvers/validation.py +0 -108
  682. k_wave_python-0.6.1/kwave/utils/__init__.py +0 -0
  683. k_wave_python-0.6.1/kwave/utils/angular_spectrum.py +0 -389
  684. k_wave_python-0.6.1/kwave/utils/angular_spectrum_cw.py +0 -294
  685. k_wave_python-0.6.1/kwave/utils/atten_comp.py +0 -311
  686. k_wave_python-0.6.1/kwave/utils/checks.py +0 -297
  687. k_wave_python-0.6.1/kwave/utils/colormap.py +0 -93
  688. k_wave_python-0.6.1/kwave/utils/conversion.py +0 -518
  689. k_wave_python-0.6.1/kwave/utils/data.py +0 -208
  690. k_wave_python-0.6.1/kwave/utils/dotdictionary.py +0 -57
  691. k_wave_python-0.6.1/kwave/utils/interp.py +0 -393
  692. k_wave_python-0.6.1/kwave/utils/io.py +0 -494
  693. k_wave_python-0.6.1/kwave/utils/kwave_array.py +0 -1009
  694. k_wave_python-0.6.1/kwave/utils/mapgen.py +0 -3113
  695. k_wave_python-0.6.1/kwave/utils/math.py +0 -467
  696. k_wave_python-0.6.1/kwave/utils/matlab.py +0 -165
  697. k_wave_python-0.6.1/kwave/utils/matrix.py +0 -438
  698. k_wave_python-0.6.1/kwave/utils/plot.py +0 -43
  699. k_wave_python-0.6.1/kwave/utils/pml.py +0 -159
  700. k_wave_python-0.6.1/kwave/utils/sharpness_filters.py +0 -126
  701. k_wave_python-0.6.1/kwave/utils/signals.py +0 -734
  702. k_wave_python-0.6.1/kwave/utils/tictoc.py +0 -44
  703. k_wave_python-0.6.1/kwave/utils/typing.py +0 -34
  704. k_wave_python-0.6.1/make_docs.sh +0 -4
  705. k_wave_python-0.6.1/run_tests.sh +0 -11
  706. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/.gitignore +0 -0
  707. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/.pre-commit-config.yaml +0 -0
  708. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/.readthedocs.yaml +0 -0
  709. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/CITATION.cff +0 -0
  710. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/Dockerfile +0 -0
  711. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/LICENSE +0 -0
  712. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/docs/README.md +0 -0
  713. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/data.py +0 -0
  714. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/executor.py +0 -0
  715. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation.py +0 -0
  716. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/__init__.py +0 -0
  717. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/display_simulation_params.py +0 -0
  718. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/expand_grid_matrices.py +0 -0
  719. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/retract_transducer_grid_size.py +0 -0
  720. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/save_to_disk_func.py +0 -0
  721. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/scale_source_terms_func.py +0 -0
  722. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kWaveSimulation_helper/set_sound_speed_ref.py +0 -0
  723. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/ksensor.py +0 -0
  724. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/ksource.py +0 -0
  725. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspaceFirstOrderAS.py +0 -0
  726. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspaceLineRecon.py +0 -0
  727. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/kspacePlaneRecon.py +0 -0
  728. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/ktransducer.py +0 -0
  729. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/options/__init__.py +0 -0
  730. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/options/simulation_execution_options.py +0 -0
  731. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/options/simulation_options.py +0 -0
  732. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/__init__.py +0 -0
  733. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/beamform.py +0 -0
  734. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/time_reversal.py +0 -0
  735. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/reconstruction/tools.py +0 -0
  736. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/recorder.py +0 -0
  737. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/solvers/__init__.py +0 -0
  738. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/solvers/native.py +0 -0
  739. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/solvers/validation.py +0 -0
  740. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli/kwave/cli/commands → k_wave_python-0.6.2/kwave/utils}/__init__.py +0 -0
  741. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/angular_spectrum.py +0 -0
  742. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/angular_spectrum_cw.py +0 -0
  743. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/atten_comp.py +0 -0
  744. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/colormap.py +0 -0
  745. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/conversion.py +0 -0
  746. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/data.py +0 -0
  747. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/dotdictionary.py +0 -0
  748. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/kwave/utils/filters.py +0 -0
  749. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/interp.py +0 -0
  750. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/io.py +0 -0
  751. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/kwave_array.py +0 -0
  752. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/matlab.py +0 -0
  753. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/matrix.py +0 -0
  754. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/pml.py +0 -0
  755. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/sharpness_filters.py +0 -0
  756. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/signals.py +0 -0
  757. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/kwave/utils/tictoc.py +0 -0
  758. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/make_docs.sh +0 -0
  759. {k_wave_python-0.6.1 → k_wave_python-0.6.2}/pytest.ini +0 -0
  760. {k_wave_python-0.6.1/.claude/worktrees/add-agent-cli → k_wave_python-0.6.2}/run_tests.sh +0 -0
@@ -0,0 +1 @@
1
+ gitdir: /Users/Walter/git/k-wave-python/.git/worktrees/kwave-v0.6.2
@@ -0,0 +1,95 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## What is k-wave-python?
6
+
7
+ Python implementation of the [k-Wave](http://www.k-wave.org/) acoustics toolbox for time-domain acoustic and ultrasound simulations. Two backends: a pure Python/NumPy/CuPy solver and C++ binaries (OMP/CUDA).
8
+
9
+ ## Commands
10
+
11
+ ```bash
12
+ # Setup
13
+ uv sync --extra dev --extra test
14
+ uv run pre-commit install
15
+
16
+ # Run tests
17
+ uv run pytest # all tests
18
+ uv run pytest tests/test_kgrid.py # single file
19
+ uv run pytest tests/test_kgrid.py::test_name # single test
20
+ uv run pytest -m integration # MATLAB-reference tests only
21
+
22
+ # Lint/format
23
+ uv run ruff check . --fix
24
+ uv run ruff format .
25
+ uv run pre-commit run --all-files
26
+
27
+ # Run an example
28
+ uv run examples/ivp_homogeneous_medium.py
29
+
30
+ # Build
31
+ uv build
32
+ ```
33
+
34
+ Always use `uv run` (not `uv run python`) for pytest, examples, and scripts.
35
+
36
+ ## Code Style
37
+
38
+ - Line length: 140 (configured in `pyproject.toml` under `[tool.ruff]`)
39
+ - Pre-commit hooks: ruff (lint + format), codespell, nb-clean
40
+ - Ruff ignores F821 (nested function refs) and F722 (jaxtyping annotations)
41
+ - Type annotations use `beartype` + `jaxtyping`
42
+
43
+ ## Architecture
44
+
45
+ ### Entry point
46
+
47
+ `kwave/kspaceFirstOrder.py` — `kspaceFirstOrder()` is the unified API. It accepts `kgrid`, `medium`, `source`, `sensor` and dispatches to the appropriate backend.
48
+
49
+ ```
50
+ kspaceFirstOrder(kgrid, medium, source, sensor, backend="python"|"cpp", device="cpu"|"gpu")
51
+ ```
52
+
53
+ ### Two backends
54
+
55
+ - **Python backend** (`kwave/solvers/kspace_solver.py`): `Simulation` class implementing k-space pseudospectral method in NumPy/CuPy. Supports 1D/2D/3D. Uses CuPy for GPU when `device="gpu"`.
56
+ - **C++ backend** (`kwave/solvers/cpp_simulation.py` + `kwave/executor.py`): Serializes to HDF5, invokes compiled C++ binary, reads results back. `save_only=True` writes HDF5 without running (for cluster jobs).
57
+
58
+ ### Core data classes
59
+
60
+ - `kWaveGrid` (`kwave/kgrid.py`) — domain discretization, spacing, time array
61
+ - `kWaveMedium` (`kwave/kmedium.py`) — sound speed, density, absorption, nonlinearity
62
+ - `kSource` (`kwave/ksource.py`) — pressure/velocity sources with masks and signals
63
+ - `kSensor` (`kwave/ksensor.py`) — sensor mask and recording configuration
64
+
65
+ ### Legacy path
66
+
67
+ `kspaceFirstOrder2D()` / `kspaceFirstOrder3D()` in their respective files route through `kWaveSimulation` (`kwave/kWaveSimulation.py`) — a large legacy dataclass used by the C++ backend path. New code should use `kspaceFirstOrder()` directly.
68
+
69
+ ### PML handling
70
+
71
+ When `pml_inside=False` (default), `kspaceFirstOrder()` expands the grid by `2*pml_size` before simulation and strips PML from full-grid output fields afterward. `pml_size="auto"` selects optimal sizes via `get_optimal_pml_size()`.
72
+
73
+ ### Key utilities
74
+
75
+ - `kwave/utils/pml.py` — PML sizing (`get_pml()`, `get_optimal_pml_size()`)
76
+ - `kwave/utils/mapgen.py` — geometry generators (`make_disc`, `make_ball`, `make_cart_circle`, etc.)
77
+ - `kwave/utils/signals.py` — signal generation (tone bursts, filtering)
78
+ - `kwave/utils/filters.py` — spatial smoothing, Gaussian filters
79
+ - `kwave/utils/io.py` — HDF5 read/write
80
+ - `kwave/utils/conversion.py` — unit conversion, `cart2grid`
81
+
82
+ ## Testing
83
+
84
+ - Tests in `tests/`, configured via `[tool.pytest.ini_options]` in `pyproject.toml`
85
+ - Integration tests (`@pytest.mark.integration`) compare against MATLAB reference data
86
+ - Test fixtures in `tests/integration/conftest.py`: `load_matlab_ref` (fixture), `assert_fields_close` (helper function for field comparison)
87
+ - MATLAB reference data for `@pytest.mark.integration` tests lives in `tests/matlab_test_data_collectors/python_testers/collectedValues/` (hardcoded in `conftest.py`)
88
+ - `test_example_parity.py` (MATLAB-parity tests) reads `KWAVE_MATLAB_REF_DIR` (defaults to `~/git/k-wave-cupy/tests` if unset)
89
+
90
+ ## Naming Conventions
91
+
92
+ - `backend="python"` or `"cpp"` (not "native")
93
+ - `device="cpu"` or `"gpu"` (not `use_gpu` bool)
94
+ - `quiet=True` to suppress output; `debug=True` for detailed output
95
+ - `pml_size="auto"` for automatic PML sizing (not a separate boolean)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: k-Wave-python
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: Acoustics toolbox for time domain acoustic and ultrasound simulations in complex and tissue-realistic media.
5
5
  Project-URL: Homepage, http://www.k-wave.org/
6
6
  Project-URL: Documentation, https://waltersimson.com/k-wave-python/
@@ -179,31 +179,32 @@ Classifier: Operating System :: OS Independent
179
179
  Classifier: Programming Language :: Python :: 3
180
180
  Requires-Python: >=3.10
181
181
  Requires-Dist: beartype==0.22.9
182
- Requires-Dist: deepdiff==8.6.2
182
+ Requires-Dist: deepdiff==9.0.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.0.0; extra == 'example'
201
202
  Provides-Extra: test
202
- Requires-Dist: coverage==7.10.6; extra == 'test'
203
+ Requires-Dist: coverage==7.14.0; extra == 'test'
203
204
  Requires-Dist: phantominator; extra == 'test'
204
205
  Requires-Dist: pytest; extra == 'test'
205
206
  Requires-Dist: pytest-xdist; extra == 'test'
206
- Requires-Dist: requests==2.33.0; extra == 'test'
207
+ Requires-Dist: requests==2.34.0; extra == 'test'
207
208
  Requires-Dist: testfixtures==8.3.0; extra == 'test'
208
209
  Description-Content-Type: text/markdown
209
210
 
@@ -3,23 +3,45 @@ import json
3
3
  import logging
4
4
  import os
5
5
  import platform
6
+ import stat
7
+ import warnings
6
8
  from pathlib import Path
7
9
  from typing import List
8
10
  from urllib.request import urlretrieve
9
11
 
10
12
  # Test installation with:
11
13
  # python3 -m pip install -i https://test.pypi.org/simple/ --extra-index-url=https://pypi.org/simple/ k-Wave-python==0.3.0
12
- __version__ = "0.6.1"
14
+ __version__ = "0.6.2"
13
15
 
14
16
  # Constants and Configurations
15
17
  URL_BASE = "https://github.com/waltsims/"
16
- BINARY_VERSION = "v1.3.0"
17
- PREFIX = f"{URL_BASE}kspaceFirstOrder-{{}}-{{}}/releases/download/{BINARY_VERSION}/"
18
+ BINARY_VERSION = "v1.4.1"
19
+ # Pin both Windows binaries to v1.3.0. v1.4.x windows builds switched compiler /
20
+ # OpenMP / FFT / CUDA runtime stacks and neither v1.4.x release ships its runtime
21
+ # DLLs (cufft, cudart, vcomp, vcruntime140_1, fftw3f, etc.). v1.3.0 binaries are
22
+ # self-contained with their Intel-era DLL bundle (listed in WINDOWS_DLLS below,
23
+ # downloaded with the OMP request and used by both .exe files since they share
24
+ # kwave/bin/windows/). OMP DLL bundling is fixed in kspacefirstorder-unified#14
25
+ # (awaiting validation); CUDA DLL bundling is tracked in kspacefirstorder-unified#17.
26
+ WINDOWS_OMP_VERSION = "v1.3.0"
27
+ WINDOWS_CUDA_VERSION = "v1.3.0"
18
28
  PLATFORM = platform.system().lower()
19
29
 
20
30
  if PLATFORM not in ["linux", "windows", "darwin"]:
21
31
  raise NotImplementedError(f"k-wave-python is currently unsupported on this operating system: {PLATFORM}.")
22
32
 
33
+ # darwin C++ binary is arm64-only; universal2 coverage tracked for v0.6.5
34
+ DARWIN_BINARY_ARCH = "arm64"
35
+ _darwin_unsupported = PLATFORM == "darwin" and platform.machine() != DARWIN_BINARY_ARCH
36
+ if _darwin_unsupported:
37
+ warnings.warn(
38
+ f"k-wave-python's macOS C++ binary is {DARWIN_BINARY_ARCH}-only. "
39
+ f"Detected {platform.machine()} — the C++ backend (backend='cpp') will not run on this machine. "
40
+ "Use backend='python' instead. Universal2 (Intel + Apple Silicon) coverage is tracked for v0.6.5.",
41
+ RuntimeWarning,
42
+ stacklevel=2,
43
+ )
44
+
23
45
  # TODO: install directly in to /bin/ directory system directory is no longer needed
24
46
  # TODO: deprecate in 0.5.0
25
47
  BINARY_PATH = Path(__file__).parent / "bin" / PLATFORM
@@ -44,21 +66,24 @@ ARCHITECTURES = ["omp", "cuda"]
44
66
 
45
67
 
46
68
  def get_windows_release_urls(architecture: str) -> list:
69
+ version = WINDOWS_OMP_VERSION if architecture == "omp" else WINDOWS_CUDA_VERSION
47
70
  specific_filenames = [EXECUTABLE_PREFIX + architecture + ".exe"]
48
71
  if architecture == "omp":
49
72
  specific_filenames += WINDOWS_DLLS
50
- release_urls = [PREFIX.format(architecture.upper(), PLATFORM.lower()) + filename for filename in specific_filenames]
51
- return release_urls
73
+ base = f"{URL_BASE}kspaceFirstOrder-{architecture.upper()}-{PLATFORM.lower()}/releases/download/{version}/"
74
+ return [base + filename for filename in specific_filenames]
52
75
 
53
76
 
54
77
  URL_DICT = {
55
78
  "linux": {
56
- "cuda": [URL_BASE + f"kspaceFirstOrder-CUDA-{PLATFORM}/releases/download/v1.3.1/{EXECUTABLE_PREFIX}CUDA"],
79
+ "cuda": [URL_BASE + f"kspaceFirstOrder-CUDA-{PLATFORM}/releases/download/{BINARY_VERSION}/{EXECUTABLE_PREFIX}CUDA"],
57
80
  "omp": [URL_BASE + f"kspaceFirstOrder-OMP-{PLATFORM}/releases/download/{BINARY_VERSION}/{EXECUTABLE_PREFIX}OMP"],
58
81
  },
59
82
  "darwin": {
60
83
  "cuda": [],
61
- "omp": [URL_BASE + f"k-wave-omp-{PLATFORM}/releases/download/v0.3.0rc3/{EXECUTABLE_PREFIX}OMP"],
84
+ "omp": (
85
+ [] if _darwin_unsupported else [URL_BASE + f"k-wave-omp-{PLATFORM}/releases/download/{BINARY_VERSION}/{EXECUTABLE_PREFIX}OMP"]
86
+ ),
62
87
  },
63
88
  "windows": {architecture: get_windows_release_urls(architecture) for architecture in ARCHITECTURES},
64
89
  }
@@ -77,6 +102,31 @@ def _hash_file(filepath: str) -> str:
77
102
  return md5.hexdigest()
78
103
 
79
104
 
105
+ def _ensure_executable(binary_filepath) -> None:
106
+ # Self-heal the executable bit on Linux/macOS. urlretrieve creates files
107
+ # at 0644, and prior versions of this package didn't fix that up, so users
108
+ # upgrading with a cached non-executable binary on disk would otherwise
109
+ # stay stuck (the cache check below returns True and skips re-download).
110
+ # Any OS-level failure here (broken symlink, read-only FS, wrong ownership,
111
+ # TOCTOU race) is degraded to a warning so it never aborts `import kwave`.
112
+ if PLATFORM == "windows":
113
+ return
114
+ try:
115
+ current_mode = os.stat(binary_filepath).st_mode
116
+ desired_mode = current_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
117
+ if current_mode == desired_mode:
118
+ return
119
+ os.chmod(binary_filepath, desired_mode)
120
+ except OSError: # pragma: no cover - defensive; degrades to warning, never fatal
121
+ # Don't abort import. The user can chmod +x manually or reinstall
122
+ # into a writable location.
123
+ logging.warning(
124
+ "kwave: cannot set executable bit on %s — backend='cpp' may fail with "
125
+ "Permission denied. Run `chmod +x` manually or reinstall.",
126
+ binary_filepath,
127
+ )
128
+
129
+
80
130
  def _is_binary_present(binary_name: str, binary_type: str) -> bool:
81
131
  binary_filepath = BINARY_PATH / binary_name
82
132
  binary_file_exists = os.path.exists(binary_filepath)
@@ -106,6 +156,8 @@ def _is_binary_present(binary_name: str, binary_type: str) -> bool:
106
156
  if existing_metadata["url"] not in latest_urls:
107
157
  return False
108
158
 
159
+ _ensure_executable(binary_filepath)
160
+
109
161
  # No need to check `version` field for now
110
162
  # because we version is already present in the URL
111
163
  return True
@@ -176,6 +228,7 @@ def download_binaries(system_os: str, bin_type: str):
176
228
  try:
177
229
  binary_filepath = os.path.join(BINARY_PATH, filename)
178
230
  urlretrieve(url, binary_filepath)
231
+ _ensure_executable(binary_filepath)
179
232
  _record_binary_metadata(binary_version=binary_version, binary_filepath=binary_filepath, binary_url=url, filename=filename)
180
233
 
181
234
  except TimeoutError:
@@ -70,5 +70,9 @@ def options_to_kwargs(simulation_options=None, execution_options=None):
70
70
  kwargs["num_threads"] = opts.num_threads
71
71
  if opts.device_num is not None:
72
72
  kwargs["device_num"] = opts.device_num
73
+ # Read _binary_path directly: the property auto-resolves to a default,
74
+ # so it can't distinguish a user-set path from one.
75
+ if opts._binary_path is not None:
76
+ kwargs["binary_path"] = opts._binary_path
73
77
 
74
78
  return kwargs
@@ -1,5 +1,17 @@
1
1
  from enum import Enum
2
2
 
3
+
4
+ class AlphaMode(str, Enum):
5
+ """Controls which absorption/dispersion terms are included in the equation of state."""
6
+
7
+ NO_ABSORPTION = "no_absorption"
8
+ NO_DISPERSION = "no_dispersion"
9
+ STOKES = "stokes"
10
+
11
+ def __str__(self):
12
+ return self.value
13
+
14
+
3
15
  ################################################################
4
16
  # literals that link the discrete cosine and sine transform types with
5
17
  # their type definitions in the functions dtt1D, dtt2D, and dtt3D
@@ -12,19 +12,19 @@ def create_absorption_variables(kgrid: kWaveGrid, medium: kWaveMedium, equation_
12
12
  # define the lossy derivative operators and proportionality coefficients
13
13
  """
14
14
  Selects and returns absorption and dispersion operators and coefficients for the given medium based on the equation of state.
15
-
15
+
16
16
  Parameters:
17
17
  kgrid (kWaveGrid): Grid object providing wavenumber array via `kgrid.k`.
18
18
  medium (kWaveMedium): Medium properties used to compute absorption/dispersion coefficients.
19
19
  equation_of_state (str): One of `"absorbing"`, `"stokes"`, or `"lossless"` determining which variables to produce.
20
-
20
+
21
21
  Returns:
22
22
  tuple: (nabla1, nabla2, tau, eta)
23
23
  - nabla1: First-order absorption operator or `None` when not applicable.
24
24
  - nabla2: Dispersion operator or `None` when not applicable.
25
25
  - tau: Absorbing coefficient or `None` when not applicable.
26
26
  - eta: Dispersive coefficient or `None` when not applicable.
27
-
27
+
28
28
  Behavior:
29
29
  - "absorbing": returns (nabla1, nabla2, tau, eta) computed for an absorbing medium.
30
30
  - "stokes": returns (None, None, tau, None) where `tau` is the Stokes absorbing coefficient.
@@ -127,4 +127,4 @@ def apply_alpha_filter(medium, nabla1, nabla2):
127
127
  # shift the parameters back
128
128
  nabla1 = np.fft.ifftshift(nabla1)
129
129
  nabla2 = np.fft.ifftshift(nabla2)
130
- return nabla1, nabla2
130
+ return nabla1, nabla2
@@ -108,7 +108,7 @@ class kWaveGrid(object):
108
108
  @t_array.setter
109
109
  def t_array(self, t_array):
110
110
  # check for 'auto' input
111
- if t_array == "auto":
111
+ if isinstance(t_array, str) and t_array == "auto":
112
112
  # set values to auto
113
113
  self.Nt = "auto"
114
114
  self.dt = "auto"
@@ -1,50 +1,65 @@
1
1
  import logging
2
2
  from dataclasses import dataclass
3
- from typing import List
3
+ from typing import List, Optional, Sequence, Union
4
4
 
5
5
  import numpy as np
6
6
 
7
- import kwave.utils.checks
7
+ from kwave.enums import AlphaMode
8
+
9
+
10
+ def _to_alpha_mode(value):
11
+ """Normalize a value to AlphaMode. Accepts None, AlphaMode, or a valid string."""
12
+ if value is None or isinstance(value, AlphaMode):
13
+ return value
14
+ try:
15
+ return AlphaMode(value)
16
+ except (ValueError, TypeError):
17
+ raise ValueError(
18
+ f"medium.alpha_mode must be an AlphaMode enum value or one of 'no_absorption', 'no_dispersion', 'stokes', got {value!r}"
19
+ ) from None
8
20
 
9
21
 
10
22
  @dataclass
11
23
  class kWaveMedium(object):
24
+ """
25
+ Medium properties for k-Wave simulations.
26
+
27
+ Note: For heterogeneous medium parameters, medium.sound_speed and medium.density
28
+ must be given in matrix form with the same dimensions as kgrid. For homogeneous
29
+ medium parameters, these can be given as single numeric values. If the medium is
30
+ homogeneous and velocity inputs or outputs are not required, it is not necessary
31
+ to specify medium.density.
32
+ """
33
+
12
34
  # sound speed distribution within the acoustic medium [m/s] | required to be defined
13
- sound_speed: np.array
35
+ sound_speed: Union[float, int, np.ndarray]
14
36
  # reference sound speed used within the k-space operator (phase correction term) [m/s]
15
- sound_speed_ref: np.array = None
37
+ sound_speed_ref: Optional[Union[float, int, np.ndarray]] = None
16
38
  # density distribution within the acoustic medium [kg/m^3]
17
- density: np.array = None
39
+ density: Optional[Union[float, int, np.ndarray]] = None
18
40
  # power law absorption coefficient [dB/(MHz^y cm)]
19
- alpha_coeff: np.array = None
41
+ alpha_coeff: Optional[Union[float, int, np.ndarray]] = None
20
42
  # power law absorption exponent
21
- alpha_power: np.array = None
43
+ alpha_power: Optional[Union[float, int, np.ndarray]] = None
22
44
  # optional input to force either the absorption or dispersion terms in the equation of state to be excluded;
23
- # valid inputs are 'no_absorption' or 'no_dispersion'
24
- alpha_mode: np.array = None
45
+ # valid inputs are AlphaMode.NO_ABSORPTION, AlphaMode.NO_DISPERSION, or the equivalent strings
46
+ alpha_mode: Optional[Union[AlphaMode, str]] = None
25
47
  # frequency domain filter applied to the absorption and dispersion terms in the equation of state
26
- alpha_filter: np.array = None
48
+ alpha_filter: Optional[np.ndarray] = None
27
49
  # two element array used to control the sign of absorption and dispersion terms in the equation of state
28
- alpha_sign: np.array = None
50
+ alpha_sign: Optional[np.ndarray] = None
29
51
  # parameter of nonlinearity
30
- BonA: np.array = None
52
+ BonA: Optional[Union[float, int, np.ndarray]] = None
31
53
  # is the medium absorbing?
32
54
  absorbing: bool = False
33
55
  # is the medium absorbing stokes?
34
56
  stokes: bool = False
35
57
 
36
- # """
37
- # Note: For heterogeneous medium parameters, medium.sound_speed and
38
- # medium.density must be given in matrix form with the same dimensions as
39
- # kgrid. For homogeneous medium parameters, these can be given as single
40
- # numeric values. If the medium is homogeneous and velocity inputs or
41
- # outputs are not required, it is not necessary to specify medium.density.
42
- # """
43
-
44
58
  def __post_init__(self):
45
59
  self.sound_speed = np.atleast_1d(self.sound_speed)
60
+ self.alpha_mode = _to_alpha_mode(self.alpha_mode)
46
61
 
47
- def check_fields(self, kgrid_shape: np.ndarray) -> None:
62
+ def check_fields(self, kgrid_shape: Sequence[int]) -> None:
48
63
  """
49
64
  Check whether the given properties are valid
50
65
 
@@ -54,26 +69,21 @@ class kWaveMedium(object):
54
69
  Returns:
55
70
  None
56
71
  """
57
- # check the absorption mode input is valid
58
- if self.alpha_mode is not None:
59
- assert self.alpha_mode in [
60
- "no_absorption",
61
- "no_dispersion",
62
- "stokes",
63
- ], "medium.alpha_mode must be set to 'no_absorption', 'no_dispersion', or 'stokes'."
72
+ # re-normalize alpha_mode in case it was reassigned as a plain string post-construction
73
+ self.alpha_mode = _to_alpha_mode(self.alpha_mode)
64
74
 
65
75
  # check the absorption filter input is valid
66
- if self.alpha_filter is not None and not (self.alpha_filter.shape == kgrid_shape).all():
76
+ if self.alpha_filter is not None and self.alpha_filter.shape != tuple(kgrid_shape):
67
77
  raise ValueError("medium.alpha_filter must be the same size as the computational grid.")
68
78
 
69
79
  # check the absorption sign input is valid
70
- if self.alpha_sign is not None and (not kwave.utils.checkutils.is_number(self.alpha_sign) or (self.alpha_sign.size != 2)):
71
- raise ValueError(
72
- "medium.alpha_sign must be given as a " "2 element numerical array controlling absorption and dispersion, respectively."
73
- )
80
+ if self.alpha_sign is not None:
81
+ alpha_sign_arr = np.atleast_1d(self.alpha_sign)
82
+ if alpha_sign_arr.size != 2 or not np.issubdtype(alpha_sign_arr.dtype, np.number):
83
+ raise ValueError("medium.alpha_sign must be a 2 element numeric array controlling absorption and dispersion, respectively.")
74
84
 
75
85
  # check alpha_coeff is non-negative and real
76
- if not np.all(np.isreal(self.alpha_coeff)) or np.any(self.alpha_coeff < 0):
86
+ if self.alpha_coeff is not None and (not np.all(np.isreal(self.alpha_coeff)) or np.any(self.alpha_coeff < 0)):
77
87
  raise ValueError("medium.alpha_coeff must be non-negative and real.")
78
88
 
79
89
  def is_defined(self, *fields) -> List[bool]:
@@ -102,7 +112,7 @@ class kWaveMedium(object):
102
112
  None
103
113
  """
104
114
  for f in fields:
105
- assert getattr(self, f) is not None, f"The field {f} must be not be None"
115
+ assert getattr(self, f) is not None, f"The field {f} must not be None"
106
116
 
107
117
  def is_nonlinear(self) -> bool:
108
118
  """
@@ -141,13 +151,14 @@ class kWaveMedium(object):
141
151
  # enforce both absorption parameters
142
152
  self.ensure_defined("alpha_coeff", "alpha_power")
143
153
 
144
- # check y is a scalar
145
- assert np.isscalar(self.alpha_power), "medium.alpha_power must be scalar."
154
+ # check y is a scalar (np.isscalar rejects 0-d ndarrays — accept np.array(1.5) too)
155
+ is_scalar = np.isscalar(self.alpha_power) or (isinstance(self.alpha_power, np.ndarray) and self.alpha_power.size == 1)
156
+ assert is_scalar, "medium.alpha_power must be scalar."
146
157
 
147
158
  # check y is real and within 0 to 3
148
- assert (
149
- np.all(np.isreal(self.alpha_coeff)) and 0 <= self.alpha_power < 3
150
- ), "medium.alpha_power must be a real number between 0 and 3."
159
+ assert np.all(np.isreal(self.alpha_coeff)) and 0 <= self.alpha_power < 3, (
160
+ "medium.alpha_power must be a real number between 0 and 3."
161
+ )
151
162
 
152
163
  # display warning if y is close to 1 and the dispersion term has not been set to zero
153
164
  if self.alpha_mode != "no_dispersion":
@@ -167,8 +178,10 @@ class kWaveMedium(object):
167
178
  self.ensure_defined("alpha_coeff")
168
179
 
169
180
  # give warning if y is specified
170
- if self.alpha_power is not None and (self.alpha_power.size != 1 or self.alpha_power != 2):
171
- logging.log(logging.WARN, "the axisymmetric code and stokes absorption assume alpha_power = 2, user value ignored.")
181
+ if self.alpha_power is not None:
182
+ ap = np.asarray(self.alpha_power)
183
+ if ap.size != 1 or not np.isclose(ap.item(), 2.0):
184
+ logging.warning("the axisymmetric code and stokes absorption assume alpha_power = 2, user value ignored.")
172
185
 
173
186
  # overwrite y value
174
187
  self.alpha_power = 2
@@ -176,12 +189,12 @@ class kWaveMedium(object):
176
189
  # don't allow medium.alpha_mode with the axisymmetric code
177
190
  if self.alpha_mode is not None and (self.alpha_mode in ["no_absorption", "no_dispersion"]):
178
191
  raise NotImplementedError(
179
- "Input option medium.alpha_mode is not supported with the axisymmetric code " "or medium.alpha_mode = " "stokes" "."
192
+ "Input option medium.alpha_mode is not supported with the axisymmetric code or medium.alpha_mode = stokes."
180
193
  )
181
194
 
182
195
  # don't allow alpha_filter with stokes absorption (no variables are applied in k-space)
183
196
  assert self.alpha_filter is None, (
184
- "Input option medium.alpha_filter is not supported with the axisymmetric code " "or medium.alpha_mode = 'stokes'. "
197
+ "Input option medium.alpha_filter is not supported with the axisymmetric code or medium.alpha_mode = 'stokes'. "
185
198
  )
186
199
 
187
200
  ##########################################
@@ -82,6 +82,40 @@ def _strip_pml(result, pml_size, ndim, suffixes=_FULL_GRID_SUFFIXES):
82
82
  }
83
83
 
84
84
 
85
+ def _resolve_dtype(value):
86
+ """Normalize a dtype-like input to ``np.float32`` or ``np.float64``.
87
+
88
+ Accepts numpy dtypes/types (``np.float32``, ``np.float64``), strings
89
+ (``"float32"`` etc., plus MATLAB aliases ``"single"`` / ``"double"``),
90
+ Python ``float``, ``None`` (default → float64), and the legacy MATLAB
91
+ ``"off"`` alias for float64. Anything that resolves to a non-float32 /
92
+ non-float64 dtype raises ``ValueError`` — the solver isn't validated
93
+ for ``float16`` / complex dtypes.
94
+
95
+ Cupy dtypes (``cp.float32``, ``cp.float64``) work for free because cupy
96
+ re-exports numpy's scalar types. Torch / JAX dtypes are not accepted —
97
+ they live in different ecosystems and don't translate via ``np.dtype()``;
98
+ the error message points the user at the equivalent numpy dtype.
99
+ """
100
+ if value is None or value == "off":
101
+ return np.float64
102
+ try:
103
+ resolved = np.dtype(value).type
104
+ except TypeError as e:
105
+ framework = getattr(type(value), "__module__", "").split(".")[0]
106
+ hint = ""
107
+ if framework in ("torch", "jax", "jaxlib", "tensorflow"):
108
+ hint = f" {framework}.dtype objects aren't supported; pass the equivalent numpy dtype (np.float32 / np.float64)."
109
+ raise ValueError(
110
+ f"dtype must be a numpy dtype, type, or string (e.g. 'float32', 'single'), got {value!r}.{hint}"
111
+ ) from e
112
+ if resolved is np.float32:
113
+ return np.float32
114
+ if resolved is np.float64:
115
+ return np.float64
116
+ raise ValueError(f"dtype must resolve to float32 or float64; got {resolved.__name__} from {value!r}")
117
+
118
+
85
119
  def kspaceFirstOrder(
86
120
  kgrid: kWaveGrid,
87
121
  medium: kWaveMedium,
@@ -96,12 +130,14 @@ def kspaceFirstOrder(
96
130
  smooth_p0: bool = True,
97
131
  backend: str = "python",
98
132
  device: str = "cpu",
133
+ dtype=None,
99
134
  save_only: bool = False,
100
135
  data_path: Optional[str] = None,
101
136
  quiet: bool = False,
102
137
  debug: bool = False,
103
138
  num_threads: Optional[int] = None,
104
139
  device_num: Optional[int] = None,
140
+ binary_path: Optional[str] = None,
105
141
  ) -> dict:
106
142
  """Run a k-Wave simulation.
107
143
 
@@ -142,6 +178,24 @@ def kspaceFirstOrder(
142
178
  device: ``"cpu"`` or ``"gpu"``. For ``backend="python"`` this
143
179
  selects NumPy (cpu) vs CuPy (gpu). For ``backend="cpp"`` it
144
180
  selects the OMP vs CUDA binary. Default ``"cpu"``.
181
+ dtype: Numerical precision for state arrays in the Python backend.
182
+ Accepts dtype-like input — a numpy dtype (``np.float32``,
183
+ ``np.float64``; cupy aliases like ``cp.float32`` work since cupy
184
+ re-exports numpy's scalar types), a string (``"float32"``,
185
+ ``"float64"``, ``"single"``, ``"double"``), a Python type
186
+ (``float``), or ``None`` for the default (float64). The
187
+ MATLAB-style alias ``"off"`` is accepted as a synonym for
188
+ float64 to ease migration from the legacy
189
+ ``SimulationOptions.data_cast``. Torch / JAX dtypes are not
190
+ accepted; pass the numpy equivalent (e.g. ``np.float32`` for
191
+ ``torch.float32``).
192
+ ``np.float32`` uses roughly half the memory and is faster on
193
+ most hardware, at the cost of reduced numerical accuracy.
194
+ Only ``float32`` and ``float64`` are supported; other dtypes
195
+ raise ``ValueError``. Has no effect on ``backend="cpp"`` (the
196
+ C++ binary uses fixed internal precision regardless); a warning
197
+ is emitted if ``dtype`` resolves to anything other than float64
198
+ with the C++ backend. Default ``None`` (float64).
145
199
  save_only: When ``True`` (``backend="cpp"`` only), write the HDF5
146
200
  input file and return without running the binary. Useful for
147
201
  cluster submission. Default ``False``.
@@ -154,6 +208,9 @@ def kspaceFirstOrder(
154
208
  num_threads: Thread count for the C++ OMP binary. ``None`` uses all
155
209
  available cores. Default ``None``.
156
210
  device_num: GPU device index for CUDA execution. Default ``None``.
211
+ binary_path: Path to a custom C++ binary. When ``None`` (default),
212
+ the binary bundled with ``k-wave-data`` is used. Only applies
213
+ when ``backend="cpp"``.
157
214
 
158
215
  Returns:
159
216
  dict: Recorded sensor data keyed by field name (e.g.
@@ -167,6 +224,7 @@ def kspaceFirstOrder(
167
224
  raise ValueError(f"device must be 'cpu' or 'gpu', got {device!r}")
168
225
  if backend not in ("python", "cpp"):
169
226
  raise ValueError(f"Unknown backend: {backend!r}. Use 'python' or 'cpp'.")
227
+ dtype = _resolve_dtype(dtype)
170
228
 
171
229
  if isinstance(pml_size, str) and pml_size.lower() == "auto":
172
230
  pml_size = tuple(int(x) for x in get_optimal_pml_size(kgrid))
@@ -206,10 +264,23 @@ def kspaceFirstOrder(
206
264
  pml_size=pml_size,
207
265
  pml_alpha=pml_alpha,
208
266
  quiet=quiet,
267
+ dtype=dtype,
209
268
  ).run()
210
269
 
211
270
  elif backend == "cpp":
212
271
  from kwave.solvers.cpp_simulation import CppSimulation
272
+ from kwave.utils.checks import check_alpha_mode_cpp_compatible, warn_alpha_power_near_unity_cpp
273
+
274
+ check_alpha_mode_cpp_compatible(medium)
275
+ warn_alpha_power_near_unity_cpp(medium)
276
+
277
+ if dtype is not np.float64:
278
+ warnings.warn(
279
+ f"dtype={np.dtype(dtype).name!r} has no effect with backend='cpp'; the C++ binary "
280
+ "uses fixed internal precision regardless. Use backend='python' to control "
281
+ "computational precision.",
282
+ stacklevel=2,
283
+ )
213
284
 
214
285
  if not use_kspace:
215
286
  warnings.warn(
@@ -243,7 +314,7 @@ def kspaceFirstOrder(
243
314
  if not pml_inside:
244
315
  result["pml_size"] = pml_size
245
316
  return result
246
- result = cpp_sim.run(device=device, num_threads=num_threads, device_num=device_num, quiet=quiet, debug=debug, data_path=data_path)
317
+ result = cpp_sim.run(device=device, num_threads=num_threads, device_num=device_num, quiet=quiet, debug=debug, data_path=data_path, binary_path=binary_path)
247
318
 
248
319
  # --- Post-processing: strip PML from full-grid fields ---
249
320