Skip to content

A level or a level difference carries no unit suffix - #975

Merged
jmrplens merged 1 commit into
fix/counts-bounds-and-enclosure-resultfrom
fix/levels-carry-no-db-suffix
Oct 21, 2026
Merged

jmrplens merged 1 commit into
fix/counts-bounds-and-enclosure-resultfrom
fix/levels-carry-no-db-suffix

Conversation

@jmrplens

@jmrplens jmrplens commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

A level and a level difference are in decibels by definition, yet the public names spelled them both ways: about 400 names ended in _db (insertion_loss_db, band_levels_db, sound_reduction_index_db) beside as many that did not, often the same concept in two modules (background_levels_db against background_levels, insertion_loss_db against insertion_loss, c_db on a joint rating against c on every other ISO 717 rating, tonal_adjustment_db on the wind turbine rating level against the bare adjustment of the tonal and impulsive assessments). A caller had to remember which module had chosen which.

What changes

The rule is the head noun. A public name whose head noun is a level (level, levels, spl) or a level difference (a loss, an insulation, an isolation, a reduction, a rejection, a difference, an improvement, a single-value attenuation, a correction, an adjustment, an index, an emergence, the spectrum adaptation term of ISO 717, or a shift, an increase, a decrease or an excess of a level the name names), or the printed symbol of one, as its first word or as its head (l_n, delta_lw; in building r_s_w, d_2m_nt, c, ctr and the vibration reduction index Kij, k_ij or kij; in emission the corrections C1 to C3 and K1 to K3), carries no _db, whatever it is: a parameter, a field, a property, a method or a constant. The head noun is the last noun once the words that qualify it from behind are set aside (a band _1000, a weighting _a, _before/_after, _with/_without, _max/_min), or the noun before a phrase that follows it (band_levels_at_characteristic). A name whose head noun does not say decibel keeps the suffix: a tolerance, a margin, a limit not itself named a level, an uncertainty, a deviation, a step, a slope (_db_per_decade), a rate (_db_per_m), a ratio (signal_to_noise_ratio_db), a statistic of a level (sigma_level_db), a difference of another quantity (diffuse_pressure_difference_db, where "pressure" would read as pascals), and a shift or a drop that names no level (allowed_threshold_shift_db).

Every hit moved with every caller: src, _plot and _report, the tests and their fixtures, the conformance domains, the figure and report scripts, api_taxonomy.py, the curated API table, the errata, the guides in English and Spanish and their docs/ mirrors. The banded catalogue rows move their columns too (transmission_loss_500, sound_reduction_index_1000, impact_improvement_125), in the JSON data files, the column specs of generate_catalogue_data.py, the site's catalogue data and schema and the published-catalogue baseline, and the methods that read a band off them follow (TransmissionLossSpectrum.transmission_loss(500)); LoopField.level(component) and TimeSelectiveResponse.level_at(t) lose theirs as well. The corrections written as their printed symbols follow: the cap on the local environmental correction K3 of ISO 11202 is emission.MAX_K3 and its grade 2 bound GRADE_2_MAX_K3, the floor on the multi-junction Kij of EN 12354-5 is building.MIN_MULTI_JUNCTION_KIJ (beside the k_ij and kij_min the building prediction already wrote bare), and the C1, C2 and C3 of an ISO 6926 calibration are ReferenceSourceCalibration.c1, c2 and c3, with reference_source_calibration(c2=...) for the manufacturer's C2, as every other sound power result of emission already wrote them. The emergence of IEC TS 61400-11-2 Annex J, the ambient level less the residual one (Equation (J.1)), is SoundEmergence.emergence, so the record now reads ambient_levels, background_levels and emergence alike, as do TurbineSoundLevels and MicrophoneTraverse. LaboratoryJointInsulationResult.r_s_prime holds R_s', primed as the tree writes R' (r_prime), because r_s_measured reads as a verdict flag to the stored-verdict test.

An adjustment is a quantity added to a level (ISO 1996-1:2016, 3.3.1, PDF page 10, printed page 4), so it is a level difference like a correction: wind_turbine_rating_level takes tonal_adjustment, amplitude_modulation_adjustment and impulsive_adjustment, WindTurbineRatingLevel holds adjustments, long_term_sel takes rating_adjustment, and AdjustmentValue.adjustment and sensitivity_adjustment of the free-field corrections lose their suffix, matching the adjustment the tonal and impulsive assessments already wrote. The isolation of an earmuff test fixture (FixtureIsolationCheck.isolation, the open level less the level under the cup), the free-field rejection of an REAT sound field (REATSoundFieldCheck.free_field_rejection, with the free_field_rejection= parameter of allowable_field_variation and check_reat_sound_field), the rise and fall of a quadrature phase error (QuadraturePhaseError.level_increase, level_decrease), the shift of an SEL distribution (SELDistribution.level_shift) and the excess levels of a spatial decay (SpatialDecayResult.level_excess and mean_level_excess, the names of the functions that compute them) follow. None of these shipped in 3.3.0 or 4.0.0rc1.

The E DIN 45672-3 transfer functions return level differences, which is what the draft calls them: Annex A is titled "Pegeldifferenzspektren der Baugrund-Fundament-Decke-Übertragung" and Table A.1 prints "Pegeldifferenzspektren ΔL_v,DB(f_Tn) in dB" (E DIN 45672-3:2023-02, PDF page 24, printed page 24). They are named for it: ground_to_floor_level_difference, ground_to_foundation_level_difference, foundation_to_floor_level_difference, with their tables GROUND_TO_FLOOR_LEVEL_DIFFERENCES, GROUND_TO_FOUNDATION_LEVEL_DIFFERENCES and FOUNDATION_TO_FLOOR_LEVEL_DIFFERENCES. "Transfer" stays for the dimensionless ratios of DIN 4150-1.

