Skip to content

A count says it is a count, a confidence bound says it is one, and the enclosure result says what it holds - #974

Merged
jmrplens merged 1 commit into
fix/no-module-behind-a-functionfrom
fix/counts-bounds-and-enclosure-result
Oct 21, 2026
Merged

jmrplens merged 1 commit into
fix/no-module-behind-a-functionfrom
fix/counts-bounds-and-enclosure-result

Conversation

@jmrplens

@jmrplens jmrplens commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

What changes for you

A parameter, a field or a property that holds a whole number of things is n_<plural> across the library, the spelling n_samples, n_points and n_harmonics already had, and a limit on one is min_n_ or max_n_. events=3 could be read as the events themselves; n_events=3 cannot. The sound energy functions of emission take n_events and their SoundEnergyResult and ReverberationSoundEnergyResult hold it; measurement_positions, sound_power_pressure and sound_energy_pressure take n_reflecting_planes; the ISO 9614-1 results hold n_positions, n_subset_positions and n_additional_positions, and the ISO 3743 results n_microphone_positions and n_source_positions. The induction loop functions take n_turns, the feedback functions n_open_microphones, tone_burst and the saw-tooth burst n_cycles and n_repetitions, the diffusers n_repetitions, the absorbers n_quadrature_points and n_sum_terms, monte_carlo n_trials, the silencer and valve functions n_passages and n_stages, the FDTD solvers run(n_steps), the fault frequencies n_sidebands, n_poles, n_rotor_bars, n_slot_harmonics and n_lobe_orders, the building models n_stories, and eigenrays max_n_arrivals; check_coherence takes min_n_records. The hearing protector results hold n_subjects, the CNOSSOS-EU rolling stock n_axles, the calibrations n_determinations and n_microphones, and ReportMetadata n_source_positions and n_receiver_positions. io.AudioFileInfo reads n_channels and n_samples, the samples per channel, as Signal does.

A duration names its quantity before its unit, never the unit alone: the ISO 1999 and ISO 2631-5 functions and results take exposure_duration_years where they took years, and the noise phases of RD 1367/2007 take duration_hours. Every sweep and test signal generator takes duration_s where it took seconds (room.sweep_signal, inverse_filter and shaped_sweep_signal, electroacoustics.synchronized_sweep_signal and swept_sine_distortion, the headphone, induction loop and programme test signals, signals.noise_signal and speech.stipa_signal), the spelling the other durations in seconds already had; room.image_source_rir takes it where it took duration, and SweptSineDistortionResult holds it, so a package never spells the same duration both bare and with its unit. environment.lden and ldn take the durations of their periods as period_hours, by name, where they took hours. environment.impulse_prominence and its ImpulseProminenceResult take the assessment period of ISO/PAS 1996-3 as assessment_period_minutes where they took assessment_period_min: a trailing _min reads as a minimum, as in f_min and kij_min, so the minute is spelled out, as the hour already is. A class or grade number (filter_class), an axis, a number of decimals and a length counted in samples (delay_samples, burst_samples) are not counts and keep their names, and so does a vectorised argument that takes one count or many, the rule the plural axes already follow (reverberation_time_standard_deviation(positions=), crowd_noise_level(talkers)).

minimum and maximum are written min and max in every public name, MIN/MAX in a constant and Min/Max in a class, as numpy, SciPy, scikit-learn and Matplotlib write them and as the standards write Lmax and Lmin. A term of art is no exception any more: the maximum levels are max_levels_db and max_level_db, the background maximum background_max_level_db, the heavy impact functions a_weighted_max_impact_level and standardized_max_impact_level with their AWeightedMaxImpactResult and StandardizedMaxImpactResult, the minimum-phase reconstruction signals.min_phase with PhaseDecompositionResult.min_phase_rad and min_phase_response, the takt maximum TAKT_MAX_FACTOR, takt_max_rms and takt_max_kb, and the functions and records named in words (max_output_current, MaxUncertaintyRow, floor_transfer_max, min_curve_radius, max_repeatability_standard_deviation and the rest) follow. junction_min_vibration_reduction, max_sampled_area_radius and max_infrastructure_limit keep the names they shipped with. A maximum given in decibels is still the maximum level, max_level, never a bare max_db.

The spectral density results of signals carry their chi-square bounds as confidence_lower and confidence_upper, the spelling MethodBSummary already had. noise_control.EnclosureResult, what enclosure_insertion_loss returns, is EnclosureInsertionLossResult, beside EnclosureInsulationResult, and the two now say which is which: the first is the insertion loss IL = R − C predicted from the walls and the lining (Bies, Eqs. 7.103 and 7.111), the second the insulation D_W, D_p or D_pr measured on the enclosure once it is built (ISO 11546-1 and -2).

The guides lose the spellings the snippet gate cannot see because they sit in comments, prose and tables: the metadiffuser example names the HelmholtzResonator fields neck_length_m, neck_side_m, cavity_length_m and cavity_side_m, the ground-effect example source_height_m and receiver_height_m, the sound power guide sigma_omc_db, the underwater guide fluids.depth_to_gauge_pressure_mpa, the building response guide prints the model stories its loop now runs, and the API reference reads check.n_clipped_samples from an OverloadCheck. The CHANGELOG entries that name a function this branch renames again (the heavy impact levels, story_fundamental_frequency(n_stories), min_cabin_clearance_m, foundation_transfer_max and floor_transfer_max) and the migration row of ModulationPeriod (n_valid_blocks) carry the final spelling.

What breaks

The old names are gone, with no alias, and a call that passes one raises TypeError. environment.lden and ldn take period_hours by name only, so a period split passed by position raises TypeError too. Four of them were exported by the 3.3.0 top level (EnclosureResult, maximum_repeatability_standard_deviation, minimum_cumulative_duration_hours and minimum_phase), and junction_min_vibration_reduction and max_sampled_area_radius are back under the names they had, so the migration guide re-measures its counts: of the 885 names, 813 are published by exactly one package today, three stay at the top level and sixty-nine are gone. The guide, in its three copies, maps each 3.3.0 or 4.0.0rc1 spelling to the 4.0 one, drops the rows that only recorded a lengthening to minimum_/maximum_ of a name that shipped with min_/max_, and rewrites its rule for words; the names that arrived after 4.0.0rc1 take their final spelling in the CHANGELOG entries that introduced them.

How it was verified

Nothing numerical moved. The conformance report is the same 1893 of 1893 checks and docs/CONFORMANCE.md comes out byte for byte the same. The 26 figure generators whose code reads a renamed name were regenerated in all four variants, and so were the three swept sine figures whose code now passes duration_s; every SVG came out byte-identical. The one clip whose builder reads a renamed keyword, anim_feedback_howl, computes data that is bit-identical before and after (the three gain sweeps of feedback_stability it draws), so its fingerprint was restamped and its files kept; anim_epnl_flyover was already stale on the base and is left for the next time the clips are made.

The gates on this branch: ruff check . and ruff format --check . are clean, mypy src scripts finds no issue in 699 files and bandit -q -r src reports nothing. The full suite passes, 28436 tests with 69 skipped, and the documentation snippets pass, 7535 blocks over 731 pages. The site type-checks, builds and validates. check_api_reference, check_frozen_constants, check_parameter_units (which also holds lden and ldn to period_hours by name, and the minute to _minutes), check_identifier_spelling, check_em_dashes, check_spanish_accents, check_markdown_hazards, check_errata_evidence, check_digit_grouping, check_record_display, check_raises_blocks, check_figures (3316 figures) and the conformance checks pass. The API reference and the llms files are regenerated with no drift, and the 77 fiches regenerate within tolerance of the committed ones.

tests/test_removed_names.py pins a sample of every kind of retired spelling: the old classes and functions raise AttributeError beside their new names, the old keywords of eighteen more functions and records are gone from their signatures (seconds on the sweep, noise and STIPA generators, duration on image_source_rir and SweptSineDistortionResult, hours on lden and assessment_period_min on impulse_prominence among them), and the old fields of seven records (ci_lower, minimum_phase_response, AudioFileInfo.frames, SoundEnergyResult.events, ReportMetadata.source_positions, ImpulseProminenceResult.assessment_period_min among them) are gone from their dataclass fields.

The guards

tests/test_public_vocabulary.py gains one guard, rewrites one and widens two, each with tests on made-up names that pin what it must catch and what it must leave alone.

test_a_count_is_n_plural reads every public parameter, field and property annotated int or int | None and fails when its head noun is a plural without n_: the last word, read before a preposition (responses_at_threshold) and before a trailing participle (positions_used), behind a min_ or max_. A rate (points_per_bandwidth, seconds_per_decade) is not a count, and a name that is a unit of time alone (seconds, minutes, hours, days, years) fails as a duration that names no quantity whatever it holds, one number, a tuple of the durations of several periods or an array; that is how the eleven seconds and the two hours of lden and ldn were found. Its exceptions are keyed by location with their reason: the decimals a value is rounded to, the degrees of freedom of the soundscape t test, and the lengths counted in samples or grid cells (delay_samples, linear_phase_samples, burst_samples, period_samples, absorbing_layer_cells); an exception that matches nothing fails too.

test_words_are_spelled_out now fails on minimum or maximum in any public name, parameter, field, property, constant, function, class or module, with the spelling to write in its case (min, MIN, Min); the term-of-art list and the rule that a function or a class is named in words are gone, and so are the two exemptions they needed. A maximum in decibels still fails as max_db. It also fails on ci as a word of any public name, so a ci_low, a ci_lower_db or a CiBounds cannot come back where the exact spellings below would miss them; the impact sound adaptation term C_I of ISO 717-2 (ci, ci_50_2500, ci_delta, ci_r) keeps its symbol, keyed by location in seven entries with that reason. A made-up public function with ci_low, ci_lower_db and seconds parameters, planted in signals.spectra, fails both guards by those three names.

test_one_concept_is_spelled_one_way refuses ci_lower, ci_upper, lower_ci and upper_ci. The message check refuses a message that names a count by the spelling it left ('events' beside n_events) or a min_/max_ name by its long spelling; it found FDTD2D.run(n_steps) handing its count to a helper that still called it 'steps', fixed here. The walk under all of them now reads the three classes the root publishes, which is how ReportMetadata.source_positions and receiver_positions were found: the root serves them through a lazy __getattr__, so no namespace the guards read held them.

Red on the base this branch sits on (0bc8fbe), with this branch's tests:

test_one_concept_is_spelled_one_way: 4 names
phonometry.signals.multitaper.MultitaperSpectralDensityResult.ci_lower: 'ci_lower' is spelled 'confidence_lower' everywhere else
phonometry.signals.multitaper.MultitaperSpectralDensityResult.ci_upper: 'ci_upper' is spelled 'confidence_upper' everywhere else
phonometry.signals.spectra.SpectralDensityResult.ci_lower: 'ci_lower' is spelled 'confidence_lower' everywhere else
phonometry.signals.spectra.SpectralDensityResult.ci_upper: 'ci_upper' is spelled 'confidence_upper' everywhere else

test_words_are_spelled_out: 96 names
phonometry._internal.validation.require_count(minimum): 'minimum' is spelled 'min'
phonometry.aircraft.airport_noise.event_level(maximum_levels): 'maximum' is spelled 'max'
phonometry.aircraft.airport_noise.noise_contour(maximum_levels): 'maximum' is spelled 'max'
phonometry.building.AWeightedMaximumImpactResult: 'maximum' is spelled 'Max'
phonometry.building.StandardizedMaximumImpactResult: 'maximum' is spelled 'Max'
phonometry.building.a_weighted_maximum_impact_level: 'maximum' is spelled 'max'
phonometry.building.junction_minimum_vibration_reduction: 'minimum' is spelled 'min'
phonometry.building.maximum_repeatability_standard_deviation: 'maximum' is spelled 'max'
phonometry.building.measurement.AWeightedMaximumImpactResult: 'maximum' is spelled 'Max'
phonometry.building.measurement.StandardizedMaximumImpactResult: 'maximum' is spelled 'Max'
phonometry.building.measurement.a_weighted_maximum_impact_level: 'maximum' is spelled 'max'
phonometry.building.measurement.heavy_impact.AWeightedMaximumImpactResult: 'maximum' is spelled 'Max'
phonometry.building.measurement.heavy_impact.StandardizedMaximumImpactResult: 'maximum' is spelled 'Max'
phonometry.building.measurement.heavy_impact.a_weighted_maximum_impact_level: 'maximum' is spelled 'max'
phonometry.building.measurement.heavy_impact.standardized_maximum_impact_level: 'maximum' is spelled 'max'
phonometry.building.measurement.joint_insulation.LaboratoryJointInsulationResult.limit_at_maximum: 'maximum' is spelled 'max'
phonometry.building.measurement.joint_insulation.laboratory_joint_insulation(limit_at_maximum): 'maximum' is spelled 'max'
phonometry.building.measurement.maximum_repeatability_standard_deviation: 'maximum' is spelled 'max'
phonometry.building.measurement.service_equipment.MeasurementDisturbanceCheck.maximum_levels_db: 'maximum' is spelled 'max'
phonometry.building.measurement.service_equipment.OperatingCondition.maximum_cycle: 'maximum' is spelled 'max'
phonometry.building.measurement.service_equipment.OperatingCondition.maximum_level: 'maximum' is spelled 'max'
phonometry.building.measurement.service_equipment.VaryingBackgroundCheck.background_maximum_level_db: 'maximum' is spelled 'max'
phonometry.building.measurement.service_equipment.check_measurement_disturbance(maximum_levels_db): 'maximum' is spelled 'max'
phonometry.building.measurement.service_equipment.check_varying_background(background_maximum_level_db): 'maximum' is spelled 'max'
phonometry.building.measurement.standardized_maximum_impact_level: 'maximum' is spelled 'max'
phonometry.building.measurement.uncertainty.maximum_repeatability_standard_deviation: 'maximum' is spelled 'max'
phonometry.building.prediction.junction_minimum_vibration_reduction: 'minimum' is spelled 'min'
phonometry.building.prediction.simplified_model.junction_minimum_vibration_reduction: 'minimum' is spelled 'min'
phonometry.building.standardized_maximum_impact_level: 'maximum' is spelled 'max'
phonometry.electroacoustics.MaximumOutputCurrent: 'maximum' is spelled 'Max'
phonometry.electroacoustics.induction_loop.FieldStrengthReading.maximum_level_db: 'maximum' is spelled 'max'
phonometry.electroacoustics.induction_loop_components.MaximumOutputCurrent: 'maximum' is spelled 'Max'
phonometry.electroacoustics.induction_loop_components.maximum_output_current: 'maximum' is spelled 'max'
phonometry.electroacoustics.maximum_output_current: 'maximum' is spelled 'max'
phonometry.emission.minimum_analyzer_bandwidth: 'minimum' is spelled 'min'
phonometry.emission.reference_sound_source.reference_source_calibration(maximum_levels_db): 'maximum' is spelled 'max'
phonometry.emission.sound_power_high_frequency.HighFrequencySoundPowerResult.within_10_db_of_maximum: 'maximum' is spelled 'max'
phonometry.emission.sound_power_high_frequency.minimum_analyzer_bandwidth: 'minimum' is spelled 'min'
phonometry.emission.sound_power_plant.plant_steady_reading(maximum_level_db): 'maximum' is spelled 'max'
phonometry.emission.sound_power_plant.plant_steady_reading(minimum_level_db): 'minimum' is spelled 'min'
phonometry.environment.assessment.maximum_infrastructure_limit: 'maximum' is spelled 'max'
phonometry.environment.assessment.spain.maximum_infrastructure_limit: 'maximum' is spelled 'max'
phonometry.environment.maximum_infrastructure_limit: 'maximum' is spelled 'max'
phonometry.environment.minimum_curve_radius: 'minimum' is spelled 'min'
phonometry.environment.sources._statistical_pass_by.PassByRegression.maximum_levels_db: 'maximum' is spelled 'max'
phonometry.environment.sources._statistical_pass_by.pass_by_regression(maximum_levels_db): 'maximum' is spelled 'max'
phonometry.environment.sources._statistical_pass_by.statistical_pass_by(maximum_levels_db): 'maximum' is spelled 'max'
phonometry.environment.sources.minimum_curve_radius: 'minimum' is spelled 'min'
phonometry.environment.sources.rolling_stock_noise.PassByMeasurement.maximum_level_db: 'maximum' is spelled 'max'
phonometry.environment.sources.rolling_stock_noise.minimum_curve_radius: 'minimum' is spelled 'min'
phonometry.hearing.minimum_cumulative_duration_hours: 'minimum' is spelled 'min'
phonometry.hearing.minimum_significant_difference: 'minimum' is spelled 'min'
phonometry.hearing.occupational_exposure.minimum_cumulative_duration_hours: 'minimum' is spelled 'min'
phonometry.materials.maximum_sampled_area_radius: 'maximum' is spelled 'max'
phonometry.materials.surfaces.maximum_sampled_area_radius: 'maximum' is spelled 'max'
phonometry.materials.surfaces.road_absorption.maximum_sampled_area_radius: 'maximum' is spelled 'max'
phonometry.metrology.MaximumUncertaintyRow: 'maximum' is spelled 'Max'
phonometry.metrology.conformance.ConformanceVerification.uncertainty_within_maximum: 'maximum' is spelled 'max'
phonometry.metrology.free_field_corrections.maximum_expanded_uncertainty: 'maximum' is spelled 'max'
phonometry.metrology.maximum_expanded_uncertainty: 'maximum' is spelled 'max'
phonometry.metrology.sound_level_meter.MaximumUncertaintyRow: 'maximum' is spelled 'Max'
phonometry.metrology.sound_level_meter.SoundLevelMeterPeriodicRequirement.over_maximum_by_correction_data: 'maximum' is spelled 'max'
phonometry.metrology.sound_level_meter.SoundLevelMeterPeriodicVerification.over_maximum_by_correction_data: 'maximum' is spelled 'max'
phonometry.noise_control._cabin_insulation.SourcePositionCheck.exceeds_maximum: 'maximum' is spelled 'max'
phonometry.noise_control.minimum_cabin_clearance_m: 'minimum' is spelled 'min'
phonometry.room.acoustics.minimum_reliable_reverberation_time: 'minimum' is spelled 'min'
phonometry.room.auditorium.minimum_receiver_positions: 'minimum' is spelled 'min'
phonometry.room.minimum_receiver_positions: 'minimum' is spelled 'min'
phonometry.room.minimum_reliable_reverberation_time: 'minimum' is spelled 'min'
phonometry.signals.minimum_phase: 'minimum' is spelled 'min'
phonometry.signals.multitaper.MultitaperSpectralDensityResult.ci_lower: a confidence bound is 'confidence_lower'/'confidence_upper', never 'ci'
phonometry.signals.multitaper.MultitaperSpectralDensityResult.ci_upper: a confidence bound is 'confidence_lower'/'confidence_upper', never 'ci'
phonometry.signals.phase.PhaseDecompositionResult.minimum_phase_rad: 'minimum' is spelled 'min'
phonometry.signals.phase.PhaseDecompositionResult.minimum_phase_response: 'minimum' is spelled 'min'
phonometry.signals.phase.minimum_phase: 'minimum' is spelled 'min'
phonometry.signals.spectra.SpectralDensityResult.ci_lower: a confidence bound is 'confidence_lower'/'confidence_upper', never 'ci'
phonometry.signals.spectra.SpectralDensityResult.ci_upper: a confidence bound is 'confidence_lower'/'confidence_upper', never 'ci'
phonometry.vibration.TAKT_MAXIMUM_FACTOR: 'maximum' is spelled 'MAX'
phonometry.vibration.floor_transfer_maximum: 'maximum' is spelled 'max'
phonometry.vibration.foundation_transfer_maximum: 'maximum' is spelled 'max'
phonometry.vibration.immission.TAKT_MAXIMUM_FACTOR: 'maximum' is spelled 'MAX'
phonometry.vibration.immission.floor_transfer_maximum: 'maximum' is spelled 'max'
phonometry.vibration.immission.foundation_transfer_maximum: 'maximum' is spelled 'max'
phonometry.vibration.immission.people.railway_takt_maximum_rms: 'maximum' is spelled 'max'
phonometry.vibration.immission.prediction.floor_transfer_maximum: 'maximum' is spelled 'max'
phonometry.vibration.immission.prediction.foundation_transfer_maximum: 'maximum' is spelled 'max'
phonometry.vibration.immission.railway.TrainPassage.band_maximum_levels_db: 'maximum' is spelled 'max'
phonometry.vibration.immission.railway_prediction.TAKT_MAXIMUM_FACTOR: 'maximum' is spelled 'MAX'
phonometry.vibration.immission.railway_prediction.takt_maximum_kb: 'maximum' is spelled 'max'
phonometry.vibration.immission.railway_takt_maximum_rms: 'maximum' is spelled 'max'
phonometry.vibration.immission.takt_maximum_kb: 'maximum' is spelled 'max'
phonometry.vibration.immission.takt_maximum_rms: 'maximum' is spelled 'max'
phonometry.vibration.immission.vibration_meter.takt_maximum_rms: 'maximum' is spelled 'max'
phonometry.vibration.railway_takt_maximum_rms: 'maximum' is spelled 'max'
phonometry.vibration.takt_maximum_kb: 'maximum' is spelled 'max'
phonometry.vibration.takt_maximum_rms: 'maximum' is spelled 'max'

test_a_count_is_n_plural: 136 names
phonometry._plot.geometry.materials.plot_qrd_geometry(repetitions): a count is n_<plural>
phonometry._report.metadata.ReportMetadata.receiver_positions: a count is n_<plural>
phonometry._report.metadata.ReportMetadata.source_positions: a count is n_<plural>
phonometry.building.measurement.intensity_insulation.LowFrequencyElementResult.elements: a count is n_<plural>
phonometry.building.measurement.intensity_insulation.low_frequency_element_normalized_difference(elements): a count is n_<plural>
phonometry.building.prediction.aperture_transmission.slit_resonance_frequencies(orders): a count is n_<plural>
phonometry.building.prediction.installed_structure_borne.multi_junction_adjustment(junctions): a count is n_<plural>
phonometry.electroacoustics.headphones.EarCanalFrequencyResponse.persons: a count is n_<plural>
phonometry.electroacoustics.headphones.FieldComparisonResponse.persons: a count is n_<plural>
phonometry.electroacoustics.headphones.HeadphoneClassification.channels: a count is n_<plural>
phonometry.electroacoustics.headphones.headphone_difference_frequency_signal(seconds): a duration names its quantity before its unit
phonometry.electroacoustics.headphones.headphone_modulation_signal(seconds): a duration names its quantity before its unit
phonometry.electroacoustics.induction_loop.combi_signal(cycles): a count is n_<plural>
phonometry.electroacoustics.induction_loop.loop_test_noise(seconds): a duration names its quantity before its unit
phonometry.electroacoustics.induction_loop_components.LoopField.turns: a count is n_<plural>
phonometry.electroacoustics.induction_loop_components.loop_center_field(turns): a count is n_<plural>
phonometry.electroacoustics.induction_loop_components.loop_current(turns): a count is n_<plural>
phonometry.electroacoustics.induction_loop_components.loop_dimensions(turns): a count is n_<plural>
phonometry.electroacoustics.induction_loop_components.loop_resistance(turns): a count is n_<plural>
phonometry.electroacoustics.induction_loop_components.rectangular_loop_field(turns): a count is n_<plural>
phonometry.electroacoustics.induction_loop_components.rectangular_loop_inductance(turns): a count is n_<plural>
phonometry.electroacoustics.program_signal.simulated_program_signal(seconds): a duration names its quantity before its unit
phonometry.electroacoustics.sound_reinforcement.FeedbackStabilityResult.open_microphones: a count is n_<plural>
phonometry.electroacoustics.sound_reinforcement.feedback_stability(open_microphones): a count is n_<plural>
phonometry.electroacoustics.sound_reinforcement.open_microphone_correction(open_microphones): a count is n_<plural>
phonometry.electroacoustics.swept_sine.swept_sine_distortion(seconds): a duration names its quantity before its unit
phonometry.electroacoustics.swept_sine.synchronized_sweep_signal(seconds): a duration names its quantity before its unit
phonometry.emission._sound_power_hard_walled.HardWalledRoomCheck.orientations: a count is n_<plural>
phonometry.emission._sound_power_hard_walled.HardWalledSoundPowerResult.microphone_positions: a count is n_<plural>
phonometry.emission._sound_power_hard_walled.HardWalledSoundPowerResult.source_positions: a count is n_<plural>
phonometry.emission._sound_power_hard_walled.SourceLocationPlan.a_weighted_source_locations: a count is n_<plural>
phonometry.emission._sound_power_hard_walled.SourceLocationPlan.microphone_positions: a count is n_<plural>
phonometry.emission._sound_power_hard_walled.SourceLocationPlan.required_source_locations: a count is n_<plural>
phonometry.emission._sound_power_hard_walled.sound_energy_hard_walled(events): a count is n_<plural>
phonometry.emission._sound_power_in_situ.sound_energy_in_situ(events): a count is n_<plural>
phonometry.emission._sound_power_intensity_points.DiscretePointIntensityResult.positions: a count is n_<plural>
phonometry.emission._sound_power_intensity_points.PartialPowerConcentration.additional_positions: a count is n_<plural>
phonometry.emission._sound_power_intensity_points.PartialPowerConcentration.positions: a count is n_<plural>
phonometry.emission._sound_power_intensity_points.PartialPowerConcentration.subset_positions: a count is n_<plural>
phonometry.emission._sound_power_reverberation.ReverberationSoundEnergyResult.events: a count is n_<plural>
phonometry.emission._sound_power_reverberation.sound_energy_comparison(events): a count is n_<plural>
phonometry.emission._sound_power_reverberation.sound_energy_reverberation(events): a count is n_<plural>
phonometry.emission._sound_power_special_room.SpecialRoomSoundPowerResult.microphone_positions: a count is n_<plural>
phonometry.emission._sound_power_special_room.SpecialRoomSoundPowerResult.source_positions: a count is n_<plural>
phonometry.emission._sound_power_special_room.special_room_source_locations(microphone_positions): a count is n_<plural>
phonometry.emission.sound_power.SoundEnergyResult.events: a count is n_<plural>
phonometry.emission.sound_power.mean_single_event_level(events): a count is n_<plural>
phonometry.emission.sound_power.measurement_positions(reflecting_planes): a count is n_<plural>
phonometry.emission.sound_power.sound_energy_pressure(events): a count is n_<plural>
phonometry.emission.sound_power.sound_energy_pressure(reflecting_planes): a count is n_<plural>
phonometry.emission.sound_power.sound_power_pressure(reflecting_planes): a count is n_<plural>
phonometry.emission.turbine_noise.TurbineMicrophoneArray.turbine_boxes: a count is n_<plural>
phonometry.emission.turbine_noise.turbine_microphone_positions(turbine_boxes): a count is n_<plural>
phonometry.environment.assessment.exposure_distribution.SELDistribution.subclasses: a count is n_<plural>
phonometry.environment.assessment.exposure_distribution.sel_distribution(subclasses): a count is n_<plural>
phonometry.environment.assessment.rating.lden(hours): a duration names its quantity before its unit
phonometry.environment.assessment.rating.ldn(hours): a duration names its quantity before its unit
phonometry.environment.assessment.spain.NoisePhase.hours: a duration names its quantity before its unit
phonometry.environment.assessment.spain.evaluation_period_level(hours): a duration names its quantity before its unit
phonometry.environment.assessment.wind_turbine_modulation.ModulationPeriod.valid_blocks: a count is n_<plural>
phonometry.environment.propagation.software_quality.RoundRobinPrecision.participants: a count is n_<plural>
phonometry.environment.propagation.software_quality.RoundRobinPrecision.receivers: a count is n_<plural>
phonometry.environment.sources.cnossos_rail.RollingStock.axles: a count is n_<plural>
phonometry.environment.sources.cnossos_rail.VehicleDescriptor.axles: a count is n_<plural>
phonometry.filters._weighting_design.design_sos(sections): a count is n_<plural>
phonometry.filters.weighting_compliance.WeightingComplianceResult.sweep_points: a count is n_<plural>
phonometry.filters.weighting_compliance.verify_weighting_class(sweep_points): a count is n_<plural>
phonometry.hearing._earmuff_insertion_loss.EarmuffInsertionLossResult.repetitions: a count is n_<plural>
phonometry.hearing._real_ear_attenuation.RealEarAttenuationResult.subjects: a count is n_<plural>
phonometry.hearing.active_noise_reduction.ActiveInsertionLossResult.subjects: a count is n_<plural>
phonometry.hearing.audiometry.AscendingThresholdResult.responses_at_threshold: a count is n_<plural>
phonometry.hearing.hearing_protectors.AssumedProtectionResult.subjects: a count is n_<plural>
phonometry.hearing.noise_induced_hearing_loss.HTLANResult.years: a duration names its quantity before its unit
phonometry.hearing.noise_induced_hearing_loss.NIPTSResult.years: a duration names its quantity before its unit
phonometry.hearing.noise_induced_hearing_loss.htlan(years): a duration names its quantity before its unit
phonometry.hearing.noise_induced_hearing_loss.nipts(years): a duration names its quantity before its unit
phonometry.io._wav.AudioFileInfo.channels: a count is n_<plural>
phonometry.io._wav.AudioFileInfo.frames: a count is n_<plural>
phonometry.materials.absorbers.layered.diffuse_field_absorption(quadrature_points): a count is n_<plural>
phonometry.materials.absorbers.slow_sound.helmholtz_resonator_impedance(sum_terms): a count is n_<plural>
phonometry.materials.absorbers.slow_sound.rectangular_duct_properties(sum_terms): a count is n_<plural>
phonometry.materials.diffusers.design.DiffuserPolarResponse.repetitions: a count is n_<plural>
phonometry.materials.diffusers.design.predict_diffuser_polar_response(repetitions): a count is n_<plural>
phonometry.materials.diffusers.design.predicted_diffusion_spectrum(repetitions): a count is n_<plural>
phonometry.materials.diffusers.metadiffuser.metadiffuser_diffusion_spectrum(repetitions): a count is n_<plural>
phonometry.materials.diffusers.metadiffuser.metadiffuser_polar_response(repetitions): a count is n_<plural>
phonometry.metrology.comparison_calibration.ComparisonCalibration.determinations: a count is n_<plural>
phonometry.metrology.free_field_corrections.FreeFieldCorrection.determinations: a count is n_<plural>
phonometry.metrology.random_incidence.adjustment_factors(planes): a count is n_<plural>
phonometry.metrology.random_incidence.largest_element_fraction(planes): a count is n_<plural>
phonometry.metrology.reciprocity_calibration.ReciprocityCalibration.microphones: a count is n_<plural>
phonometry.metrology.sound_level_meter.SoundLevelMeterFeatures.level_ranges: a count is n_<plural>
phonometry.metrology.uncertainty.MonteCarloResult.trials: a count is n_<plural>
phonometry.metrology.uncertainty.monte_carlo(trials): a count is n_<plural>
phonometry.noise_control._cabin_insulation.SourcePositionCheck.positions_used: a count is n_<plural>
phonometry.noise_control._cabin_insulation.SourcePositionCheck.required_positions: a count is n_<plural>
phonometry.noise_control.hvac.silencer_self_noise(passages): a count is n_<plural>
phonometry.noise_control.valves.stage_level_correction(stages): a count is n_<plural>
phonometry.noise_control.valves.valve_style_modifier(passages): a count is n_<plural>
phonometry.noise_control.valves_hydrodynamic.multihole_incipient_cavitation_ratio(passages): a count is n_<plural>
phonometry.noise_control.valves_hydrodynamic.uniform_passage_style_modifier(passages): a count is n_<plural>
phonometry.room._impulse_response.inverse_filter(seconds): a duration names its quantity before its unit
phonometry.room._impulse_response.shaped_sweep_signal(seconds): a duration names its quantity before its unit
phonometry.room._impulse_response.sweep_signal(seconds): a duration names its quantity before its unit
phonometry.signals.test_signals.ToneBurstResult.cycles: a count is n_<plural>
phonometry.signals.test_signals.ToneBurstResult.repetitions: a count is n_<plural>
phonometry.signals.test_signals.noise_signal(seconds): a duration names its quantity before its unit
phonometry.signals.test_signals.tone_burst(cycles): a count is n_<plural>
phonometry.signals.test_signals.tone_burst(repetitions): a count is n_<plural>
phonometry.simulation.elastic_fdtd.ElasticFDTD2D.run(steps): a count is n_<plural>
phonometry.simulation.fdtd.FDTD2D.run(steps): a count is n_<plural>
phonometry.speech.sti.stipa_signal(seconds): a duration names its quantity before its unit
phonometry.underwater.propagation.numerical.eigenrays(max_arrivals): a count is n_<plural>
phonometry.vibration.human.multiple_shock.MultipleShockResult.years: a duration names its quantity before its unit
phonometry.vibration.human.multiple_shock.injury_risk(years): a duration names its quantity before its unit
phonometry.vibration.human.multiple_shock.multiple_shock_assessment(years): a duration names its quantity before its unit
phonometry.vibration.human.signal_burst.sawtooth_burst(cycles): a count is n_<plural>
phonometry.vibration.human.signal_burst.signal_burst_indications(cycles): a count is n_<plural>
phonometry.vibration.immission.prediction.soil_building_frequency_guide(stories): a count is n_<plural>
phonometry.vibration.immission.railway.amplitude_distribution(bins): a count is n_<plural>
phonometry.vibration.machinery.diagnostics.blade_pass_frequencies(lobe_orders): a count is n_<plural>
phonometry.vibration.machinery.diagnostics.gear_mesh_frequencies(sidebands): a count is n_<plural>
phonometry.vibration.machinery.diagnostics.induction_motor_frequencies(poles): a count is n_<plural>
phonometry.vibration.machinery.diagnostics.induction_motor_frequencies(rotor_bars): a count is n_<plural>
phonometry.vibration.machinery.diagnostics.induction_motor_frequencies(sidebands): a count is n_<plural>
phonometry.vibration.machinery.diagnostics.induction_motor_frequencies(slot_harmonics): a count is n_<plural>
phonometry.vibration.structural._impact_mobility.CoherenceCheck.impacts: a count is n_<plural>
phonometry.vibration.structural._impact_mobility.CoherenceCheck.min_records: a count is n_<plural>
phonometry.vibration.structural._impact_mobility.DoubleHitCheck.impacts: a count is n_<plural>
phonometry.vibration.structural._impact_mobility.ImpactMobilityResult.impacts: a count is n_<plural>
phonometry.vibration.structural._impact_mobility.OverloadCheck.clipped_samples: a count is n_<plural>
phonometry.vibration.structural._impact_mobility.check_coherence(min_records): a count is n_<plural>
phonometry.vibration.structural.building_damage.story_fundamental_frequency(stories): a count is n_<plural>
phonometry.vibration.structural.building_response.estimate_fundamental_frequency(stories): a count is n_<plural>
phonometry.vibration.structural.building_response.fundamental_frequency(stories): a count is n_<plural>
phonometry.vibration.structural.building_response.fundamental_period(stories): a count is n_<plural>

Green on this branch: all three lists are empty, tests/test_public_vocabulary.py passes 88 tests and, with tests/test_removed_names.py, 341.

scripts/check_parameter_units.py no longer reads _min as a unit. Its unit list wrote the minute as _min, so a period that ended in it passed as naming its unit, while every other public name that ends in _min is a minimum (f_min, kij_min, envelope_min) or a rate per minute. The minute is _minutes now, as the hour is _hours, and a minute under per reads as the denominator of a rate (_ft_per_min, the climb rate of the ANP database). A period that ends in _min names no unit and fails, which is how assessment_period_min was found; tests on made-up names pin both halves, and that min alone is no unit tail, so a name beside the same name ending in _min is never read as one quantity spelled two ways.

Red on the base this branch sits on (0bc8fbe), with this branch's script. The third name and the stale exemption are this branch's own rename of minimum_phase_response, whose exemption the script now keys under min_phase_response:

::error::a public parameter names a quantity without its unit
3 parameter(s) keep the unit out of the name:
  ImpulseProminenceResult(assessment_period_min)  <- src/phonometry/environment/assessment/impulsive_sound.py:132
  impulse_prominence(assessment_period_min)  <- src/phonometry/environment/assessment/impulsive_sound.py:344
  PhaseDecompositionResult(minimum_phase_response)  <- src/phonometry/signals/phase.py:244
  -> end the name in one of _kpa, _pa, _inhg, _percent, _c, _k, _ft, _ft_per_min, _mm, _um, _m, _rad, _deg, _sr, _s, _per_s, _np_per_rad, _minutes, _hours, ...
::error::an exemption at the top of scripts/check_parameter_units.py lists ('phonometry.signals.phase', 'PhaseDecompositionResult', 'min_phase_response'), which no longer exists or no longer needs it

Green on this branch: check_parameter_units reports nothing and tests/test_check_parameter_units.py passes 152 tests.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, we are unable to review this pull request

The GitHub API does not allow us to fetch diffs exceeding 300 files, and this pull request has 601

@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 601 files, which is 501 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration
  • Configuration used: Repository: jmrplens/phonometry/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 1d46a12c-655d-4b27-8b3c-de56ce47838e
📥 Commits

Reviewing files that changed from the base of the PR and between 0bc8fbe and 818b515.

📒 Files selected for processing: 601
  • CHANGELOG.md
  • CONTRIBUTING.md
  • docs/ERRATA.es.md
  • docs/ERRATA.md
  • docs/buildings/design/insulation-prediction.md
  • docs/buildings/design/panel-sound-insulation.md
  • docs/buildings/insulation/heavy-impact-sources.md
  • docs/buildings/insulation/insulation-intensity.md
  • docs/buildings/insulation/lab-application-rules.md
  • docs/buildings/rooms/open-plan-acoustics.md
  • docs/buildings/rooms/reporting-and-qualification.md
  • docs/buildings/rooms/room-acoustics.md
  • docs/buildings/rooms/room-image-sources.md
  • docs/buildings/rooms/room-impulse-response.md
  • docs/buildings/rooms/stage-and-uncertainty.md
  • docs/devices/broadcast/quasi-peak.md
  • docs/devices/electroacoustics/induction-loops.md
  • docs/devices/electroacoustics/loudspeakers.md
  • docs/devices/electroacoustics/swept-sine-distortion.md
  • docs/devices/emission/free-field-qualification.md
  • docs/devices/emission/intensity.md
  • docs/devices/emission/sound-power-high-frequency.md
  • docs/devices/emission/sound-power-in-situ.md
  • docs/devices/emission/sound-power-pressure.md
  • docs/devices/emission/sound-power-reverberation.md
  • docs/devices/emission/sound-power-test-rooms.md
  • docs/devices/emission/sound-power-turbines.md
  • docs/devices/noise-control/duct-path.md
  • docs/devices/noise-control/enclosure-cabin-insulation.md
  • docs/devices/noise-control/noise-control.md
  • docs/environment/assessment/environmental-levels.md
  • docs/environment/assessment/sel-distribution.md
  • docs/environment/assessment/spanish-noise-regulation.md
  • docs/environment/propagation/software-quality.md
  • docs/environment/sources/cnossos-rail-emission.md
  • docs/environment/sources/rolling-stock-noise.md
  • docs/io/audio-files.md
  • docs/materials/diffusers/diffusers.md
  • docs/materials/diffusers/metadiffusers.md
  • docs/materials/surfaces/road-absorption.md
  • docs/perception/speech/speech-transmission.md
  • docs/reference/api/index.md
  • docs/signals/metrology/comparison-calibration.md
  • docs/signals/metrology/gum-uncertainty.md
  • docs/signals/metrology/random-incidence.md
  • docs/signals/metrology/sound-level-meter-periodic-tests.md
  • docs/signals/spectra/cepstrum-echoes.md
  • docs/signals/spectra/spectral-analysis.md
  • docs/signals/spectra/test-signals.md
  • docs/simulation/fdtd-simulation.md
  • docs/start/index.md
  • docs/start/upgrading.md
  • docs/underwater/underwater-propagation.md
  • docs/underwater/underwater-solvers.md
  • docs/vibration/human/multiple-shock-vibration.md
  • docs/vibration/immission/people-in-buildings.md
  • docs/vibration/immission/railway-vibration.md
  • docs/vibration/immission/vibration-prediction.md
  • docs/vibration/machinery/machine-diagnostics.md
  • docs/vibration/structural/building-response.md
  • docs/vibration/structural/impact-mobility.md
  • llms-full.txt
  • scripts/animation_fingerprints.txt
  • scripts/check_parameter_units.py
  • scripts/conformance/domains/assessment.py
  • scripts/conformance/domains/broadcast_wave.py
  • scripts/conformance/domains/building.py
  • scripts/conformance/domains/cnossos_rail.py
  • scripts/conformance/domains/enclosure_cabin_insulation.py
  • scripts/conformance/domains/free_field_corrections.py
  • scripts/conformance/domains/induction_loop.py
  • scripts/conformance/domains/intensity.py
  • scripts/conformance/domains/levels.py
  • scripts/conformance/domains/outdoor.py
  • scripts/conformance/domains/panels.py
  • scripts/conformance/domains/random_incidence.py
  • scripts/conformance/domains/sel_distribution.py
  • scripts/conformance/domains/signal_analysis.py
  • scripts/conformance/domains/sound_level_meters.py
  • scripts/conformance/domains/sound_power_rooms.py
  • scripts/conformance/domains/structural_response.py
  • scripts/conformance/domains/swept_sine.py
  • scripts/conformance/domains/vibration_people.py
  • scripts/conformance/domains/vibration_railway_prediction.py
  • scripts/conformance/domains/wind_turbine_receptor.py
  • scripts/figures/building.py
  • scripts/figures/devices.py
  • scripts/figures/environment.py
  • scripts/figures/materials.py
  • scripts/figures/metrology.py
  • scripts/figures/schematics.py
  • scripts/figures/simulation.py
  • scripts/figures/spectral_estimation.py
  • scripts/figures/system_measurement.py
  • scripts/figures/vibration.py
  • scripts/reports/emission.py
  • scripts/reports/room.py
  • scripts/reports/vibration.py
  • site/public/llms/llms-buildings-design.txt
  • site/public/llms/llms-buildings-insulation-laboratory.txt
  • site/public/llms/llms-buildings-insulation.txt
  • site/public/llms/llms-buildings-rooms-auditorium.txt
  • site/public/llms/llms-buildings-rooms.txt
  • site/public/llms/llms-devices-broadcast.txt
  • site/public/llms/llms-devices-electroacoustics.txt
  • site/public/llms/llms-devices-emission-enveloping.txt
  • site/public/llms/llms-devices-emission-intensity.txt
  • site/public/llms/llms-devices-emission-reverberant.txt
  • site/public/llms/llms-devices-noise-control-measured.txt
  • site/public/llms/llms-devices-noise-control.txt
  • site/public/llms/llms-environment-assessment.txt
  • site/public/llms/llms-environment-propagation.txt
  • site/public/llms/llms-environment-sources.txt
  • site/public/llms/llms-io.txt
  • site/public/llms/llms-materials-diffusers.txt
  • site/public/llms/llms-materials-surfaces.txt
  • site/public/llms/llms-perception-speech.txt
  • site/public/llms/llms-signals-metrology-microphones.txt
  • site/public/llms/llms-signals-metrology.txt
  • site/public/llms/llms-signals-spectra.txt
  • site/public/llms/llms-simulation.txt
  • site/public/llms/llms-start.txt
  • site/public/llms/llms-underwater.txt
  • site/public/llms/llms-vibration-human.txt
  • site/public/llms/llms-vibration-immission.txt
  • site/public/llms/llms-vibration-machinery.txt
  • site/public/llms/llms-vibration-structural.txt
  • site/src/content/docs/buildings/design/insulation-prediction.mdx
  • site/src/content/docs/buildings/design/panel-sound-insulation.mdx
  • site/src/content/docs/buildings/insulation/heavy-impact-sources.mdx
  • site/src/content/docs/buildings/insulation/insulation-intensity.mdx
  • site/src/content/docs/buildings/insulation/lab-application-rules.mdx
  • site/src/content/docs/buildings/rooms/open-plan-acoustics.mdx
  • site/src/content/docs/buildings/rooms/reporting-and-qualification.mdx
  • site/src/content/docs/buildings/rooms/room-acoustics.mdx
  • site/src/content/docs/buildings/rooms/room-image-sources.mdx
  • site/src/content/docs/buildings/rooms/room-impulse-response.mdx
  • site/src/content/docs/buildings/rooms/stage-and-uncertainty.mdx
  • site/src/content/docs/devices/broadcast/quasi-peak.mdx
  • site/src/content/docs/devices/electroacoustics/induction-loops.mdx
  • site/src/content/docs/devices/electroacoustics/loudspeakers.mdx
  • site/src/content/docs/devices/electroacoustics/swept-sine-distortion.mdx
  • site/src/content/docs/devices/emission/free-field-qualification.mdx
  • site/src/content/docs/devices/emission/intensity.mdx
  • site/src/content/docs/devices/emission/sound-power-high-frequency.mdx
  • site/src/content/docs/devices/emission/sound-power-in-situ.mdx
  • site/src/content/docs/devices/emission/sound-power-pressure.mdx
  • site/src/content/docs/devices/emission/sound-power-reverberation.mdx
  • site/src/content/docs/devices/emission/sound-power-test-rooms.mdx
  • site/src/content/docs/devices/emission/sound-power-turbines.mdx
  • site/src/content/docs/devices/noise-control/duct-path.mdx
  • site/src/content/docs/devices/noise-control/enclosure-cabin-insulation.mdx
  • site/src/content/docs/devices/noise-control/noise-control.mdx
  • site/src/content/docs/devices/noise-control/room-to-room.mdx
  • site/src/content/docs/environment/assessment/environmental-levels.mdx
  • site/src/content/docs/environment/assessment/sel-distribution.mdx
  • site/src/content/docs/environment/assessment/spanish-noise-regulation.mdx
  • site/src/content/docs/environment/propagation/ground-barriers.mdx
  • site/src/content/docs/environment/propagation/software-quality.mdx
  • site/src/content/docs/environment/sources/cnossos-rail-emission.mdx
  • site/src/content/docs/environment/sources/road-surface-pass-by.mdx
  • site/src/content/docs/environment/sources/rolling-stock-noise.mdx
  • site/src/content/docs/environment/sources/wind-turbine-receptor.mdx
  • site/src/content/docs/es/buildings/design/insulation-prediction.mdx
  • site/src/content/docs/es/buildings/design/panel-sound-insulation.mdx
  • site/src/content/docs/es/buildings/insulation/heavy-impact-sources.mdx
  • site/src/content/docs/es/buildings/insulation/insulation-intensity.mdx
  • site/src/content/docs/es/buildings/insulation/lab-application-rules.mdx
  • site/src/content/docs/es/buildings/rooms/open-plan-acoustics.mdx
  • site/src/content/docs/es/buildings/rooms/reporting-and-qualification.mdx
  • site/src/content/docs/es/buildings/rooms/room-acoustics.mdx
  • site/src/content/docs/es/buildings/rooms/room-image-sources.mdx
  • site/src/content/docs/es/buildings/rooms/room-impulse-response.mdx
  • site/src/content/docs/es/buildings/rooms/stage-and-uncertainty.mdx
  • site/src/content/docs/es/devices/broadcast/quasi-peak.mdx
  • site/src/content/docs/es/devices/electroacoustics/induction-loops.mdx
  • site/src/content/docs/es/devices/electroacoustics/loudspeakers.mdx
  • site/src/content/docs/es/devices/electroacoustics/swept-sine-distortion.mdx
  • site/src/content/docs/es/devices/emission/free-field-qualification.mdx
  • site/src/content/docs/es/devices/emission/intensity.mdx
  • site/src/content/docs/es/devices/emission/sound-power-high-frequency.mdx
  • site/src/content/docs/es/devices/emission/sound-power-in-situ.mdx
  • site/src/content/docs/es/devices/emission/sound-power-pressure.mdx
  • site/src/content/docs/es/devices/emission/sound-power-reverberation.mdx
  • site/src/content/docs/es/devices/emission/sound-power-test-rooms.mdx
  • site/src/content/docs/es/devices/emission/sound-power-turbines.mdx
  • site/src/content/docs/es/devices/noise-control/duct-path.mdx
  • site/src/content/docs/es/devices/noise-control/enclosure-cabin-insulation.mdx
  • site/src/content/docs/es/devices/noise-control/noise-control.mdx
  • site/src/content/docs/es/devices/noise-control/room-to-room.mdx
  • site/src/content/docs/es/environment/assessment/environmental-levels.mdx
  • site/src/content/docs/es/environment/assessment/sel-distribution.mdx
  • site/src/content/docs/es/environment/assessment/spanish-noise-regulation.mdx
  • site/src/content/docs/es/environment/propagation/ground-barriers.mdx
  • site/src/content/docs/es/environment/propagation/software-quality.mdx
  • site/src/content/docs/es/environment/sources/cnossos-rail-emission.mdx
  • site/src/content/docs/es/environment/sources/road-surface-pass-by.mdx
  • site/src/content/docs/es/environment/sources/rolling-stock-noise.mdx
  • site/src/content/docs/es/environment/sources/wind-turbine-receptor.mdx
  • site/src/content/docs/es/io/audio-files.mdx
  • site/src/content/docs/es/materials/diffusers/diffusers.mdx
  • site/src/content/docs/es/materials/diffusers/metadiffusers.mdx
  • site/src/content/docs/es/materials/surfaces/road-absorption.mdx
  • site/src/content/docs/es/perception/hearing/hearing-protectors.mdx
  • site/src/content/docs/es/perception/hearing/occupational-exposure.mdx
  • site/src/content/docs/es/perception/speech/speech-transmission.mdx
  • site/src/content/docs/es/reference/errata.md
  • site/src/content/docs/es/signals/metrology/comparison-calibration.mdx
  • site/src/content/docs/es/signals/metrology/free-field-corrections.mdx
  • site/src/content/docs/es/signals/metrology/gum-uncertainty.mdx
  • site/src/content/docs/es/signals/metrology/random-incidence.mdx
  • site/src/content/docs/es/signals/metrology/sound-level-meter-periodic-tests.mdx
  • site/src/content/docs/es/signals/spectra/cepstrum-echoes.mdx
  • site/src/content/docs/es/signals/spectra/spectral-analysis.mdx
  • site/src/content/docs/es/signals/spectra/test-signals.mdx
  • site/src/content/docs/es/simulation/fdtd-simulation.mdx
  • site/src/content/docs/es/start/index.md
  • site/src/content/docs/es/start/upgrading.mdx
  • site/src/content/docs/es/underwater/underwater-solvers.mdx
  • site/src/content/docs/es/vibration/human/multiple-shock-vibration.mdx
  • site/src/content/docs/es/vibration/immission/people-in-buildings.mdx
  • site/src/content/docs/es/vibration/immission/railway-vibration.mdx
  • site/src/content/docs/es/vibration/immission/vibration-prediction.mdx
  • site/src/content/docs/es/vibration/machinery/machine-diagnostics.mdx
  • site/src/content/docs/es/vibration/structural/building-response.mdx
  • site/src/content/docs/es/vibration/structural/impact-mobility.mdx
  • site/src/content/docs/io/audio-files.mdx
  • site/src/content/docs/materials/diffusers/diffusers.mdx
  • site/src/content/docs/materials/diffusers/metadiffusers.mdx
  • site/src/content/docs/materials/surfaces/road-absorption.mdx
  • site/src/content/docs/perception/hearing/hearing-protectors.mdx
  • site/src/content/docs/perception/hearing/occupational-exposure.mdx
  • site/src/content/docs/perception/speech/speech-transmission.mdx
  • site/src/content/docs/reference/api/aeroacoustics/airport-noise.md
  • site/src/content/docs/reference/api/building/aperture-transmission.md
  • site/src/content/docs/reference/api/building/heavy-impact.md
  • site/src/content/docs/reference/api/building/installed-structure-borne.md
  • site/src/content/docs/reference/api/building/insulation.md
  • site/src/content/docs/reference/api/building/intensity-insulation.md
  • site/src/content/docs/reference/api/building/joint-insulation.md
  • site/src/content/docs/reference/api/building/service-equipment.md
  • site/src/content/docs/reference/api/building/simplified-model.md
  • site/src/content/docs/reference/api/building/uncertainty.md
  • site/src/content/docs/reference/api/electroacoustics/headphones.md
  • site/src/content/docs/reference/api/electroacoustics/induction-loop-components.md
  • site/src/content/docs/reference/api/electroacoustics/induction-loop.md
  • site/src/content/docs/reference/api/electroacoustics/program-signal.md
  • site/src/content/docs/reference/api/electroacoustics/sound-reinforcement.md
  • site/src/content/docs/reference/api/electroacoustics/swept-sine.md
  • site/src/content/docs/reference/api/environment/barrier-reflection.md
  • site/src/content/docs/reference/api/environment/cnossos-rail.md
  • site/src/content/docs/reference/api/environment/exposure-distribution.md
  • site/src/content/docs/reference/api/environment/impulsive-sound.md
  • site/src/content/docs/reference/api/environment/rating.md
  • site/src/content/docs/reference/api/environment/rolling-stock-noise.md
  • site/src/content/docs/reference/api/environment/software-quality.md
  • site/src/content/docs/reference/api/environment/spain.md
  • site/src/content/docs/reference/api/environment/statistical-pass-by.md
  • site/src/content/docs/reference/api/environment/wind-turbine-modulation.md
  • site/src/content/docs/reference/api/filters/weighting-compliance.md
  • site/src/content/docs/reference/api/hearing/active-noise-reduction.md
  • site/src/content/docs/reference/api/hearing/audiometry.md
  • site/src/content/docs/reference/api/hearing/earmuff-insertion-loss.md
  • site/src/content/docs/reference/api/hearing/hearing-protectors.md
  • site/src/content/docs/reference/api/hearing/noise-induced-hearing-loss.md
  • site/src/content/docs/reference/api/hearing/occupational-exposure.md
  • site/src/content/docs/reference/api/hearing/real-ear-attenuation.md
  • site/src/content/docs/reference/api/io/io.md
  • site/src/content/docs/reference/api/materials/design.md
  • site/src/content/docs/reference/api/materials/layered.md
  • site/src/content/docs/reference/api/materials/metadiffuser.md
  • site/src/content/docs/reference/api/materials/road-absorption.md
  • site/src/content/docs/reference/api/materials/slow-sound.md
  • site/src/content/docs/reference/api/metrology/comparison-calibration.md
  • site/src/content/docs/reference/api/metrology/conformance.md
  • site/src/content/docs/reference/api/metrology/free-field-corrections.md
  • site/src/content/docs/reference/api/metrology/random-incidence.md
  • site/src/content/docs/reference/api/metrology/reciprocity-calibration.md
  • site/src/content/docs/reference/api/metrology/sound-level-meter.md
  • site/src/content/docs/reference/api/metrology/uncertainty.md
  • site/src/content/docs/reference/api/noise_control/cabin-insulation.md
  • site/src/content/docs/reference/api/noise_control/enclosure-insulation.md
  • site/src/content/docs/reference/api/noise_control/enclosures.md
  • site/src/content/docs/reference/api/noise_control/hvac.md
  • site/src/content/docs/reference/api/noise_control/valves-hydrodynamic.md
  • site/src/content/docs/reference/api/noise_control/valves.md
  • site/src/content/docs/reference/api/power/reference-sound-source.md
  • site/src/content/docs/reference/api/power/sound-power-hard-walled.md
  • site/src/content/docs/reference/api/power/sound-power-high-frequency.md
  • site/src/content/docs/reference/api/power/sound-power-in-situ.md
  • site/src/content/docs/reference/api/power/sound-power-intensity-points.md
  • site/src/content/docs/reference/api/power/sound-power-plant.md
  • site/src/content/docs/reference/api/power/sound-power-reverberation.md
  • site/src/content/docs/reference/api/power/sound-power-special-room.md
  • site/src/content/docs/reference/api/power/sound-power.md
  • site/src/content/docs/reference/api/power/turbine-noise.md
  • site/src/content/docs/reference/api/rooms/acoustics.md
  • site/src/content/docs/reference/api/rooms/auditorium.md
  • site/src/content/docs/reference/api/rooms/image-source.md
  • site/src/content/docs/reference/api/rooms/impulse-response.md
  • site/src/content/docs/reference/api/rooms/open-plan.md
  • site/src/content/docs/reference/api/signals/cepstrum.md
  • site/src/content/docs/reference/api/signals/multitaper.md
  • site/src/content/docs/reference/api/signals/phase.md
  • site/src/content/docs/reference/api/signals/spectra.md
  • site/src/content/docs/reference/api/signals/test-signals.md
  • site/src/content/docs/reference/api/simulation/elastic-fdtd.md
  • site/src/content/docs/reference/api/simulation/fdtd.md
  • site/src/content/docs/reference/api/speech/sti.md
  • site/src/content/docs/reference/api/underwater/numerical.md
  • site/src/content/docs/reference/api/vibration/building-damage.md
  • site/src/content/docs/reference/api/vibration/building-response.md
  • site/src/content/docs/reference/api/vibration/diagnostics.md
  • site/src/content/docs/reference/api/vibration/impact-mobility.md
  • site/src/content/docs/reference/api/vibration/multiple-shock.md
  • site/src/content/docs/reference/api/vibration/people.md
  • site/src/content/docs/reference/api/vibration/prediction.md
  • site/src/content/docs/reference/api/vibration/railway-prediction.md
  • site/src/content/docs/reference/api/vibration/railway.md
  • site/src/content/docs/reference/api/vibration/signal-burst.md
  • site/src/content/docs/reference/api/vibration/vibration-meter.md
  • site/src/content/docs/reference/errata.md
  • site/src/content/docs/signals/metrology/comparison-calibration.mdx
  • site/src/content/docs/signals/metrology/free-field-corrections.mdx
  • site/src/content/docs/signals/metrology/gum-uncertainty.mdx
  • site/src/content/docs/signals/metrology/random-incidence.mdx
  • site/src/content/docs/signals/metrology/sound-level-meter-periodic-tests.mdx
  • site/src/content/docs/signals/spectra/cepstrum-echoes.mdx
  • site/src/content/docs/signals/spectra/spectral-analysis.mdx
  • site/src/content/docs/signals/spectra/test-signals.mdx
  • site/src/content/docs/simulation/fdtd-simulation.mdx
  • site/src/content/docs/start/index.md
  • site/src/content/docs/start/upgrading.mdx
  • site/src/content/docs/underwater/underwater-solvers.mdx
  • site/src/content/docs/vibration/human/multiple-shock-vibration.mdx
  • site/src/content/docs/vibration/immission/people-in-buildings.mdx
  • site/src/content/docs/vibration/immission/railway-vibration.mdx
  • site/src/content/docs/vibration/immission/vibration-prediction.mdx
  • site/src/content/docs/vibration/machinery/machine-diagnostics.mdx
  • site/src/content/docs/vibration/structural/building-response.mdx
  • site/src/content/docs/vibration/structural/impact-mobility.mdx
  • src/phonometry/_internal/validation.py
  • src/phonometry/_plot/audiometry.py
  • src/phonometry/_plot/building.py
  • src/phonometry/_plot/emission.py
  • src/phonometry/_plot/environment.py
  • src/phonometry/_plot/filters.py
  • src/phonometry/_plot/geometry/materials.py
  • src/phonometry/_plot/headphones.py
  • src/phonometry/_plot/hearing.py
  • src/phonometry/_plot/induction_loop.py
  • src/phonometry/_plot/metrology.py
  • src/phonometry/_plot/noise_control.py
  • src/phonometry/_plot/rolling_stock.py
  • src/phonometry/_plot/signals.py
  • src/phonometry/_plot/vibration.py
  • src/phonometry/_plot/wind_turbine_receptor.py
  • src/phonometry/_report/_noise_control_fiche.py
  • src/phonometry/_report/enclosure.py
  • src/phonometry/_report/iso1996_impulse.py
  • src/phonometry/_report/iso1999.py
  • src/phonometry/_report/iso2631_5.py
  • src/phonometry/_report/iso3382.py
  • src/phonometry/_report/iso3382_3.py
  • src/phonometry/_report/iso7626.py
  • src/phonometry/_report/metadata.py
  • src/phonometry/_report/rd1367.py
  • src/phonometry/aircraft/airport_noise.py
  • src/phonometry/broadcast/quasi_peak.py
  • src/phonometry/building/__init__.py
  • src/phonometry/building/measurement/__init__.py
  • src/phonometry/building/measurement/heavy_impact.py
  • src/phonometry/building/measurement/intensity_insulation.py
  • src/phonometry/building/measurement/joint_insulation.py
  • src/phonometry/building/measurement/service_equipment.py
  • src/phonometry/building/measurement/uncertainty.py
  • src/phonometry/building/prediction/__init__.py
  • src/phonometry/building/prediction/aperture_transmission.py
  • src/phonometry/building/prediction/installed_structure_borne.py
  • src/phonometry/building/prediction/simplified_model.py
  • src/phonometry/electroacoustics/__init__.py
  • src/phonometry/electroacoustics/headphones.py
  • src/phonometry/electroacoustics/induction_loop.py
  • src/phonometry/electroacoustics/induction_loop_components.py
  • src/phonometry/electroacoustics/program_signal.py
  • src/phonometry/electroacoustics/sound_reinforcement.py
  • src/phonometry/electroacoustics/swept_sine.py
  • src/phonometry/emission/__init__.py
  • src/phonometry/emission/_shared.py
  • src/phonometry/emission/_sound_power_hard_walled.py
  • src/phonometry/emission/_sound_power_in_situ.py
  • src/phonometry/emission/_sound_power_intensity_points.py
  • src/phonometry/emission/_sound_power_reverberation.py
  • src/phonometry/emission/_sound_power_special_room.py
  • src/phonometry/emission/reference_sound_source.py
  • src/phonometry/emission/sound_power.py
  • src/phonometry/emission/sound_power_high_frequency.py
  • src/phonometry/emission/sound_power_plant.py
  • src/phonometry/emission/turbine_noise.py
  • src/phonometry/environment/__init__.py
  • src/phonometry/environment/assessment/__init__.py
  • src/phonometry/environment/assessment/exposure_distribution.py
  • src/phonometry/environment/assessment/impulsive_sound.py
  • src/phonometry/environment/assessment/rating.py
  • src/phonometry/environment/assessment/spain.py
  • src/phonometry/environment/assessment/wind_turbine_modulation.py
  • src/phonometry/environment/propagation/barrier_reflection.py
  • src/phonometry/environment/propagation/software_quality.py
  • src/phonometry/environment/sources/__init__.py
  • src/phonometry/environment/sources/_statistical_pass_by.py
  • src/phonometry/environment/sources/cnossos_rail.py
  • src/phonometry/environment/sources/rolling_stock_noise.py
  • src/phonometry/filters/_weighting_design.py
  • src/phonometry/filters/compliance.py
  • src/phonometry/filters/periodic_tests.py
  • src/phonometry/filters/weighting_compliance.py
  • src/phonometry/hearing/__init__.py
  • src/phonometry/hearing/_earmuff_insertion_loss.py
  • src/phonometry/hearing/_real_ear_attenuation.py
  • src/phonometry/hearing/active_noise_reduction.py
  • src/phonometry/hearing/audiometry.py
  • src/phonometry/hearing/hearing_protectors.py
  • src/phonometry/hearing/noise_induced_hearing_loss.py
  • src/phonometry/hearing/occupational_exposure.py
  • src/phonometry/io/_backends.py
  • src/phonometry/io/_blocks.py
  • src/phonometry/io/_sidecar.py
  • src/phonometry/io/_wav.py
  • src/phonometry/materials/__init__.py
  • src/phonometry/materials/absorbers/layered.py
  • src/phonometry/materials/absorbers/slow_sound.py
  • src/phonometry/materials/diffusers/design.py
  • src/phonometry/materials/diffusers/metadiffuser.py
  • src/phonometry/materials/surfaces/__init__.py
  • src/phonometry/materials/surfaces/road_absorption.py
  • src/phonometry/metrology/__init__.py
  • src/phonometry/metrology/comparison_calibration.py
  • src/phonometry/metrology/conformance.py
  • src/phonometry/metrology/free_field_corrections.py
  • src/phonometry/metrology/random_incidence.py
  • src/phonometry/metrology/reciprocity_calibration.py
  • src/phonometry/metrology/sound_level_meter.py
  • src/phonometry/metrology/uncertainty.py
  • src/phonometry/noise_control/__init__.py
  • src/phonometry/noise_control/_cabin_insulation.py
  • src/phonometry/noise_control/enclosure_insulation.py
  • src/phonometry/noise_control/enclosures.py
  • src/phonometry/noise_control/hvac.py
  • src/phonometry/noise_control/valves.py
  • src/phonometry/noise_control/valves_hydrodynamic.py
  • src/phonometry/room/__init__.py
  • src/phonometry/room/_impulse_response.py
  • src/phonometry/room/acoustics.py
  • src/phonometry/room/auditorium.py
  • src/phonometry/room/image_source.py
  • src/phonometry/room/open_plan.py
  • src/phonometry/signals/__init__.py
  • src/phonometry/signals/_cepstrum.py
  • src/phonometry/signals/multitaper.py
  • src/phonometry/signals/phase.py
  • src/phonometry/signals/spectra.py
  • src/phonometry/signals/test_signals.py
  • src/phonometry/simulation/elastic_fdtd.py
  • src/phonometry/simulation/fdtd.py
  • src/phonometry/speech/sti.py
  • src/phonometry/underwater/propagation/numerical.py
  • src/phonometry/vibration/__init__.py
  • src/phonometry/vibration/human/multiple_shock.py
  • src/phonometry/vibration/human/signal_burst.py
  • src/phonometry/vibration/immission/__init__.py
  • src/phonometry/vibration/immission/people.py
  • src/phonometry/vibration/immission/prediction.py
  • src/phonometry/vibration/immission/railway.py
  • src/phonometry/vibration/immission/railway_prediction.py
  • src/phonometry/vibration/immission/vibration_meter.py
  • src/phonometry/vibration/machinery/diagnostics.py
  • src/phonometry/vibration/structural/_impact_mobility.py
  • src/phonometry/vibration/structural/building_damage.py
  • src/phonometry/vibration/structural/building_response.py
  • tests/building/measurement/test_building_uncertainty.py
  • tests/building/measurement/test_heavy_impact.py
  • tests/building/measurement/test_intensity_insulation.py
  • tests/building/measurement/test_joint_insulation.py
  • tests/building/measurement/test_service_equipment.py
  • tests/building/prediction/test_aperture_transmission.py
  • tests/building/prediction/test_installed_structure_borne_tables.py
  • tests/building/prediction/test_simplified_model.py
  • tests/building/test_building_plots.py
  • tests/building/test_building_result_plots.py
  • tests/diffuser_prediction.py
  • tests/electroacoustics/test_electroacoustics_frequency_axis_language.py
  • tests/electroacoustics/test_electroacoustics_plot_i18n.py
  • tests/electroacoustics/test_electroacoustics_signal_overloads.py
  • tests/electroacoustics/test_headphones.py
  • tests/electroacoustics/test_induction_loop.py
  • tests/electroacoustics/test_induction_loop_components.py
  • tests/electroacoustics/test_loudspeaker.py
  • tests/electroacoustics/test_sound_reinforcement.py
  • tests/electroacoustics/test_swept_sine.py
  • tests/emission/test_iso3744_report.py
  • tests/emission/test_reference_sound_source.py
  • tests/emission/test_sound_energy.py
  • tests/emission/test_sound_power.py
  • tests/emission/test_sound_power_hard_walled.py
  • tests/emission/test_sound_power_high_frequency.py
  • tests/emission/test_sound_power_in_situ.py
  • tests/emission/test_sound_power_intensity_points.py
  • tests/emission/test_sound_power_special_room.py
  • tests/emission/test_turbine_noise.py
  • tests/environment/assessment/test_dublin_dcc_oracle.py
  • tests/environment/assessment/test_exposure_distribution.py
  • tests/environment/assessment/test_impulse_prominence.py
  • tests/environment/assessment/test_impulse_prominence_report.py
  • tests/environment/assessment/test_rating.py
  • tests/environment/assessment/test_spain.py
  • tests/environment/assessment/test_wind_turbine_modulation.py
  • tests/environment/propagation/test_software_quality.py
  • tests/environment/sources/test_cnossos_rail.py
  • tests/environment/sources/test_rolling_stock_noise.py
  • tests/filters/test_periodic_tests.py
  • tests/filters/test_weighting_class_verifier.py
  • tests/filters/test_weighting_design.py
  • tests/hearing/test_active_noise_reduction.py
  • tests/hearing/test_audiometry.py
  • tests/hearing/test_earmuff_insertion_loss.py
  • tests/hearing/test_hearing_protector_plots.py
  • tests/hearing/test_hearing_protectors.py
  • tests/hearing/test_noise_induced_hearing_loss.py
  • tests/hearing/test_occupational_exposure.py
  • tests/hearing/test_real_ear_attenuation.py
  • tests/io/test_io_convert.py
  • tests/io/test_io_read.py
  • tests/io/test_io_real_bwf.py
  • tests/io/test_io_real_rf64.py
  • tests/io/test_io_write.py
  • tests/materials/absorbers/test_porous.py
  • tests/materials/absorbers/test_slow_sound.py
  • tests/materials/diffusers/test_diffuser_design.py
  • tests/materials/diffusers/test_metadiffuser.py
  • tests/materials/surfaces/test_road_absorption.py
  • tests/materials/test_geometry_plots.py
  • tests/metrology/test_comparison_calibration.py
  • tests/metrology/test_free_field_corrections.py
  • tests/metrology/test_metrology_plot_i18n.py
  • tests/metrology/test_metrology_result_plots.py
  • tests/metrology/test_random_incidence.py
  • tests/metrology/test_reciprocity_coupler.py
  • tests/metrology/test_sound_level_meter.py
  • tests/metrology/test_uncertainty.py
  • tests/noise_control/test_cabin_insulation.py
  • tests/noise_control/test_enclosure_report.py
  • tests/noise_control/test_enclosures.py
  • tests/noise_control/test_hvac_long.py
  • tests/noise_control/test_noise_control_frequency_axis_language.py
  • tests/noise_control/test_room_to_room_norton.py
  • tests/result_factories.py
  • tests/room/test_auditorium_reporting.py
  • tests/room/test_auditorium_stage.py
  • tests/room/test_iso3382_3_report.py
  • tests/room/test_iso3382_report.py
  • tests/room/test_shaped_sweep.py
  • tests/signals/test_cepstrum.py
  • tests/signals/test_multitaper.py
  • tests/signals/test_phase.py
  • tests/signals/test_signal_toolbox.py
  • tests/signals/test_signals.py
  • tests/signals/test_signals_plot_i18n.py
  • tests/signals/test_spectra.py
  • tests/signals/test_xl2_passby_oracle.py
  • tests/simulation/test_fdtd.py
  • tests/simulation/test_fdtd_ntff.py
  • tests/speech/test_speech_signal_overloads.py
  • tests/speech/test_sti.py
  • tests/test_boundary_verdicts.py
  • tests/test_check_identifier_spelling.py
  • tests/test_check_parameter_units.py
  • tests/test_check_raises_blocks.py
  • tests/test_fdtd2d.py
  • tests/test_internal_validation.py
  • tests/test_mutually_required_groups.py
  • tests/test_owns_arrays.py
  • tests/test_printed_limits.py
  • tests/test_public_vocabulary.py
  • tests/test_removed_names.py
  • tests/test_result_plots.py
  • tests/test_scalar_guards.py
  • tests/underwater/propagation/test_eigenrays.py
  • tests/vibration/human/test_multiple_shock_report.py
  • tests/vibration/human/test_multiple_shock_vibration.py
  • tests/vibration/human/test_signal_burst.py
  • tests/vibration/immission/test_people.py
  • tests/vibration/immission/test_prediction.py
  • tests/vibration/immission/test_railway.py
  • tests/vibration/immission/test_railway_plot.py
  • tests/vibration/immission/test_railway_prediction.py
  • tests/vibration/immission/test_vibration_meter.py
  • tests/vibration/machinery/test_diagnostics.py
  • tests/vibration/structural/test_building_damage.py
  • tests/vibration/structural/test_building_response.py
  • tests/vibration/structural/test_impact_mobility.py
  • tests/vibration/test_vibration_plot_i18n.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@jmrplens
jmrplens added this pull request to stack #984 October 17, 2026 17:11
@jmrplens jmrplens changed the title fix/counts bounds and enclosure result A count says it is a count, a confidence bound says it is one, and the enclosure result says what it holds Oct 17, 2026
@github-actions github-actions Bot added documentation Improvements or additions to documentation conformance Standard clause coverage, reference values or errata errata Confirmed defect in a published standard, tracked in docs/ERRATA.md api Public API surface, naming and deprecations figures Generated plots, diagrams and animations reports Accredited-format .report() fiches and their rendering site Documentation website i18n English and Spanish translations area: aircraft Aircraft and rotorcraft noise area: broadcast Programme loudness and broadcast levels area: building Sound insulation and building acoustics area: electroacoustics Transducers, arrays and electroacoustic devices area: emission Sound power and source emission area: environment Outdoor propagation, environmental sources and noise assessment area: hearing Audiometric thresholds, hearing loss and noise exposure area: materials Absorption, impedance and material properties area: metrology Calibration, uncertainty and measurement quality area: noise control Silencers, barriers and noise control treatments area: room Room acoustics and reverberation area: simulation FDTD and other numerical solvers area: underwater Underwater acoustics and propagation area: vibration Human vibration and structure-borne sound area: core Shared internals and cross-cutting code every domain depends on area: filters Octave filter banks, weightings and instrument class verification area: signals Levels, spectra, generators and general signal analysis area: speech Speech intelligibility: STI, SII and STOI labels Oct 17, 2026
@codecov

codecov Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.86%. Comparing base (0bc8fbe) to head (818b515).

Additional details and impacted files
@@                       Coverage Diff                        @@
##           fix/no-module-behind-a-function     #974   +/-   ##
================================================================
  Coverage                            96.86%   96.86%           
================================================================
  Files                                  444      444           
  Lines                                89874    89874           
================================================================
  Hits                                 87058    87058           
  Misses                                2816     2816           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Numerical conformance

All 1893 conformance checks pass, across 111 domains and 523 standards

1893/1893 checks pass across 111 domains and 523 standards (227 normative designations, 125 further published sources).

Used in the tables below is how much of that clause's published tolerance the deviation consumes: 100 % sits exactly on the limit, 5 % uses a twentieth of the allowance, and a dash means the clause states no two-sided tolerance for the quantity, so there is no budget to spend. It is reported and never used to decide a verdict, which is settled at full precision before any rounding.

Renamed (3)

Standard Base quantity Head quantity
ISO 8297:1994 Table 2 Background correction at differences of 6 to 10 dB and at 12 dB, read through plant_background_correction_db Background correction at differences of 6 to 10 dB and at 12 dB, read through plant_background_correction
Wenz wind noise (rule of fives) Wind spectrum level at 1 kHz, 5 kn (canonical anchor), dB re 1 µPa²/Hz Wind spectrum level at 1 kHz, 5 kt (canonical anchor), dB re 1 µPa²/Hz
JOMOPANS-ECHO ship source level Bulker V=13.5 kn L=211 m band level at 1 kHz (File S1 oracle), dB re 1 µPa m Bulker V=13.5 kt L=211 m band level at 1 kHz (File S1 oracle), dB re 1 µPa m

Closest to their published limit (top 5)

The rows with the least room left, so the ones a change is most likely to push over.

Standard Quantity Deviation Used
ISO/TR 17534-3:2015 Table 3 Ground-projected path length dp, m 0.005 m 100 %
DIN 4150-2:1999-06 Annex C, Example 5 KB_FTr with hammer b) in the rest hours, Formula (5) -0.005 100 %
DIN 4150-2:1999-06 Annex C, Example 8 KB_FTm over the record with the passage maxima alone -0.0005 100 %
E DIN 4150-2:2023-08 Annex B, Table B.1 KB_FTm,Zug of the metro north by Formula (5) -0.0005 100 %
Jarvis (1996) NPL CIRA(EXT) 010 Appendix B, folio 26 Volume of the coupler of the example, v = pi r^2 L -0.00000000005 m³ 100 %

Pass Tests & coverage: 256545 tests, 0 failures (all green)
Python Version Tests Failures Coverage Status
macos-latest-3.12 28505 0 96.9% Pass Passed
macos-latest-3.13 28505 0 96.9% Pass Passed
macos-latest-3.14 28505 0 96.9% Pass Passed
ubuntu-latest-3.12 28505 0 96.9% Pass Passed
ubuntu-latest-3.13 28505 0 96.9% Pass Passed
ubuntu-latest-3.14 28505 0 96.9% Pass Passed
windows-latest-3.12 28505 0 96.9% Pass Passed
windows-latest-3.13 28505 0 96.9% Pass Passed
windows-latest-3.14 28505 0 96.9% Pass Passed

Full report at this commit: docs/CONFORMANCE.md · docs/conformance.json · full CI artifacts

…e enclosure result says what it holds

A parameter, a field or a property that holds a whole number of things is `n_<plural>` across the library, the spelling `n_samples`, `n_points` and `n_harmonics` already had, and a limit on one is `min_n_` or `max_n_`. `events=3` could be read as the events themselves; `n_events=3` cannot. The sound energy functions of `emission` take `n_events` and their `SoundEnergyResult` and `ReverberationSoundEnergyResult` hold it; `measurement_positions`, `sound_power_pressure` and `sound_energy_pressure` take `n_reflecting_planes`; the ISO 9614-1 results hold `n_positions`, `n_subset_positions` and `n_additional_positions`, and the ISO 3743 results `n_microphone_positions` and `n_source_positions`. The induction loop functions take `n_turns`, the feedback functions `n_open_microphones`, `tone_burst` and the saw-tooth burst `n_cycles` and `n_repetitions`, the diffusers `n_repetitions`, the absorbers `n_quadrature_points` and `n_sum_terms`, `monte_carlo` `n_trials`, the silencer and valve functions `n_passages` and `n_stages`, the FDTD solvers `run(n_steps)`, the fault frequencies `n_sidebands`, `n_poles`, `n_rotor_bars`, `n_slot_harmonics` and `n_lobe_orders`, the building models `n_stories`, and `eigenrays` `max_n_arrivals`; `check_coherence` takes `min_n_records`. The hearing protector results hold `n_subjects`, the CNOSSOS-EU rolling stock `n_axles`, the calibrations `n_determinations` and `n_microphones`, and `ReportMetadata` `n_source_positions` and `n_receiver_positions`. `io.AudioFileInfo` reads `n_channels` and `n_samples`, the samples per channel, as `Signal` does.
@jmrplens
jmrplens force-pushed the fix/counts-bounds-and-enclosure-result branch from afe3563 to 818b515 Compare October 20, 2026 01:45
@greptile-apps

greptile-apps Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[Medium impact] Renames parameters and functions across the codebase for consistency.

The PR appears safe to merge, with a non-blocking cleanup needed in count descriptions.

Findings

  1. P2 Count descriptions lose their meaning ▶

Reviews (1) · Last reviewed commit: "A count says it is a count, a confidence..." · Reviewed by Greptile

Comment on lines +410 to 411
:param n_planes: The number of n_planes :math:`n` the measurements are made
in (Default: 2, the X-Y and X-Z planes of Annex A).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Count descriptions lose their meaning

The rename also replaces ordinary English nouns. adjustment_factors now describes “measurements in n_planes n_planes” and “the number of n_planes.” Keep n_planes as the parameter name, but restore “planes” in the descriptions. The same replacement affects “Biquad n_sections” and “Number of n_axles per vehicle.” These descriptions reach the published API reference and guides, making them harder to understand.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in #992, commit e3449b0: planes, sections and axles are back in the prose, the API page is regenerated, and a test in tests/test_public_vocabulary.py fails on an n_ name written where its sentence wants the noun. It found exactly these five sites.

@sonarqubecloud

Copy link
Copy Markdown

@jmrplens
jmrplens merged commit ca6607a into main Oct 21, 2026
59 checks passed
@jmrplens
jmrplens deleted the fix/counts-bounds-and-enclosure-result branch October 21, 2026 12:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api Public API surface, naming and deprecations area: aircraft Aircraft and rotorcraft noise area: broadcast Programme loudness and broadcast levels area: building Sound insulation and building acoustics area: core Shared internals and cross-cutting code every domain depends on area: electroacoustics Transducers, arrays and electroacoustic devices area: emission Sound power and source emission area: environment Outdoor propagation, environmental sources and noise assessment area: filters Octave filter banks, weightings and instrument class verification area: hearing Audiometric thresholds, hearing loss and noise exposure area: materials Absorption, impedance and material properties area: metrology Calibration, uncertainty and measurement quality area: noise control Silencers, barriers and noise control treatments area: room Room acoustics and reverberation area: signals Levels, spectra, generators and general signal analysis area: simulation FDTD and other numerical solvers area: speech Speech intelligibility: STI, SII and STOI area: underwater Underwater acoustics and propagation area: vibration Human vibration and structure-borne sound conformance Standard clause coverage, reference values or errata documentation Improvements or additions to documentation errata Confirmed defect in a published standard, tracked in docs/ERRATA.md figures Generated plots, diagrams and animations i18n English and Spanish translations reports Accredited-format .report() fiches and their rendering site Documentation website

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant