fullwave25 1.4.3.dev0__tar.gz → 1.5.0.dev0__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.
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/.bumpversion.toml +15 -2
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/.gitignore +1 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/PKG-INFO +4 -4
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/README.md +3 -3
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/__init__.py +1 -1
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium.py +35 -14
- fullwave25-1.5.0.dev0/fullwave/solver/bins/database/relaxation_params_database_num_relax=4_20261102_1540.mat +0 -0
- fullwave25-1.5.0.dev0/fullwave/solver/bins/database/relaxation_params_database_num_relax=4_20261102_1540_invalid_cells.json +4096 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/shipped_database.py +1 -1
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/relaxation_parameters.py +193 -21
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/pyproject.toml +1 -1
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/uv.lock +1 -1
- fullwave25-1.4.3.dev0/.claude/.gitignore +0 -1
- fullwave25-1.4.3.dev0/.claude/20260911_1813_dead-code.md +0 -162
- fullwave25-1.4.3.dev0/.claude/20260916_1311_commit_message_of_the_input_generation_speedup.md +0 -13
- fullwave25-1.4.3.dev0/.claude/20260916_1311_pull_request_of_the_input_generation_speedup.md +0 -31
- fullwave25-1.4.3.dev0/.claude/20260916_1405_commit_message_of_the_relaxation_memory_estimate.md +0 -10
- fullwave25-1.4.3.dev0/.claude/20260916_1405_pull_request_of_the_relaxation_memory_estimate.md +0 -24
- fullwave25-1.4.3.dev0/.claude/20260916_2152_commit_message_of_the_cuda_version_choice.md +0 -10
- fullwave25-1.4.3.dev0/.claude/20260916_2152_pull_request_of_the_cuda_version_choice.md +0 -25
- fullwave25-1.4.3.dev0/.claude/20260916_2203_commit_message_of_the_cuda_version_tests.md +0 -10
- fullwave25-1.4.3.dev0/.claude/20260916_2213_commit_message_of_the_blackwell_version_choice.md +0 -9
- fullwave25-1.4.3.dev0/.claude/20260916_2213_pull_request_of_the_blackwell_version_choice.md +0 -23
- fullwave25-1.4.3.dev0/.claude/CLAUDE.md +0 -286
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260909_1844_acquire_the_reflection_matrix.py +0 -55
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260909_1900_test_on_a_synthetic_acquisition.py +0 -139
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260909_1913_analyze_the_reflection_matrix.py +0 -111
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260909_2107_redraw_the_figures_of_an_analysis.py +0 -48
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260909_2121_write_the_result_tables.py +0 -177
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260910_1126_synthesize_plane_waves_from_the_multistatic_matrix.py +0 -132
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260910_1137_scan_the_speed_of_sound.py +0 -531
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260910_1141_compare_the_laws_with_the_truth.py +0 -490
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260910_1146_evaluate_the_reverberation_filter.py +0 -525
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/20260910_1208_compare_plane_waves_with_the_synthesis.py +0 -143
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/figures.py +0 -521
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/ground_truth.py +0 -394
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/matrix_imaging.py +0 -1346
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/pipeline.py +0 -534
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/reflection_matrix.py +0 -370
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/speed_of_sound.py +0 -417
- fullwave25-1.4.3.dev0/.claude/matrix_imaging/synthetic.py +0 -166
- fullwave25-1.4.3.dev0/.claude/scratch/20260821_0206_band_anchor_cross_check.py +0 -137
- fullwave25-1.4.3.dev0/.claude/scratch/20260821_0233_delivered_power_law_end_to_end.py +0 -125
- fullwave25-1.4.3.dev0/.claude/scratch/20260821_0317_reword_deliver_in_the_library.py +0 -59
- fullwave25-1.4.3.dev0/.claude/scratch/20260821_1220_relaxation_low_frequency_rolloff.py +0 -246
- fullwave25-1.4.3.dev0/.claude/scratch/20260825_1937_what_fails_the_pml_golden_tests.py +0 -103
- fullwave25-1.4.3.dev0/.claude/scratch/20260825_2329_does_the_wrapper_read_the_record.py +0 -112
- fullwave25-1.4.3.dev0/.claude/scratch/20260826_0002_what_the_new_default_table_holds.py +0 -92
- fullwave25-1.4.3.dev0/.claude/scratch/20260828_1422_what_the_candidate_tables_hold.py +0 -101
- fullwave25-1.4.3.dev0/.claude/scratch/20260828_1427_what_the_deployment_needs.py +0 -249
- fullwave25-1.4.3.dev0/.claude/scratch/20260828_1510_where_the_unstretched_ramp_reaches.py +0 -218
- fullwave25-1.4.3.dev0/.claude/scratch/20260828_1517_the_blast_radius_of_the_ramp.py +0 -237
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1458_the_3d_region_trimmed_kernel_against_the_reference.py +0 -196
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1505_the_multi_node_kernel_against_the_multi_gpu_one.py +0 -179
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1631_the_3d_multi_node_against_the_multi_gpu_one.py +0 -119
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1642_the_selective_absorbing_layer.py +0 -176
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1728_the_layer_against_the_taper.py +0 -312
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1757_what_the_margin_outside_the_layer_does.py +0 -286
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1808_the_layer_in_3d_and_on_the_multi_node_builds.py +0 -446
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1832_where_the_3d_residual_sits.py +0 -324
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1837_inside_the_layer_at_the_corner.py +0 -294
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1840_inside_the_3d_layer_at_the_corner.py +0 -292
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1912_both_absorbers_on_one_method.py +0 -326
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_1922_the_layer_on_the_reflection_method.py +0 -443
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_2011_whole_domain_animation.py +0 -327
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_2032_the_example_source_kind.py +0 -168
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_2148_drive_scale_of_the_strong_beta_cells.py +0 -71
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_2159_profile_the_input_map_build.py +0 -250
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_2201_build_then_extend_equivalence.py +0 -201
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_2304_the_transmit_methods_launch_what_they_say.py +0 -208
- fullwave25-1.4.3.dev0/.claude/scratch/20260830_2322_the_unscaled_added_drive_follows_the_courant_number.py +0 -239
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0033_the_three_dimensional_arrays.py +0 -249
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0054_the_elevation_lens_of_a_linear_array.py +0 -276
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0115_run_every_example.sh +0 -21
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0124_move_the_notebooks_to_the_transmit_interface.py +0 -274
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0137_the_air_region_at_four_mechanisms.py +0 -314
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0148_the_element_records_its_own_transmit.py +0 -202
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0150_the_absorbing_layer_of_a_point_source.py +0 -235
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0152_the_exponential_absorbing_layer_against_its_thickness.py +0 -213
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0202_the_rebuilt_exponential_absorbing_layer.py +0 -267
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0216_where_the_three_dimensional_layer_leaks.py +0 -258
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_0222_the_absorbing_layer_away_from_the_source.py +0 -266
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1037_where_the_near_field_brightness_comes_from.py +0 -276
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1040_the_aperture_transit_wedge_in_the_channel_data.py +0 -296
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1043_the_transmit_in_the_recorded_trace_and_its_removal.py +0 -460
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1048_the_receive_row_against_the_reference_subtraction.py +0 -491
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1052_the_backing_behind_the_array_face.py +0 -495
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1056_the_transmit_beam_with_the_air_backing.py +0 -233
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1105_the_shipped_transducer_stack_in_the_solver.py +0 -485
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1119_where_the_stack_puts_the_source_and_what_it_costs_the_depth.py +0 -446
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1121_the_depth_the_image_reads_with_the_stack.py +0 -451
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1123_the_depth_the_beamformer_puts_one_point_at.py +0 -353
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1142_the_transmit_offset_the_beamformer_needs.py +0 -367
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1145_the_depth_shift_the_offset_fix_makes.py +0 -183
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1154_the_two_offset_rules_on_the_same_recording.py +0 -231
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1212_what_the_pinned_release_carries.py +0 -141
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1228_the_low_cut_against_the_near_field_haze.py +0 -490
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1301_run_the_beamforming_notebooks.py +0 -50
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1432_point_dataset_generator_at_the_local_fullwave.py +0 -92
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1437_the_aperture_width_the_reference_geometry_reports.py +0 -79
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1454_calibrate_the_ats539_plane_wave.py +0 -367
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1508_show_the_b_mode_in_the_hdf5.py +0 -315
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1534_the_comet_behind_each_wire.py +0 -241
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1547_read_the_calibration_trials.py +0 -226
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1605_what_the_medium_holds_in_the_near_field.py +0 -195
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1607_sweep_one_generator_knob.py +0 -322
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1715_assert_the_ats539_rate_chain.py +0 -166
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1717_measure_every_layer_of_the_stack.py +0 -151
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1720_where_the_trailing_energy_lands.py +0 -201
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1725_offer_the_requested_absorption_to_the_backing.py +0 -119
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1727_let_a_sweep_carry_a_switch.py +0 -105
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1731_expose_the_exponential_absorbing_layer.py +0 -121
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1746_point_the_solver_at_an_older_binary.py +0 -95
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1756_measure_the_point_targets.py +0 -154
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1802_rederive_the_near_field_bounce.py +0 -106
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1810_does_the_shelf_move_with_depth.py +0 -199
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1812_find_the_repeat_delay_in_the_raw_rf.py +0 -168
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1937_give_each_source_row_its_own_launch_delay.py +0 -88
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1943_baffle_the_element_plane.py +0 -103
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_1952_take_the_cell_size_from_the_grid.py +0 -70
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2058_run_the_ats539_through_the_batched_solver.py +0 -120
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2105_queue_the_remaining_candidates.py +0 -143
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2122_the_simulator_asks_for_a_clamped_source.py +0 -111
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2126_rename_the_source_types_to_hard_and_soft.py +0 -98
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2140_bind_the_source_type_to_its_entrance.py +0 -224
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2225_how_redundant_are_the_absorbing_layer_files.py +0 -166
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2239_skip_the_constant_absorbing_layer_maps.py +0 -171
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2246_count_the_files_a_run_writes.py +0 -144
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2352_run_the_map_tiers_end_to_end.py +0 -243
- fullwave25-1.4.3.dev0/.claude/scratch/20260831_2355_draw_the_absorbing_layer_map_cost.py +0 -170
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1502_can_the_transmit_reach_the_harmonic_band.py +0 -173
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1504_contrast_harmonic_imaging.py +0 -896
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1507_where_each_band_puts_its_largest_sample.py +0 -139
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1519_is_the_harmonic_tail_cumulative.py +0 -280
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1537_does_the_cancellation_work.py +0 -202
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1612_does_a_sparse_bubble_cloud_localize.py +0 -232
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1619_calibrate_the_bubble_scatter_range.py +0 -310
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1622_draw_the_sweep_b_modes.py +0 -168
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1654_where_the_bright_region_sits.py +0 -367
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1701_where_one_bubble_images.py +0 -301
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1702_does_the_portable_example_reproduce_the_evaluation.py +0 -115
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1753_does_the_ported_solver_still_march_the_same.py +0 -212
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1755_do_the_ranks_agree_on_the_bubbles.py +0 -385
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1817_does_the_air_region_reach_every_solver.py +0 -331
- fullwave25-1.4.3.dev0/.claude/scratch/20260901_1818_does_the_air_region_reach_every_rank.py +0 -285
- fullwave25-1.4.3.dev0/.claude/scratch/20260902_1317_what_the_abdomen_volume_holds.py +0 -129
- fullwave25-1.4.3.dev0/.claude/scratch/20260902_1319_art_wave_in_the_abdomen.py +0 -584
- fullwave25-1.4.3.dev0/.claude/scratch/20260902_1324_art_figures_from_the_field.py +0 -2176
- fullwave25-1.4.3.dev0/.claude/scratch/20260902_1744_art_final_animations.py +0 -266
- fullwave25-1.4.3.dev0/.claude/scratch/20260904_1216_art_wire_visibility.py +0 -426
- fullwave25-1.4.3.dev0/.claude/scratch/20260904_2327_b_mode_of_the_abdomen.py +0 -1494
- fullwave25-1.4.3.dev0/.claude/scratch/20260905_0038_two_against_three_dimensions.py +0 -529
- fullwave25-1.4.3.dev0/.claude/scratch/20260909_1934_probe_the_reverberation_filter_on_speckle.py +0 -93
- fullwave25-1.4.3.dev0/.claude/scratch/20260909_1939_probe_the_ideal_profile_on_speckle.py +0 -86
- fullwave25-1.4.3.dev0/.claude/scratch/20260909_2044_probe_the_correction_bases_on_a_flat_speckle.py +0 -59
- fullwave25-1.4.3.dev0/.claude/scratch/20260909_2342_measure_the_wall_delay_screen.py +0 -85
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1134_find_the_first_non_finite_value_of_the_plane_wave_correction.py +0 -98
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1234_print_the_summaries_of_analyses.py +0 -100
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/a_maps_checks.py +0 -75
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/b_effective_frequency.py +0 -55
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/c_composed_steps.py +0 -46
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/check_element_centers.py +0 -77
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/check_plane_wave_law.py +0 -248
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/d2_gate_quarter_period.py +0 -52
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/d_gate_cases.py +0 -52
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/e_plate_crash.py +0 -63
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/f_patch_grid.py +0 -17
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/g_frequency_scan.py +0 -29
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/gouy_check.py +0 -87
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/h_pulse_and_wires.py +0 -23
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/i_phase_slope.py +0 -28
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a0200910_001.sh +0 -1
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a0200910_002.sh +0 -6
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a0200910_003.sh +0 -5
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a0200910_004.sh +0 -10
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a0200910_005.sh +0 -8
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_001.sh +0 -6
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_002.sh +0 -13
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_003.sh +0 -12
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_004.sh +0 -9
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_005.sh +0 -13
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_006.sh +0 -13
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_007.sh +0 -16
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_008.sh +0 -10
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_009.sh +0 -34
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a16f7afd_010.sh +0 -39
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a3e03828_001.sh +0 -14
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a3e03828_002.sh +0 -10
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a3e03828_003.sh +0 -10
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a3e03828_004.sh +0 -8
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a3e03828_005.sh +0 -9
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_001.sh +0 -1
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_002.sh +0 -9
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_003.sh +0 -7
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_004.sh +0 -13
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_005.sh +0 -14
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_006.sh +0 -2
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_007.sh +0 -39
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_2a8c46c5-7d0_a86c0b02_008.sh +0 -12
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_47c5d913-2f0_a86c7568_001.sh +0 -10
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_001.sh +0 -10
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_002.sh +0 -20
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_003.sh +0 -18
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_004.sh +0 -24
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_005.sh +0 -36
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_006.sh +0 -18
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_007.sh +0 -50
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_008.sh +0 -32
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a09af998_009.sh +0 -7
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a3c684a5_001.sh +0 -1
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a3c684a5_002.sh +0 -23
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a3c684a5_003.sh +0 -6
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a3c684a5_004.sh +0 -8
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a3c684a5_005.sh +0 -1
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a3c684a5_006.sh +0 -7
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a3c684a5_007.sh +0 -12
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_001.sh +0 -1
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_002.sh +0 -9
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_003.sh +0 -17
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_004.sh +0 -16
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_005.sh +0 -6
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_006.sh +0 -13
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_007.sh +0 -8
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_008.sh +0 -13
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_009.sh +0 -11
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_010.sh +0 -19
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_011.sh +0 -16
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_012.sh +0 -19
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_013.sh +0 -17
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_014.sh +0 -7
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_015.sh +0 -6
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/inline_commands/wf_714887dd-b46_a99b1764_016.sh +0 -20
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/instrumented_guard_run.py +0 -108
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/instrumented_plane_wave_nan.py +0 -71
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/j_wires_in_wall.py +0 -27
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/origin_checks.py +0 -76
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/origin_das.py +0 -95
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/quick_checks.py +0 -52
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/scan_checks.py +0 -140
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/scan_checks_2.py +0 -133
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/scan_checks_3.py +0 -110
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/scan_checks_4.py +0 -74
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1239_matrix_imaging_agent_checks/toy_plane_wave.py +0 -161
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1241_check_that_the_records_load.py +0 -58
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1241_locate_the_non_finite_values_of_an_analysis.py +0 -43
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1241_measure_the_wire_depth_against_the_time_origin.py +0 -61
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1241_print_the_time_origin_scans.py +0 -48
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1241_test_the_entropy_the_antisymmetry_and_the_filter_linearity.py +0 -88
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1247_time_the_phase_reversal_per_patch_against_batched.py +0 -92
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1248_compare_the_synthesis_on_the_card_and_the_host.py +0 -61
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1250_save_and_compare_the_local_laws_of_a_subset.py +0 -113
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1254_analyze_the_2.5mhz_stage_2.sh +0 -58
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1256_print_the_per_depth_curves_of_a_reverberation_test.py +0 -48
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1302_print_the_durations_of_a_chain_log.py +0 -43
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1314_print_the_gouy_points_of_a_speed_of_sound_scan.py +0 -49
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1445_fit_the_moveout_speed_of_the_point_sources.py +0 -307
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1456_fit_the_depth_offset_of_the_reference_arrivals.py +0 -224
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1502_print_the_laws_and_gates_of_an_analysis.py +0 -56
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1503_analyze_with_the_ramp_removal_off_or_every_law_one.py +0 -144
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1504_measure_the_anti_diagonal_share_of_the_clean_clutter.py +0 -203
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1508_estimate_the_speed_with_smaller_windows.py +0 -138
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1553_focus_the_clutter_records_in_sub_bands.py +0 -142
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1553_print_the_band_and_the_screens_of_the_records.py +0 -87
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1554_predict_the_phase_speed_of_the_stencil.py +0 -168
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1556_compute_the_moveout_truth_with_an_eikonal_solver.py +0 -502
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1556_fit_the_height_offset_on_three_grids.py +0 -252
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1600_measure_the_flat_and_the_screen_correction_on_point_targets.py +0 -490
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1604_predict_the_arrivals_from_the_stencil.py +0 -236
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1604_prototype_the_broadband_correction.py +0 -508
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1605_scan_the_time_origin_with_other_element_planes.py +0 -198
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1607_measure_the_local_far_field_structure_of_the_clutter.py +0 -393
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1608_score_the_speed_scans_against_the_eikonal_truth.py +0 -245
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1610_compare_the_unwrapped_law_delays_with_the_truth.py +0 -186
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1611_compare_the_arrival_models_at_the_point_sources.py +0 -364
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1613_compare_the_sensor_pixel_with_the_element_center.py +0 -117
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1613_measure_the_order_of_the_clutter_from_the_contrast_scaling.py +0 -365
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1613_scan_the_speed_of_sound_at_one_time_origin.py +0 -167
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1615_locate_the_source_and_sensor_pixels_of_the_array.py +0 -167
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1617_check_the_data_level_correction_and_the_pulse_band.py +0 -340
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1617_test_local_and_notch_filters_on_the_clutter.py +0 -388
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1621_compute_the_moveout_truth_with_a_chosen_arrival_model.py +0 -304
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1622_measure_the_tilt_spread_of_the_wall_interfaces.py +0 -235
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1623_tabulate_the_broadband_correction_runs.py +0 -135
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1626_measure_the_ghost_depths_of_the_plate.py +0 -134
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1626_score_the_product_of_the_transducer_laws.py +0 -150
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1630_test_the_local_filter_with_padded_windows.py +0 -127
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1632_fit_the_time_origin_and_the_speed_of_the_phantom_scans.py +0 -170
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1634_fit_the_reference_speed_at_the_sensor_row.py +0 -106
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1646_split_the_clutter_into_orders_and_predict_its_floor.py +0 -248
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1652_tabulate_the_pulse_band_check.py +0 -42
- fullwave25-1.4.3.dev0/.claude/scratch/20260910_1659_check_the_plane_wave_transform_of_the_elements.py +0 -69
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1103_compare_two_b_mode_roots.py +0 -38
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1214_binary_cache_lookup_order.py +0 -86
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1253_signal_of_old_against_new.py +0 -74
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1300_read_the_numexpr_pool_limit.py +0 -18
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1332_gpu_memory_of_the_relaxation_kernel.py +0 -72
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1401_relaxation_regions_against_the_kernel.py +0 -65
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1420_released_binary_carries_the_fix.py +0 -37
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1601_stable_courant_number_of_the_stencil_table.py +0 -199
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1602_fast_layer_in_a_small_3d_run.py +0 -162
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1719_p4_1_pulse_energy_above_the_trace_nyquist.py +0 -58
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1933_l7_4_run_at_8_ppw_stability_and_trace_sampling.py +0 -73
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_1946_l7_4_trace_sampling_by_field_modulus.py +0 -70
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_2004_pulse_bands_of_the_two_abdomen_arrays.py +0 -79
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_2155_cuda_version_choice_before_and_after.py +0 -90
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_2155_gpu_architectures_in_cached_binaries.py +0 -64
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_2155_mutation_check_of_the_cuda_version_tests.py +0 -82
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_2155_verify_the_cuda_version_test_findings.py +0 -89
- fullwave25-1.4.3.dev0/.claude/scratch/20260916_2212_mutation_check_of_the_blackwell_version_choice.py +0 -111
- fullwave25-1.4.3.dev0/.claude/scratch/20260925_1321_selected_cuda_tag.py +0 -7
- fullwave25-1.4.3.dev0/.claude/scratch/20260925_1326_release_binary_bit_identity.py +0 -459
- fullwave25-1.4.3.dev0/.claude/scratch/20260925_1331_summarize_release_check.py +0 -18
- fullwave25-1.4.3.dev0/.claude/settings.local.json +0 -20
- fullwave25-1.4.3.dev0/.claude/three_dimensional/convex_transducer_3d.py +0 -127
- fullwave25-1.4.3.dev0/.claude/three_dimensional/linear_transducer_3d.py +0 -140
- fullwave25-1.4.3.dev0/.claude/three_dimensional/matrix_transducer_3d.py +0 -135
- fullwave25-1.4.3.dev0/.claude/three_dimensional/patch.py +0 -523
- fullwave25-1.4.3.dev0/.claude/three_dimensional/ruff.toml +0 -40
- fullwave25-1.4.3.dev0/.claude/three_dimensional/superseded/convex_transducer_3d.py +0 -126
- fullwave25-1.4.3.dev0/.claude/three_dimensional/superseded/linear_transducer_3d.py +0 -138
- fullwave25-1.4.3.dev0/.claude/three_dimensional/superseded/matrix_transducer_3d.py +0 -134
- fullwave25-1.4.3.dev0/.claude/three_dimensional/test_patch.py +0 -178
- fullwave25-1.4.3.dev0/.claude/transducer_stack/README.md +0 -70
- fullwave25-1.4.3.dev0/.claude/transducer_stack/superseded/full_synthetic_aperture_with_stack.py +0 -438
- fullwave25-1.4.3.dev0/.claude/transducer_stack/superseded/plane_wave_compounding_with_stack.py +0 -433
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/.pre-commit-config.yaml +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/.python-version +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/20260120_0844.log +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/CITATION.cff +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/CONTRIBUTING.md +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/LICENSE +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/Makefile +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/attenuation.png +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/beamformer.m +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/debug_solver_bin/fullwave2_2d_2_relax_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/debug_solver_bin/fullwave2_2d_exponential_attenuation_multi_gpu +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/debug_solver_bin/fullwave2_2d_exponential_attenuation_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/debug_solver_bin/fullwave2_2d_exponential_attenuation_multi_gpu_cuda124_ +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/debug_solver_bin/fullwave2_3d_exponential_attenuation_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/debug_solver_bin/fullwave2_3d_exponential_attenuation_multi_gpu_cuda124_ +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/docker/Dockerfile +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/docker/Dockerfile.dockerignore +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/docker/README.md +0 -0
- {fullwave25-1.4.3.dev0/.claude/skills → fullwave25-1.5.0.dev0/docs/claude_skill}/fullwave25/SKILL.md +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/docs/fullwave2_ultra.md +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/experiments/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/experiments/exp_scatterer_diameter.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/beamformer/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/beamformer/beamformer.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/beamformer/mach_beamformer.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/constants/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/constants/material_properties.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/grid.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/domain.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/medium_builder.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/combined_phantom_map.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/data/.keep +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/data/abdominal_wall/i2365f_etfw1.mat +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/domain_abdominal_wall.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/domain_background.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/domain_combined_phantom.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/domain_scatterer.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/domain_simple.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/medium_builder/presets/domain_water_gel.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/sensor.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/binary_manager.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/binary_markers.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda118 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda129 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/2d/num_relax=2/fullwave2_2d_2_relax_multi_gpu_cuda130 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda118 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda124 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda129 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/_gpu/3d/num_relax=2/fullwave2_3d_2_relax_multi_gpu_cuda130 +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/database/relaxation_params_database_num_relax=3_20260828_1513.mat +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/database/relaxation_params_database_num_relax=3_20260828_1513_invalid_cells.json +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/database/relaxation_params_database_num_relax=4_20260828_1456.mat +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/bins/database/relaxation_params_database_num_relax=4_20260828_1456_invalid_cells.json +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/cuda_utils.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/input_file_writer.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/launcher.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/pml_builder.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/solver.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/source_type.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/solver/utils.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/source.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/transducer.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/transmit.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/attenuation_parameters.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/backend.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/backend_2d.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/binary.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/dat_io.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/dat_io_3d.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/errors.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/factory.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/medium_to_aexp.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/stencil.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/time_axis.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/writer_2d.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/ultra/writer_3d.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/__init__.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/check_functions.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/coordinates.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/gpu_memory.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/memory_tempfile.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/numerical.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/plot_utils.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/pulse.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/scatterer.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/signal_filter.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/fullwave/utils/signal_process.py +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/logs/20260815_0356_sweep.log +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/references/2604.06257v1.pdf +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/references/signed.gif +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/ruff.log +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/ruff.toml +0 -0
- {fullwave25-1.4.3.dev0 → fullwave25-1.5.0.dev0}/signal_filter_example.png +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[tool.bumpversion]
|
|
2
|
-
current_version = "1.
|
|
2
|
+
current_version = "1.5.0-dev0"
|
|
3
3
|
parse = """(?x)
|
|
4
4
|
(?P<major>0|[1-9]\\d*)\\.
|
|
5
5
|
(?P<minor>0|[1-9]\\d*)\\.
|
|
@@ -26,7 +26,7 @@ tag_message = "Bump version: {current_version} → {new_version}"
|
|
|
26
26
|
|
|
27
27
|
pre_commit_hooks = [
|
|
28
28
|
"uv lock",
|
|
29
|
-
"git add uv.lock .bumpversion.toml fullwave/__init__.py pyproject.toml",
|
|
29
|
+
"git add uv.lock .bumpversion.toml fullwave/__init__.py pyproject.toml examples",
|
|
30
30
|
]
|
|
31
31
|
|
|
32
32
|
[[tool.bumpversion.files]]
|
|
@@ -41,6 +41,19 @@ filename = "fullwave/__init__.py"
|
|
|
41
41
|
search = '__version__ = "{current_version}"'
|
|
42
42
|
replace = '__version__ = "{new_version}"'
|
|
43
43
|
|
|
44
|
+
[[tool.bumpversion.files]]
|
|
45
|
+
# Colab install cell of the example notebooks
|
|
46
|
+
glob = "examples/**/*.ipynb"
|
|
47
|
+
search = 'fullwave25=={current_version}'
|
|
48
|
+
replace = 'fullwave25=={new_version}'
|
|
49
|
+
ignore_missing_version = true
|
|
50
|
+
|
|
51
|
+
[[tool.bumpversion.files]]
|
|
52
|
+
glob = "examples/**/*.ipynb"
|
|
53
|
+
search = 'fullwave25[mach]=={current_version}'
|
|
54
|
+
replace = 'fullwave25[mach]=={new_version}'
|
|
55
|
+
ignore_missing_version = true
|
|
56
|
+
|
|
44
57
|
[tool.bumpversion.parts.pre_l]
|
|
45
58
|
values = ["dev", "rc", "final"]
|
|
46
59
|
optional_value = "final"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: fullwave25
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0-dev0
|
|
4
4
|
Summary: Fullwave 2.5: Ultrasound wave propagation simulation with heterogeneous power law attenuation modelling capabilities
|
|
5
5
|
Author: Masashi Sode, Gianmarco Pinton
|
|
6
6
|
Maintainer: Masashi Sode
|
|
@@ -80,7 +80,7 @@ The solver advances the pressure $p$ and the particle velocity $\mathbf{v}$ with
|
|
|
80
80
|
|
|
81
81
|
$$\nabla_1 p + \rho \cfrac{\partial {\bf{v}}}{\partial t} = 0, \qquad \nabla_2 \cdot {\bf{v}} + \kappa \cfrac{\partial p}{\partial t} = 0 .$$
|
|
82
82
|
|
|
83
|
-
in which the spatial derivatives $\nabla_1$ and $\nabla_2$ carry a set of relaxation mechanisms. fullwave25 looks up the parameters of these mechanisms in a precomputed table for the $\alpha_0$ and $\gamma$ of each cell, so that the simulated attenuation matches the power law and the phase velocity matches its Kramers-Kronig dispersion. The table spans $\alpha_0$ up to 1.0 dB/(MHz^γ cm) and $\gamma$ from 0.4 to 2.0, for frequencies from 0.1 to 20 MHz.
|
|
83
|
+
in which the spatial derivatives $\nabla_1$ and $\nabla_2$ carry a set of relaxation mechanisms. fullwave25 looks up the parameters of these mechanisms in a precomputed table for the $\alpha_0$ and $\gamma$ of each cell, so that the simulated attenuation matches the power law and the phase velocity matches its Kramers-Kronig dispersion. The table spans $\alpha_0$ up to 1.0 dB/(MHz^γ cm) and $\gamma$ from 0.4 to 2.0, for frequencies from 0.1 to 20 MHz. It extends to $\alpha_0$ = 2.0 dB/(MHz^γ cm) for $\gamma$ from 0.4 to 1.6, and to $\alpha_0$ = 10 dB/(MHz^γ cm) for $\gamma$ = 1.0. A specified pair on a cell the table does not fit logs a warning.
|
|
84
84
|
|
|
85
85
|
The figure compares the target attenuation $\alpha_0 f^\gamma$ (red lines) with the simulated attenuation (black dots) for $\alpha_0 =$ 0.25, 0.5 and 0.75 dB/(MHz^γ cm) and $\gamma =$ 0.4, 0.7, 1.0, 1.3 and 1.6. Each dot is one simulation of a plane wave through a uniform medium, read at two depths.
|
|
86
86
|
|
|
@@ -133,7 +133,7 @@ To start your own simulation, copy [simple_plane_wave.py](examples/simple_plane_
|
|
|
133
133
|
|
|
134
134
|
### Simulation guide
|
|
135
135
|
|
|
136
|
-
[
|
|
136
|
+
[docs/claude_skill/fullwave25/SKILL.md](docs/claude_skill/fullwave25/SKILL.md) is a short guide to setting up a simulation the standard way. It covers:
|
|
137
137
|
|
|
138
138
|
- the basic flow, the output shapes and the sensor order;
|
|
139
139
|
- scatterers, air and the discretized attenuation values;
|
|
@@ -141,7 +141,7 @@ To start your own simulation, copy [simple_plane_wave.py](examples/simple_plane_
|
|
|
141
141
|
- transducers, presets and beamforming;
|
|
142
142
|
- multi-GPU runs, the container and troubleshooting.
|
|
143
143
|
|
|
144
|
-
Read it before writing a new simulation. The same file is a [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill:
|
|
144
|
+
Read it before writing a new simulation. The same file is a [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill: to use it in Claude Code, copy the folder `docs/claude_skill/fullwave25/` to `~/.claude/skills/fullwave25/`.
|
|
145
145
|
|
|
146
146
|
## Transducers and transmits
|
|
147
147
|
|
|
@@ -35,7 +35,7 @@ The solver advances the pressure $p$ and the particle velocity $\mathbf{v}$ with
|
|
|
35
35
|
|
|
36
36
|
$$\nabla_1 p + \rho \cfrac{\partial {\bf{v}}}{\partial t} = 0, \qquad \nabla_2 \cdot {\bf{v}} + \kappa \cfrac{\partial p}{\partial t} = 0 .$$
|
|
37
37
|
|
|
38
|
-
in which the spatial derivatives $\nabla_1$ and $\nabla_2$ carry a set of relaxation mechanisms. fullwave25 looks up the parameters of these mechanisms in a precomputed table for the $\alpha_0$ and $\gamma$ of each cell, so that the simulated attenuation matches the power law and the phase velocity matches its Kramers-Kronig dispersion. The table spans $\alpha_0$ up to 1.0 dB/(MHz^γ cm) and $\gamma$ from 0.4 to 2.0, for frequencies from 0.1 to 20 MHz.
|
|
38
|
+
in which the spatial derivatives $\nabla_1$ and $\nabla_2$ carry a set of relaxation mechanisms. fullwave25 looks up the parameters of these mechanisms in a precomputed table for the $\alpha_0$ and $\gamma$ of each cell, so that the simulated attenuation matches the power law and the phase velocity matches its Kramers-Kronig dispersion. The table spans $\alpha_0$ up to 1.0 dB/(MHz^γ cm) and $\gamma$ from 0.4 to 2.0, for frequencies from 0.1 to 20 MHz. It extends to $\alpha_0$ = 2.0 dB/(MHz^γ cm) for $\gamma$ from 0.4 to 1.6, and to $\alpha_0$ = 10 dB/(MHz^γ cm) for $\gamma$ = 1.0. A specified pair on a cell the table does not fit logs a warning.
|
|
39
39
|
|
|
40
40
|
The figure compares the target attenuation $\alpha_0 f^\gamma$ (red lines) with the simulated attenuation (black dots) for $\alpha_0 =$ 0.25, 0.5 and 0.75 dB/(MHz^γ cm) and $\gamma =$ 0.4, 0.7, 1.0, 1.3 and 1.6. Each dot is one simulation of a plane wave through a uniform medium, read at two depths.
|
|
41
41
|
|
|
@@ -88,7 +88,7 @@ To start your own simulation, copy [simple_plane_wave.py](examples/simple_plane_
|
|
|
88
88
|
|
|
89
89
|
### Simulation guide
|
|
90
90
|
|
|
91
|
-
[
|
|
91
|
+
[docs/claude_skill/fullwave25/SKILL.md](docs/claude_skill/fullwave25/SKILL.md) is a short guide to setting up a simulation the standard way. It covers:
|
|
92
92
|
|
|
93
93
|
- the basic flow, the output shapes and the sensor order;
|
|
94
94
|
- scatterers, air and the discretized attenuation values;
|
|
@@ -96,7 +96,7 @@ To start your own simulation, copy [simple_plane_wave.py](examples/simple_plane_
|
|
|
96
96
|
- transducers, presets and beamforming;
|
|
97
97
|
- multi-GPU runs, the container and troubleshooting.
|
|
98
98
|
|
|
99
|
-
Read it before writing a new simulation. The same file is a [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill:
|
|
99
|
+
Read it before writing a new simulation. The same file is a [Claude Code](https://docs.anthropic.com/en/docs/claude-code) skill: to use it in Claude Code, copy the folder `docs/claude_skill/fullwave25/` to `~/.claude/skills/fullwave25/`.
|
|
100
100
|
|
|
101
101
|
## Transducers and transmits
|
|
102
102
|
|
|
@@ -66,7 +66,7 @@ try:
|
|
|
66
66
|
__version__ = version("fullwave")
|
|
67
67
|
except PackageNotFoundError:
|
|
68
68
|
# Update via bump-my-version, not manually
|
|
69
|
-
__version__ = "1.
|
|
69
|
+
__version__ = "1.5.0-dev0"
|
|
70
70
|
|
|
71
71
|
VERSION = __version__ # for convenience
|
|
72
72
|
logger.info("Fullwave version: %s", __version__)
|
|
@@ -19,6 +19,7 @@ from fullwave.solver.utils import initialize_relaxation_param_dict
|
|
|
19
19
|
from fullwave.utils import check_functions, plot_utils
|
|
20
20
|
from fullwave.utils.coordinates import coords_to_map, map_to_coords
|
|
21
21
|
from fullwave.utils.relaxation_parameters import (
|
|
22
|
+
RelaxationParametersGenerator,
|
|
22
23
|
_array_module,
|
|
23
24
|
band_scaled_sound_speed,
|
|
24
25
|
generate_relaxation_params,
|
|
@@ -1258,9 +1259,11 @@ class Medium:
|
|
|
1258
1259
|
Path to the relaxation parameters database.
|
|
1259
1260
|
path_invalid_cells : Path, optional
|
|
1260
1261
|
Path to the JSON record an evaluation wrote, which names every
|
|
1261
|
-
invalid cell of the table and why it is invalid.
|
|
1262
|
-
|
|
1263
|
-
|
|
1262
|
+
invalid cell of the table and why it is invalid. Without it, the
|
|
1263
|
+
record ``<table stem>_invalid_cells.json`` beside the table is read
|
|
1264
|
+
where it exists. A voxel on a ``not_fitted`` cell uses the nearest
|
|
1265
|
+
fitted exponent of the same row, and a voxel on another invalid cell
|
|
1266
|
+
uses that cell and warns.
|
|
1264
1267
|
n_relaxation_mechanisms : int, optional
|
|
1265
1268
|
Number of relaxation mechanisms, by default 4
|
|
1266
1269
|
attenuation_builder : str, optional
|
|
@@ -1292,15 +1295,19 @@ class Medium:
|
|
|
1292
1295
|
``MediumRelaxationMaps.sound_speed`` reports the base speed that
|
|
1293
1296
|
gives it. See ``band_scaled_sound_speed``.
|
|
1294
1297
|
scale_to_requested_alpha_coeff : bool, optional
|
|
1295
|
-
Give the
|
|
1296
|
-
|
|
1297
|
-
0.0022
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
the
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
this
|
|
1298
|
+
Give the specified attenuation coefficient rather than the
|
|
1299
|
+
coefficient of the cell used. The coefficient axis holds
|
|
1300
|
+
0.0022, then 0.01 to 1.00 in steps of 0.01, then 1.1 to 2.0 in
|
|
1301
|
+
steps of 0.1, then 3 to 10 in steps of 1, so a specified value
|
|
1302
|
+
between two nodes maps to the node above and a value past either
|
|
1303
|
+
end maps to the last node. Above 1.0 the table fits only some
|
|
1304
|
+
exponents, so a cell it does not fit maps to the fitted exponent
|
|
1305
|
+
nearest to it in the same coefficient row. The lookup logs a warning
|
|
1306
|
+
that names each specified value and the cell used. Setting this True
|
|
1307
|
+
scales the relaxation departure by the shortfall instead. It matters
|
|
1308
|
+
most under a band transfer, which multiplies the specified
|
|
1309
|
+
coefficient by a factor and often carries it off the axis. False,
|
|
1310
|
+
the default, reproduces every result produced before this existed.
|
|
1304
1311
|
n_jobs : int, optional
|
|
1305
1312
|
Number of parallel jobs for relaxation parameter calculation.
|
|
1306
1313
|
Default is -1, which uses all available CPUs.
|
|
@@ -1612,6 +1619,20 @@ class Medium:
|
|
|
1612
1619
|
}
|
|
1613
1620
|
return relaxation_param_dict
|
|
1614
1621
|
|
|
1622
|
+
def _exponent_used(
|
|
1623
|
+
self,
|
|
1624
|
+
alpha_coeff: NDArray[np.float64],
|
|
1625
|
+
alpha_power: NDArray[np.float64],
|
|
1626
|
+
) -> NDArray[np.float64]:
|
|
1627
|
+
"""Return the exponent of the cell each voxel uses, which sets the band anchor."""
|
|
1628
|
+
if self.band_scale == 1.0:
|
|
1629
|
+
return alpha_power
|
|
1630
|
+
return RelaxationParametersGenerator(
|
|
1631
|
+
n_relaxation_mechanisms=self.n_relaxation_mechanisms,
|
|
1632
|
+
path_database=self.path_relaxation_parameters_database,
|
|
1633
|
+
path_invalid_cells=self.path_invalid_cells,
|
|
1634
|
+
)._exponent_used(alpha_coeff, alpha_power, band_scale=self.band_scale)
|
|
1635
|
+
|
|
1615
1636
|
def relaxation_parameters_at(
|
|
1616
1637
|
self,
|
|
1617
1638
|
coords: NDArray[np.int64],
|
|
@@ -1636,7 +1657,7 @@ class Medium:
|
|
|
1636
1657
|
sound_speed = band_scaled_sound_speed(
|
|
1637
1658
|
self._to_numpy(self.sound_speed[index]),
|
|
1638
1659
|
alpha_coeff,
|
|
1639
|
-
alpha_power,
|
|
1660
|
+
self._exponent_used(alpha_coeff, alpha_power),
|
|
1640
1661
|
self.band_scale,
|
|
1641
1662
|
)
|
|
1642
1663
|
parameters = self._relaxation_parameters_of(sound_speed, alpha_coeff, alpha_power)
|
|
@@ -1668,7 +1689,7 @@ class Medium:
|
|
|
1668
1689
|
sound_speed = band_scaled_sound_speed(
|
|
1669
1690
|
self.sound_speed,
|
|
1670
1691
|
self.alpha_coeff,
|
|
1671
|
-
self.alpha_power,
|
|
1692
|
+
self._exponent_used(self.alpha_coeff, self.alpha_power),
|
|
1672
1693
|
self.band_scale,
|
|
1673
1694
|
)
|
|
1674
1695
|
relaxation_param_dict = self._relaxation_parameters_of(
|