A notebook table read the unit of a field from its suffix, so a renamed level would have lost its dB. It now reads the same head noun, beside a real number only: a bare level or level difference that holds a number shows dB, which also gives the 230 bare level fields that showed no unit before (IntensityResult.pressure_level, SonarEquationResult.propagation_loss, ReductionImprovementRating.delta_rw) theirs, and the symbols show dB where their package prints them (the C1 and C2 of the sound power results, VibrationReductionResult.k_ij, FacadePredictionResult.element_r). A truth value, a text, a complex factor or a record under such a name shows no unit: OperatingCondition.max_level is a flag, RegulationLimits.index a label, SphericalGroundResult.boundary_loss the complex factor F(w), FreeFieldArrangementCheck.air_attenuation a record. A loudness level shows phon, which is its unit (ISO 532-1:2017, 3.16, Note 1), on ZwickerLoudness, MooreGlasbergLoudness and MooreGlasbergTimeVaryingLoudness. The lengths l1 and l2 of ASTM E2611 are metres in materials, for the table and for the unit guard. The numbers the head noun would misread say their own unit in _display_units: the reflection index and gain corrections of EN 1793-5 (ratios of energies; Table 1 prints no unit for RI_j and "-" for C_gain,k), the A_eta of IEC 60534-8-3 named efficiency_correction (dimensionless in Clause 4, used as 10**efficiency_correction), the bias factor kΔr/sin(kΔr) of IntensityResult, the mean of an envelope spectrum, a path difference in metres, an end-correction factor, a just-noticeable difference in the unit of its quantity, the delta-IIC class difference and two sample indices.

Kept on purpose, each keyed by location with its reason in LEVEL_SUFFIX_EXEMPT: CouplerTransferImpedance.capillary_correction_db, the level of the complex factor the record holds as capillary_correction; and InsertionLossUncertaintyBudget.open_level_db and occluded_level_db, standard uncertainties named for the input of ISO 4869-3 Table B.1 they belong to. The maximum and minimum levels lose it under their max_/min_ spelling as well: the statistical pass-by, the reference sound source calibration and check_measurement_disturbance take max_levels, FieldStrengthReading and PassByMeasurement hold max_level, plant_steady_reading takes max_level and min_level, check_varying_background takes background_max_level, and TrainPassage holds band_max_levels.

What breaks

Every renamed name is gone under its old spelling, with no alias. The names that shipped in 3.3.0 or 4.0.0rc1 (the microphone and loudspeaker characteristics, QuasiPeakResult.level, the window metrics, the synchronous average and the resampler, the ISO 11200-series emission sound pressure level and its corrections (K1, and the K3 of ISO 11202 and ISO 11204), MODAL_FILTER_ATTENUATION, MAX_K3 and GRADE_2_MAX_K3, airborne_insulation_rating) are in a new section of the migration guide, in its three copies; the rest are newer than rc1, and the CHANGELOG entries written since rc1 now name them as they are. The rc1 MINIMUM_MULTI_JUNCTION_KIJ row maps straight to MIN_MULTI_JUNCTION_KIJ, and the CHANGELOG entry on constants that carry their unit counts sixty-four of them and says that _DB closes a constant in decibels only when its name does not already name a level or a level difference. In a notebook table a loudness level now shows phon, where 4.0.0rc1 showed no unit. The counts at the top of the guide do not move: no name the 3.3.0 top level exported changes. CONTRIBUTING has a Levels row with the criterion, and its notebook paragraph says when the table shows dB, phon or nothing.

How it was verified

No number moves. make conformance leaves docs/CONFORMANCE.md byte-identical (1893/1893 checks pass across 111 domains), every figure the renamed code draws regenerates byte-identical, and the full suite passes on the remote gate.

Every cell of Tables A.1 to A.6 of E DIN 45672-3 is now checked against a transcription of the draft kept in tests/reference_data/din45672_3_annex_a.py, apart from the library's tables; Tables A.3 and A.4 were read again on PDF page 26, printed page 26. Changing the first cell of the 12,5 Hz concrete column from -1,48 to -1,58 fails test_every_cell_of_the_ground_to_floor_tables_is_the_printed_one[concrete-table0]; adding 3 dB to the isolation of verify_fixture_isolation fails test_the_fixture_isolation_is_the_open_level_less_the_cup_level, whose 62 dB band sits between the 55 dB and 65 dB requirements. Both were open before this change.

tests/test_record_display.py walks every public record and fails on a flag, a text, a complex value or a record field the table would label dB, and on any _display_units entry that is not a field, that the name would not need, or that the table does not show. Each half fails when its code is taken out:

== the number gate removed
FAILED tests/test_record_display.py::test_a_truth_value_or_a_text_shows_no_unit_whatever_its_name
FAILED tests/test_record_display.py::test_no_public_field_that_holds_no_number_is_shown_in_a_unit
2 failed, 302 passed in 7.56s
== DirectSoundSubtraction's peak_index override deleted
FAILED tests/test_record_display.py::test_a_number_its_name_misreads_shows_its_own_unit[DirectSoundSubtraction.peak_index]
1 failed, 303 passed in 6.58s
== the phon of a loudness level removed
FAILED tests/test_record_display.py::test_a_loudness_level_is_in_phon[loudness_level]
FAILED tests/test_record_display.py::test_a_loudness_level_is_in_phon[loudness_level_max]
FAILED tests/test_record_display.py::test_a_loudness_level_is_in_phon[short_term_loudness_level]
FAILED tests/test_record_display.py::test_the_table_shows_a_loudness_level_in_phon
4 failed, 300 passed in 6.56s
== the materials scope of l1 and l2 removed
FAILED tests/test_record_display.py::test_an_ell_is_a_length_in_materials
1 failed, 303 passed in 6.51s
== unchanged
304 passed in 6.62s

The check that a published field type is published too now reads a published record instance (DEFAULT_EXPANDER) through its class, since an instance carries no module globals and the _display_units annotation of Expander could not resolve from it. Two error-message checks now quote the message they pin ("'r_s' must be the correction", "'level' must be finite"), so an error about r_s_prime or r_s_max no longer satisfies the first.

The guard

scripts/check_parameter_units.py gains a rule: a public name whose head noun says decibel and that ends in _db (or carries it before a qualifier, level_db_at) is reported with the name it reads as without it. It reads every name a caller writes, the parameters, fields, properties, methods, functions and constants, through the same walk of the imported package as the other unit rules. A printed symbol is read as the first word of a name or as its head, in the package where it says decibel (max_k3 in emission, min_multi_junction_kij in building; a c1 in underwater is a sound speed and a c_db there the gain of a weighting, and an l1 in materials a length). A change noun (shift, increase, decrease, excess, drop, rise, change, increment) says decibel only after a level word, so level_shift_db is reported and allowed_threshold_shift_db or drop_db is not; an adjustment, an isolation or a rejection reads like a loss, so temperature_adjustment_db keeps its unit. The unit rule beside it reads the head noun too, so a bare insertion_loss or pressure_level_difference declares its unit, while a difference noun after another quantity does not: a bare phase_difference, pressure_loss or plateau_height holding decibels still fails as a quantity without its unit, as it did before. tests/test_check_parameter_units.py pins both halves (names that carry no _db, names that keep it, nouns that declare the decibel and nouns that do not, a level put back with its _db, a decibel value put back bare under another noun, a stale exemption, and the notebook table reading levels the way the rule does), and tests/test_removed_names.py pins a sample of the shipped spellings as gone.

Red on the base, the guard of this branch run against fix/counts-bounds-and-enclosure-result (818b515), exit 1:

::error::a level or a level difference carries a unit suffix
675 name(s) say decibel twice, by the head noun and by _db:
  NPDAtmosphereIncrement.reference_attenuation_db -> reference_attenuation  <- src/phonometry/aircraft/npd_atmosphere.py:171
  NPDAtmosphereIncrement.specified_attenuation_db -> specified_attenuation  <- src/phonometry/aircraft/npd_atmosphere.py:171
  QuasiPeakResult.level_db -> level  <- src/phonometry/broadcast/quasi_peak.py:454
  TransmissionLossSpectrum.transmission_loss_1000_db -> transmission_loss_1000  <- src/phonometry/building/catalogue.py:123
  ...
  plant_steady_reading.max_level_db -> max_level  <- src/phonometry/emission/sound_power_plant.py:634
  ...
  GRADE_2_MAX_K3_DB -> GRADE_2_MAX_K3  <- src/phonometry/emission/workstation.py:163
  MAX_K3_DB -> MAX_K3  <- src/phonometry/emission/workstation.py:167
  ...
  SELDistribution.level_shift_db -> level_shift  <- src/phonometry/environment/assessment/exposure_distribution.py:403
  long_term_sel.rating_adjustment_db -> rating_adjustment  <- src/phonometry/environment/assessment/exposure_distribution.py:285
  SoundEmergence.emergence_db -> emergence  <- src/phonometry/environment/assessment/wind_turbine_receptor.py:1733
  wind_turbine_rating_level.tonal_adjustment_db -> tonal_adjustment  <- src/phonometry/environment/assessment/wind_turbine_receptor.py:1873
  ...
  FixtureIsolationCheck.isolation_db -> isolation  <- src/phonometry/hearing/_earmuff_insertion_loss.py:929
  REATSoundFieldCheck.free_field_rejection_db -> free_field_rejection  <- src/phonometry/hearing/_real_ear_attenuation.py:766
  ...
exit=1

Green on the branch: make parameter-units prints "Every public parameter and constant under the rule names its unit, in the one spelling the tree uses, and asks for it by name; every public function is named for what it returns." and exits 0.

The guard's tests, red against the base tree and green on the branch:

FAILED tests/test_check_parameter_units.py::test_every_public_function_is_named_for_what_it_returns
FAILED tests/test_check_parameter_units.py::test_a_level_function_named_with_its_decibels_put_back_is_reported
FAILED tests/test_check_parameter_units.py::test_a_method_named_with_its_decibels_is_reported_and_a_property_is_not
FAILED tests/test_check_parameter_units.py::test_a_method_inherited_from_a_base_no_module_exports_is_reported
FAILED tests/test_check_parameter_units.py::test_the_tree_holds_every_closing_rule
FAILED tests/test_check_parameter_units.py::test_no_level_carries_a_unit_suffix
FAILED tests/test_check_parameter_units.py::test_a_level_named_with_its_decibels_put_back_is_reported
FAILED tests/test_check_parameter_units.py::test_the_notebook_table_reads_a_level_the_way_the_rule_does
8 failed, 223 passed in 22.36s
--- the same file against the branch:
231 passed in 24.42s

The second half, a decibel value under another head noun or a change of no named level, proved by a guard that reads every difference and change noun as a decibel (a phase difference, a pressure loss, a temperature reduction or adjustment, a threshold shift, a bare drop): the tests that hold it fail there and pass with the real guard.

FAILED tests/test_check_parameter_units.py::test_a_name_whose_head_noun_does_not_say_decibel_keeps_db[diffuse_pressure_difference_db-]
FAILED tests/test_check_parameter_units.py::test_a_name_whose_head_noun_does_not_say_decibel_keeps_db[phase_difference_db-]
FAILED tests/test_check_parameter_units.py::test_a_name_whose_head_noun_does_not_say_decibel_keeps_db[shift_db-]
FAILED tests/test_check_parameter_units.py::test_a_name_whose_head_noun_does_not_say_decibel_keeps_db[allowed_threshold_shift_db-]
FAILED tests/test_check_parameter_units.py::test_a_name_whose_head_noun_does_not_say_decibel_keeps_db[drop_db-]
FAILED tests/test_check_parameter_units.py::test_a_name_whose_head_noun_does_not_say_decibel_keeps_db[sensitivity_change_db-]
FAILED tests/test_check_parameter_units.py::test_a_name_whose_head_noun_does_not_say_decibel_keeps_db[temperature_adjustment_db-]
FAILED tests/test_check_parameter_units.py::test_another_head_noun_declares_nothing[phase_difference]
FAILED tests/test_check_parameter_units.py::test_another_head_noun_declares_nothing[pressure_loss]
FAILED tests/test_check_parameter_units.py::test_another_head_noun_declares_nothing[temperature_reduction]
FAILED tests/test_check_parameter_units.py::test_another_head_noun_declares_nothing[shift]
FAILED tests/test_check_parameter_units.py::test_no_level_carries_a_unit_suffix
FAILED tests/test_check_parameter_units.py::test_a_level_named_with_its_decibels_put_back_is_reported
FAILED tests/test_check_parameter_units.py::test_a_decibel_value_under_another_head_noun_still_needs_db
FAILED tests/test_check_parameter_units.py::test_the_notebook_table_reads_a_level_the_way_the_rule_does
15 failed, 216 passed in 24.94s
--- the same file against the real guard on the branch:
231 passed in 24.42s

@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 489

@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 488 files, which is 388 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: ff417332-a8d3-4879-b4b9-7e723458f95c
📥 Commits

Reviewing files that changed from the base of the PR and between 818b515 and 5ffddef.

⛔ Files ignored due to path filters: 1
  • site/src/generated/catalogues.mjs is excluded by !**/generated/**
📒 Files selected for processing: 488
  • CHANGELOG.md
  • CONTRIBUTING.md
  • docs/ERRATA.es.md
  • docs/ERRATA.md
  • docs/aircraft/npd-atmosphere.md
  • docs/buildings/design/installed-structure-borne.md
  • docs/buildings/insulation/lab-application-rules.md
  • docs/buildings/insulation/service-equipment-noise.md
  • docs/buildings/rooms/workroom-sound-decay.md
  • docs/devices/broadcast/quasi-peak.md
  • docs/devices/electroacoustics/headphones.md
  • docs/devices/electroacoustics/induction-loops.md
  • docs/devices/electroacoustics/loudspeakers.md
  • docs/devices/electroacoustics/microphones.md
  • docs/devices/emission/free-field-qualification.md
  • docs/devices/emission/sound-power-plant.md
  • docs/devices/emission/sound-power-test-rooms.md
  • docs/devices/emission/sound-power-turbines.md
  • docs/devices/emission/workstation-emission.md
  • docs/devices/noise-control/in-situ-noise-control.md
  • docs/environment/assessment/environmental-levels.md
  • docs/environment/assessment/sel-distribution.md
  • docs/environment/propagation/barrier-reflection.md
  • docs/environment/sources/road-surface-pass-by.md
  • docs/environment/sources/rolling-stock-noise.md
  • docs/environment/sources/wind-turbine-receptor.md
  • docs/materials/reading-a-datasheet.md
  • docs/perception/hearing/audiometry.md
  • docs/perception/hearing/hearing-protectors.md
  • docs/perception/speech/speech-transmission.md
  • docs/reference/api/index.md
  • docs/signals/filters/filter-compliance.md
  • docs/signals/metrology/calibration.md
  • docs/signals/metrology/comparison-calibration.md
  • docs/signals/metrology/free-field-corrections.md
  • docs/signals/metrology/random-incidence.md
  • docs/signals/metrology/reciprocity-calibration.md
  • docs/signals/metrology/sound-level-meter-periodic-tests.md
  • docs/signals/spectra/spectral-analysis.md
  • docs/signals/spectra/synchronous-averaging.md
  • docs/signals/spectra/test-signals.md
  • docs/start/getting-started.md
  • docs/start/upgrading.md
  • docs/vibration/human/meter-verification.md
  • docs/vibration/immission/railway-prediction.md
  • docs/vibration/immission/railway-vibration.md
  • llms-full.txt
  • scripts/api_taxonomy.py
  • scripts/check_parameter_units.py
  • scripts/conformance/domains/aircraft.py
  • scripts/conformance/domains/assessment.py
  • scripts/conformance/domains/audiometry.py
  • scripts/conformance/domains/building.py
  • scripts/conformance/domains/calibrators.py
  • scripts/conformance/domains/comparison_calibration.py
  • scripts/conformance/domains/distortion.py
  • scripts/conformance/domains/environmental_sources.py
  • scripts/conformance/domains/filter_tests.py
  • scripts/conformance/domains/free_field.py
  • scripts/conformance/domains/free_field_corrections.py
  • scripts/conformance/domains/headphones.py
  • scripts/conformance/domains/in_situ_measurement.py
  • scripts/conformance/domains/induction_loop.py
  • scripts/conformance/domains/intensity.py
  • scripts/conformance/domains/psychoacoustics.py
  • scripts/conformance/domains/quasi_peak.py
  • scripts/conformance/domains/random_incidence.py
  • scripts/conformance/domains/reciprocity_calibration.py
  • scripts/conformance/domains/rolling_stock_noise.py
  • scripts/conformance/domains/service_equipment.py
  • scripts/conformance/domains/sound_level_meters.py
  • scripts/conformance/domains/sound_power_rooms.py
  • scripts/conformance/domains/steam_turbines.py
  • scripts/conformance/domains/vdi2081.py
  • scripts/conformance/domains/vibration_railway_prediction.py
  • scripts/conformance/domains/wind_turbine_receptor.py
  • scripts/conformance/domains/workroom_acoustics.py
  • scripts/figures/building.py
  • scripts/figures/datasheets.py
  • scripts/figures/devices.py
  • scripts/figures/environment.py
  • scripts/figures/metrology.py
  • scripts/figures/perception.py
  • scripts/figures/signals.py
  • scripts/figures/system_measurement.py
  • scripts/figures/vibration.py
  • scripts/generate_catalogue_data.py
  • scripts/reports/devices.py
  • site/public/llms/llms-aircraft.txt
  • 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.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-reverberant.txt
  • site/public/llms/llms-devices-emission.txt
  • site/public/llms/llms-devices-noise-control-measured.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-materials.txt
  • site/public/llms/llms-perception-hearing.txt
  • site/public/llms/llms-perception-speech.txt
  • site/public/llms/llms-signals-filters.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-start.txt
  • site/public/llms/llms-vibration-human.txt
  • site/public/llms/llms-vibration-immission.txt
  • site/public/schemas/phonometry-catalogue-1.json
  • site/src/content/docs/aircraft/npd-atmosphere.mdx
  • site/src/content/docs/buildings/insulation/lab-application-rules.mdx
  • site/src/content/docs/buildings/insulation/service-equipment-noise.mdx
  • site/src/content/docs/buildings/rooms/workroom-sound-decay.mdx
  • site/src/content/docs/devices/broadcast/quasi-peak.mdx
  • site/src/content/docs/devices/electroacoustics/headphones.mdx
  • site/src/content/docs/devices/electroacoustics/induction-loops.mdx
  • site/src/content/docs/devices/electroacoustics/loudspeakers.mdx
  • site/src/content/docs/devices/electroacoustics/microphones.mdx
  • site/src/content/docs/devices/emission/free-field-qualification.mdx
  • site/src/content/docs/devices/emission/sound-power-plant.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/emission/workstation-emission.mdx
  • site/src/content/docs/devices/noise-control/in-situ-noise-control.mdx
  • site/src/content/docs/environment/assessment/environmental-levels.mdx
  • site/src/content/docs/environment/assessment/sel-distribution.mdx
  • site/src/content/docs/environment/propagation/barrier-reflection.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/aircraft/npd-atmosphere.mdx
  • site/src/content/docs/es/buildings/insulation/lab-application-rules.mdx
  • site/src/content/docs/es/buildings/insulation/service-equipment-noise.mdx
  • site/src/content/docs/es/buildings/rooms/workroom-sound-decay.mdx
  • site/src/content/docs/es/devices/broadcast/quasi-peak.mdx
  • site/src/content/docs/es/devices/electroacoustics/headphones.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/microphones.mdx
  • site/src/content/docs/es/devices/emission/free-field-qualification.mdx
  • site/src/content/docs/es/devices/emission/sound-power-plant.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/emission/workstation-emission.mdx
  • site/src/content/docs/es/devices/noise-control/in-situ-noise-control.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/propagation/barrier-reflection.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/materials/reading-a-datasheet.mdx
  • site/src/content/docs/es/perception/hearing/audiometry.mdx
  • site/src/content/docs/es/perception/hearing/hearing-protectors.mdx
  • site/src/content/docs/es/perception/psychoacoustics/sound-quality.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/filters/filter-compliance.mdx
  • site/src/content/docs/es/signals/metrology/calibration.mdx
  • 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/random-incidence.mdx
  • site/src/content/docs/es/signals/metrology/reciprocity-calibration.mdx
  • site/src/content/docs/es/signals/metrology/sound-level-meter-periodic-tests.mdx
  • site/src/content/docs/es/signals/spectra/spectral-analysis.mdx
  • site/src/content/docs/es/signals/spectra/synchronous-averaging.mdx
  • site/src/content/docs/es/signals/spectra/test-signals.mdx
  • site/src/content/docs/es/start/getting-started.mdx
  • site/src/content/docs/es/start/upgrading.mdx
  • site/src/content/docs/es/vibration/human/meter-verification.mdx
  • site/src/content/docs/es/vibration/immission/railway-prediction.mdx
  • site/src/content/docs/es/vibration/immission/railway-vibration.mdx
  • site/src/content/docs/es/vibration/structural/transfer-stiffness.mdx
  • site/src/content/docs/materials/reading-a-datasheet.mdx
  • site/src/content/docs/perception/hearing/audiometry.mdx
  • site/src/content/docs/perception/hearing/hearing-protectors.mdx
  • site/src/content/docs/perception/psychoacoustics/sound-quality.mdx
  • site/src/content/docs/perception/speech/speech-transmission.mdx
  • site/src/content/docs/reference/api/aeroacoustics/npd-atmosphere.md
  • site/src/content/docs/reference/api/broadcast/quasi-peak.md
  • site/src/content/docs/reference/api/building/catalogue.md
  • site/src/content/docs/reference/api/building/datasheets.md
  • site/src/content/docs/reference/api/building/impact-catalogue.md
  • site/src/content/docs/reference/api/building/installed-structure-borne.md
  • site/src/content/docs/reference/api/building/joint-insulation.md
  • site/src/content/docs/reference/api/building/laboratory-improvement.md
  • site/src/content/docs/reference/api/building/rainfall-sound.md
  • site/src/content/docs/reference/api/building/service-equipment.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/loudspeaker.md
  • site/src/content/docs/reference/api/electroacoustics/microphone.md
  • site/src/content/docs/reference/api/electroacoustics/program-signal.md
  • site/src/content/docs/reference/api/environment/barrier-in-situ.md
  • site/src/content/docs/reference/api/environment/barrier-reflection.md
  • site/src/content/docs/reference/api/environment/exposure-distribution.md
  • site/src/content/docs/reference/api/environment/noise-reducing-devices.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/statistical-pass-by.md
  • site/src/content/docs/reference/api/environment/wind-turbine-modulation.md
  • site/src/content/docs/reference/api/environment/wind-turbine-receptor.md
  • site/src/content/docs/reference/api/filters/periodic-tests.md
  • site/src/content/docs/reference/api/filters/time-invariance.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/real-ear-attenuation.md
  • site/src/content/docs/reference/api/hearing/sound-field-audiometry.md
  • site/src/content/docs/reference/api/io/io.md
  • site/src/content/docs/reference/api/metrology/comparison-calibration.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/reciprocity-coupler.md
  • site/src/content/docs/reference/api/metrology/reciprocity-free-field.md
  • site/src/content/docs/reference/api/metrology/sound-calibrator.md
  • site/src/content/docs/reference/api/metrology/sound-level-meter.md
  • site/src/content/docs/reference/api/noise_control/duct-walls.md
  • site/src/content/docs/reference/api/noise_control/enclosure-insulation.md
  • site/src/content/docs/reference/api/noise_control/hvac.md
  • site/src/content/docs/reference/api/noise_control/screen-in-situ.md
  • site/src/content/docs/reference/api/noise_control/silencer-in-situ.md
  • site/src/content/docs/reference/api/noise_control/silencer-measurement.md
  • site/src/content/docs/reference/api/power/free-field-qualification.md
  • site/src/content/docs/reference/api/power/reference-sound-source.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-intensity.md
  • site/src/content/docs/reference/api/power/sound-power-plant.md
  • site/src/content/docs/reference/api/power/sound-power-special-room.md
  • site/src/content/docs/reference/api/power/turbine-noise.md
  • site/src/content/docs/reference/api/power/workstation.md
  • site/src/content/docs/reference/api/psychoacoustics/fluctuation-strength.md
  • site/src/content/docs/reference/api/rooms/spatial-decay.md
  • site/src/content/docs/reference/api/rooms/workroom-prediction.md
  • site/src/content/docs/reference/api/signals/synchronous-average.md
  • site/src/content/docs/reference/api/signals/test-signals.md
  • site/src/content/docs/reference/api/signals/windows.md
  • site/src/content/docs/reference/api/speech/sti.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/transfer-stiffness.md
  • site/src/content/docs/reference/errata.md
  • site/src/content/docs/signals/filters/filter-compliance.mdx
  • site/src/content/docs/signals/metrology/calibration.mdx
  • 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/random-incidence.mdx
  • site/src/content/docs/signals/metrology/reciprocity-calibration.mdx
  • site/src/content/docs/signals/metrology/sound-level-meter-periodic-tests.mdx
  • site/src/content/docs/signals/spectra/spectral-analysis.mdx
  • site/src/content/docs/signals/spectra/synchronous-averaging.mdx
  • site/src/content/docs/signals/spectra/test-signals.mdx
  • site/src/content/docs/start/getting-started.mdx
  • site/src/content/docs/start/upgrading.mdx
  • site/src/content/docs/vibration/human/meter-verification.mdx
  • site/src/content/docs/vibration/immission/railway-prediction.mdx
  • site/src/content/docs/vibration/immission/railway-vibration.mdx
  • site/src/content/docs/vibration/structural/transfer-stiffness.mdx
  • src/phonometry/_internal/catalogue.py
  • src/phonometry/_internal/display.py
  • src/phonometry/_plot/aircraft.py
  • src/phonometry/_plot/audiometry.py
  • src/phonometry/_plot/broadcast.py
  • src/phonometry/_plot/building.py
  • src/phonometry/_plot/electroacoustics.py
  • src/phonometry/_plot/emission.py
  • src/phonometry/_plot/emission_plant.py
  • src/phonometry/_plot/environment.py
  • src/phonometry/_plot/free_field.py
  • src/phonometry/_plot/headphones.py
  • src/phonometry/_plot/hearing.py
  • src/phonometry/_plot/induction_loop.py
  • src/phonometry/_plot/joint_insulation.py
  • src/phonometry/_plot/metrology.py
  • src/phonometry/_plot/noise_control.py
  • src/phonometry/_plot/reciprocity.py
  • src/phonometry/_plot/rolling_stock.py
  • src/phonometry/_plot/room.py
  • src/phonometry/_plot/signals.py
  • src/phonometry/_plot/vibration.py
  • src/phonometry/_plot/wind_turbine_receptor.py
  • src/phonometry/_report/iec60268_4.py
  • src/phonometry/_report/iec60268_5.py
  • src/phonometry/_report/iec62585.py
  • src/phonometry/_report/iso10140_1.py
  • src/phonometry/aircraft/npd_atmosphere.py
  • src/phonometry/aircraft/rotorcraft_propagation.py
  • src/phonometry/broadcast/quasi_peak.py
  • src/phonometry/building/__init__.py
  • src/phonometry/building/catalogue.py
  • src/phonometry/building/data/ashrae-2019-table-40.json
  • src/phonometry/building/data/bies-2017-table-7-6.json
  • src/phonometry/building/data/harris-1977-table-19-2.json
  • src/phonometry/building/data/harris-1977-table-19-3.json
  • src/phonometry/building/data/harris-1977-table-19-4.json
  • src/phonometry/building/data/rossing-2014-table-11-4.json
  • src/phonometry/building/datasheets.py
  • src/phonometry/building/impact_catalogue.py
  • src/phonometry/building/measurement/_rainfall_sound.py
  • src/phonometry/building/measurement/joint_insulation.py
  • src/phonometry/building/measurement/laboratory_improvement.py
  • src/phonometry/building/measurement/service_equipment.py
  • src/phonometry/building/prediction/__init__.py
  • src/phonometry/building/prediction/installed_structure_borne.py
  • src/phonometry/electroacoustics/headphones.py
  • src/phonometry/electroacoustics/induction_loop.py
  • src/phonometry/electroacoustics/induction_loop_components.py
  • src/phonometry/electroacoustics/loudspeaker.py
  • src/phonometry/electroacoustics/microphone.py
  • src/phonometry/electroacoustics/program_signal.py
  • src/phonometry/emission/__init__.py
  • src/phonometry/emission/_sound_power_in_situ.py
  • src/phonometry/emission/_sound_power_intensity.py
  • src/phonometry/emission/_sound_power_intensity_points.py
  • src/phonometry/emission/_sound_power_special_room.py
  • src/phonometry/emission/free_field_qualification.py
  • src/phonometry/emission/intensity.py
  • src/phonometry/emission/reference_sound_source.py
  • src/phonometry/emission/sound_power_high_frequency.py
  • src/phonometry/emission/sound_power_plant.py
  • src/phonometry/emission/turbine_noise.py
  • src/phonometry/emission/workstation.py
  • src/phonometry/environment/__init__.py
  • src/phonometry/environment/assessment/__init__.py
  • src/phonometry/environment/assessment/exposure_distribution.py
  • src/phonometry/environment/assessment/rating.py
  • src/phonometry/environment/assessment/wind_turbine_modulation.py
  • src/phonometry/environment/assessment/wind_turbine_receptor.py
  • src/phonometry/environment/propagation/__init__.py
  • src/phonometry/environment/propagation/barrier_in_situ.py
  • src/phonometry/environment/propagation/barrier_reflection.py
  • src/phonometry/environment/propagation/noise_reducing_devices.py
  • src/phonometry/environment/propagation/software_quality.py
  • src/phonometry/environment/sources/_statistical_pass_by.py
  • src/phonometry/environment/sources/rolling_stock_noise.py
  • src/phonometry/filters/compliance.py
  • src/phonometry/filters/periodic_tests.py
  • src/phonometry/filters/time_invariance.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/sound_field_audiometry.py
  • src/phonometry/materials/absorbers/four_microphone.py
  • src/phonometry/materials/absorbers/layered.py
  • src/phonometry/metrology/__init__.py
  • src/phonometry/metrology/comparison_calibration.py
  • src/phonometry/metrology/free_field_corrections.py
  • src/phonometry/metrology/random_incidence.py
  • src/phonometry/metrology/reciprocity_calibration.py
  • src/phonometry/metrology/reciprocity_coupler.py
  • src/phonometry/metrology/reciprocity_free_field.py
  • src/phonometry/metrology/sound_calibrator.py
  • src/phonometry/metrology/sound_level_meter.py
  • src/phonometry/noise_control/__init__.py
  • src/phonometry/noise_control/data/ashrae-2019-tables-29-to-34.json
  • src/phonometry/noise_control/duct_walls.py
  • src/phonometry/noise_control/enclosure_insulation.py
  • src/phonometry/noise_control/hvac.py
  • src/phonometry/noise_control/screen_in_situ.py
  • src/phonometry/noise_control/silencer_in_situ.py
  • src/phonometry/noise_control/silencer_measurement.py
  • src/phonometry/noise_control/valves.py
  • src/phonometry/psychoacoustics/quality/_fluctuation_strength.py
  • src/phonometry/room/__init__.py
  • src/phonometry/room/auditorium.py
  • src/phonometry/room/spatial_decay.py
  • src/phonometry/room/workroom_prediction.py
  • src/phonometry/signals/_envelope.py
  • src/phonometry/signals/synchronous_average.py
  • src/phonometry/signals/test_signals.py
  • src/phonometry/signals/windows.py
  • src/phonometry/speech/sti.py
  • src/phonometry/vibration/__init__.py
  • src/phonometry/vibration/immission/__init__.py
  • src/phonometry/vibration/immission/railway.py
  • src/phonometry/vibration/immission/railway_prediction.py
  • src/phonometry/vibration/structural/_impact_mobility.py
  • src/phonometry/vibration/structural/transfer_stiffness.py
  • tests/aircraft/test_npd_atmosphere.py
  • tests/broadcast/test_quasi_peak.py
  • tests/building/measurement/test_joint_insulation.py
  • tests/building/measurement/test_laboratory_improvement.py
  • tests/building/measurement/test_rainfall_sound.py
  • tests/building/measurement/test_service_equipment.py
  • tests/building/prediction/test_installed_structure_borne_tables.py
  • tests/building/test_insulation_datasheets.py
  • tests/building/test_transmission_loss_catalogue.py
  • tests/building/test_wave4_catalogues.py
  • tests/data/published_catalogues/baseline.json
  • 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_microphone.py
  • tests/electroacoustics/test_program_signal.py
  • tests/emission/test_free_field_qualification.py
  • tests/emission/test_reference_sound_source.py
  • tests/emission/test_sound_power_in_situ.py
  • tests/emission/test_sound_power_intensity.py
  • tests/emission/test_sound_power_plant.py
  • tests/emission/test_sound_power_special_room.py
  • tests/emission/test_turbine_noise.py
  • tests/emission/test_workstation.py
  • tests/environment/assessment/test_exposure_distribution.py
  • tests/environment/assessment/test_wind_turbine_receptor.py
  • tests/environment/propagation/test_barrier_reflection.py
  • tests/environment/propagation/test_software_quality.py
  • tests/environment/sources/test_rolling_stock_noise.py
  • tests/environment/sources/test_statistical_pass_by.py
  • tests/environment/test_barrier_in_situ.py
  • tests/filters/test_periodic_tests.py
  • tests/filters/test_time_invariance.py
  • tests/hearing/test_active_noise_reduction.py
  • tests/hearing/test_audiometry.py
  • tests/hearing/test_audiometry_plots.py
  • tests/hearing/test_earmuff_insertion_loss.py
  • tests/hearing/test_hearing_protector_plots.py
  • tests/hearing/test_real_ear_attenuation.py
  • tests/hearing/test_sound_field_audiometry.py
  • tests/io/test_catalogue_fiche_types.py
  • tests/io/test_catalogue_row_contract.py
  • tests/metrology/test_comparison_calibration.py
  • tests/metrology/test_comparison_diameter_gap_validation.py
  • tests/metrology/test_comparison_phase_impedance_time.py
  • tests/metrology/test_free_field_corrections.py
  • tests/metrology/test_iec62585_report.py
  • tests/metrology/test_random_incidence.py
  • tests/metrology/test_reciprocity_calibration.py
  • tests/metrology/test_reciprocity_coupler.py
  • tests/metrology/test_reciprocity_plots.py
  • tests/metrology/test_sound_calibrator.py
  • tests/metrology/test_sound_level_meter.py
  • tests/noise_control/test_duct_walls.py
  • tests/noise_control/test_enclosure_insulation.py
  • tests/noise_control/test_hvac_vdi2081.py
  • tests/noise_control/test_iso11546_1_oracles.py
  • tests/noise_control/test_screen_in_situ.py
  • tests/noise_control/test_silencer_in_situ.py
  • tests/noise_control/test_silencer_measurement.py
  • tests/psychoacoustics/loudness/test_ecma.py
  • tests/psychoacoustics/loudness/test_moore_glasberg.py
  • tests/psychoacoustics/loudness/test_moore_glasberg_time.py
  • tests/psychoacoustics/loudness/test_zwicker.py
  • tests/psychoacoustics/quality/test_fluctuation_strength.py
  • tests/psychoacoustics/quality/test_fluctuation_strength_ecma.py
  • tests/psychoacoustics/quality/test_roughness_ecma.py
  • tests/psychoacoustics/quality/test_sharpness.py
  • tests/psychoacoustics/quality/test_tonality_ecma.py
  • tests/reference_data/__init__.py
  • tests/reference_data/din45672_3_annex_a.py
  • tests/reference_data/filters.py
  • tests/reference_data/headphones.py
  • tests/result_factories.py
  • tests/room/test_spatial_decay.py
  • tests/room/test_workroom_prediction.py
  • tests/signals/test_levels.py
  • tests/signals/test_signal_toolbox.py
  • tests/signals/test_synchronous_average.py
  • tests/signals/test_window_metrics.py
  • tests/speech/test_sti.py
  • tests/test_boundary_verdicts.py
  • tests/test_check_array_aliasing.py
  • tests/test_check_parameter_units.py
  • tests/test_check_record_display.py
  • tests/test_derived_regimes.py
  • tests/test_internal_catalogue.py
  • tests/test_owns_arrays.py
  • tests/test_package_architecture.py
  • tests/test_printed_limits.py
  • tests/test_public_vocabulary.py
  • tests/test_record_display.py
  • tests/test_removed_names.py
  • tests/test_result_plots.py
  • tests/vibration/immission/test_railway.py
  • tests/vibration/immission/test_railway_plot.py
  • tests/vibration/immission/test_railway_prediction.py
  • tests/vibration/structural/test_transfer_stiffness.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/levels carry no db suffix A level or a level difference carries no unit suffix 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 validation Reference data and oracles used to check results against normative values 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: psychoacoustics Loudness, sharpness, roughness and annoyance area: room Room acoustics and reverberation 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.
⚠️ Please upload report for BASE (fix/counts-bounds-and-enclosure-result@818b515). Learn more about missing BASE report.

Additional details and impacted files
@@                            Coverage Diff                            @@
##             fix/counts-bounds-and-enclosure-result     #975   +/-   ##
=========================================================================
  Coverage                                          ?   96.86%           
=========================================================================
  Files                                             ?      444           
  Lines                                             ?    89966           
  Branches                                          ?        0           
=========================================================================
  Hits                                              ?    87150           
  Misses                                            ?     2816           
  Partials                                          ?        0           

☔ 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: 258003 tests, 0 failures (all green)
Python Version Tests Failures Coverage Status
macos-latest-3.12 28667 0 96.9% Pass Passed
macos-latest-3.13 28667 0 96.9% Pass Passed
macos-latest-3.14 28667 0 96.9% Pass Passed
ubuntu-latest-3.12 28667 0 96.9% Pass Passed
ubuntu-latest-3.13 28667 0 96.9% Pass Passed
ubuntu-latest-3.14 28667 0 96.9% Pass Passed
windows-latest-3.12 28667 0 96.9% Pass Passed
windows-latest-3.13 28667 0 96.9% Pass Passed
windows-latest-3.14 28667 0 96.9% Pass Passed

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

A level and a level difference are in decibels by definition, yet the public names spelled them both ways: about 400 names ended in `_db` (`insertion_loss_db`, `band_levels_db`, `sound_reduction_index_db`) beside as many that did not, often the same concept in two modules (`background_levels_db` against `background_levels`, `insertion_loss_db` against `insertion_loss`, `c_db` on a joint rating against `c` on every other ISO 717 rating, `tonal_adjustment_db` on the wind turbine rating level against the bare `adjustment` of the tonal and impulsive assessments). A caller had to remember which module had chosen which.
@jmrplens
jmrplens force-pushed the fix/levels-carry-no-db-suffix branch from 388fe91 to 5ffddef 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] Removes unit suffixes from field names across the codebase.

The PR appears safe to merge, with a non-blocking gap in the new naming check.

Findings

  1. P2 Inherited properties escape the check ▶

Reviews (1) · Last reviewed commit: "A level or a level difference carries no..." · Reviewed by Greptile

Comment on lines +2347 to +2352
entries = list(public_names())
known = {(e.module, e.qualname, e.name) for e in entries}
for entry in _public_functions():
owner, _, name = entry.qualname.rpartition(".")
if (entry.module, owner, name) not in known:
entries.append(PublicName(entry.module, owner, name, entry.where))

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 Inherited properties escape the check

decibel_suffixed() misses properties inherited from an unpublished base class. public_names() reads only the exported class's own members, while _public_functions() adds inherited methods but excludes properties. An inherited insertion_loss_db property therefore passes the new check, leaving contributors without the promised warning. Walk inherited properties too, and add a regression test beside the inherited-method test.

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 b093916. One walk of the method resolution order now serves the members, the properties, the methods and the public names, each named by the class that defines it. Two tests plant a property and a method on _DrawableLayer and see them reported once; the tree is clean under the wider walk.

@sonarqubecloud

Copy link
Copy Markdown

@jmrplens
jmrplens merged commit d8f97ca into main Oct 21, 2026
147 of 151 checks passed
@jmrplens
jmrplens deleted the fix/levels-carry-no-db-suffix 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: psychoacoustics Loudness, sharpness, roughness and annoyance area: room Room acoustics and reverberation area: signals Levels, spectra, generators and general signal analysis area: speech Speech intelligibility: STI, SII and STOI 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 validation Reference data and oracles used to check results against normative values

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant