at main
4 folders
2 files
KB italic, Euler's number upright, and the subscripts of the guides, figures and diagrams set as their standards print them (#952)
The weighted vibration severity KB is italic in every diagram, figure, guide, docstring and errata entry, as DIN 4150-2 and DIN 45672 print it, and Euler's number is upright in every formula, as ISO 80000-2:2019 prints the mathematical constants. `make subscripts` fails on an upright KB or an upright running index and `scripts/check_euler_number.py` fails on an italic e, and both checks now read the row breaks, wrapped inline math and escaped strings they used to skip. Where a standard prints every subscript in one slope, as EN 15657, EN 12354-5 and RD 1367/2007 do, ISO 80000-2 decides: a running index is italic and a descriptive abbreviation upright, so the position levels of EN 15657 are L_{v,i} with an italic i. The standardized levels with their italic T, the ISO 7235 diagram with its sign put right, and the noise control, in-situ, exposure, aircraft and theory symbols follow their printed pages. No public name, signature or return value changes.
Answer the audit: three defects in the code, one class of invisible byte, and sixteen claims the page does not support (#705)
* Grade the run, refuse the control character, ask only for what is used
Three things the audit found in the code.
industrial_machine_zone wrapped a function that has always taken an array and then applied the most-restrictive rule of 5.2.3 by comparing the two gradings as text. With an array in, that text was the array's repr, so a year of monthly readings came back as one eighteen-character string. The rule is applied to zone indices now and the letters looked up at the end, and a new figure draws what the array is for: twelve readings walking from zone A into zone D, with the month Criterion II sees before Criterion I does.
A form feed had reached the change-of-section docstring, and in a raw string that is exactly the backslash and the f of the command after it, so the published formula lost its fraction. check_control_characters.py refuses the whole class over the tracked text corpus, with an escape hatch for the two files that are copies of somebody else's and a ratchet on it.
section_change_loss demanded a rectangular duct's largest side whatever the ratio, and for a sudden reduction threw it away: Figure 26 prints no effect in the frequency column there, so no limit frequency and no dimension enter the answer. It is asked for now only where it is used. A round duct's diameter and its area are one fact stated twice, and a contradictory pair silently moved the limit frequency by a decade instead of being refused.
* Say what the printed page says, in both languages
Ten statements across the guides, the register and the module comments that the printed page does not support.
Clause numbers: the measurement band of ISO 10816-3 is stated in an unnumbered Annex A, which has no A.1; the 50 MW cap on group 1 is in the title of Table A.1 and not in clause 4.2; VDI 2081's duct attenuation uses Tables 5 and 7, Table 8 being the sound reduction index of building components; the spectral parameter and the blade-frequency allowance are printed in Section 4.3.4, not 4.3.3; and the Table C.1 ladder steps by 1,6, which is R5 and not R10.
Numbers: the fan caption said eight decibels between a radial machine and an axial one where its own figure prints 94 and 106; the ISO/TR 17534-3 cases are 194,16 m apart in ground projection, not 195; and the register holds five VDI 2081 defects, not four, the fifth being the cross-reference that sends a reader to Section 7.3.2 for coefficients printed in 7.2.3.2.
Descriptions: the Section 6.4 mistranslation is about whether a junction's reduction depends on frequency at all, not about which way a duct's attenuation runs with it; and the note about the three L_WSM values sitting inside their stated tolerance holds for two of the three, assembly T being inside the English tolerance and outside the normative German one.
The ISO/TR 17534-3 errata entry gets its Status line back in both languages, taken by the two VDI entries inserted above it. And one term, one word, on the Spanish pages: margen for the tolerance band and referencia for the established baseline, each of which the same page had been saying two ways.
* Name the parameter this signature has when it refuses a rating
gear_housing_velocity_limit passed the rating through to allowable_velocity, so a bad one surfaced under the delegate's 'constant_velocity_mm_s': a keyword the caller cannot see and no pytest.raises(match=) against this API can match. Validated locally now, the way its sibling already was.
* Carry the restored errata line into the pages the register feeds
* Count the letters the figure actually draws
* Let the section-change rows describe a duct that exists
The nine Figure 26 abscissae were checked through a round duct given both an area and a 0,4 m diameter that does not follow from it, which the consistency check now refuses. The diameter comes from the area, which is what keeps the 63 Hz octave below the limit frequency at every ratio the chart is drawn over.
* Write the fixture bytes the test means, on Windows too
path.write_text translates a newline into a carriage return and a newline on Windows, so a fixture written to carry one control character carried two there and the two tests that fix a position failed on both Windows runners. newline='' turns the translation off.
* Name a file the same way on every platform
The reports and the keys of the escape hatch were built with str() on a path, which gives backslashes on Windows and matches no key written with forward slashes. Both exempt files were therefore reported there and their entries called stale in the same run, which is what the Windows job caught. Named through as_posix() now, and the test that held the hatch against the tree asks what it can answer anywhere: that every entry names a file the scan reads.
* Take the corrections into the figure and the printed outputs
The quality-assurance figure still drew the 195 m the pages had stopped saying; it is 194,16 m in both languages now. The propagation snippet printed 96 and -1 at 8 kHz where it returns 95,8 and -0,8. The trend snippet imported numpy and used a name it never imported. And the Spanish errata bullet called Section 7.3 sound attenuation, where it is the airborne sound insulation of a building component.
* Attribute each claim to the clause that carries it
Section 7.6 of Blatt 1 is the vibration isolation the page called a different guideline. Equation (35) is written on the cross-section ratio, not on the flow, which is why split_loss takes areas. The three gear ratings are named under Table 5 and defined in Annex A; Table 1 gives their units and nothing else. The CNOSSOS cross-references still pointed at section 3, which is the quality-assurance section now, and the comparison they mean is in section 4. And the chapters the successors added were credited to a 2019 revision on a page that says twice the successors are the 2022 editions.
* Keep the 2019 revision, which is a real edition
The refuters were right: VDI 2081 Blatt 1:2019-03 exists, sits between the held 2001-07 and the 2022-04 successor, and is the revision that added the air-handling-unit and outdoor-propagation chapters. The sentence was correct and only its second half needed the Section 7.6 fix. The changelog also counted nine Spanish figures where this branch repoints eight, the ninth having travelled with the gear-unit work; it says which now.
* Read the corpus the gate says it reads, and let a lost Status be heard
The control-character gate named the text suffixes and read those, so it never opened twenty-nine tracked files, seven of which carry the very character it exists for: the CNOSSOS extracts are CRLF as the workbook and the Official Journal produced them. It names the binary suffixes now and reads everything else, 1807 files instead of 1778, and its scope test asks something that can fail: that nothing it skips is text.
The errata gate recognised a record by its Status bullet, so a record that lost one was not reported, it was dropped, and its page citation and ratio claims stopped being checked with it. That is exactly how the ISO/TR 17534-3 line went missing this morning. A record is recognised by its Location now and a missing Status is an error; the sweep found one more, the ISO 3747 E.4.2.3 entry, in both registers. The Spanish register is read too, and has to hold the same records as the English one.
* Answer the review: what Criterion II reads, and the cap that can be refused
Criterion II does not read the zone, it reads the change from the established baseline, and a machine can be well inside zone B and still owe an investigation, which the caption under the figure already said and the paragraph above it did not. The Spanish 'al margen del propio documento' reads as 'apart from the document'; it is 'dentro del margen'. And section_change_loss refuses a cap that is not positive, which its raises clause did not say.
* Recognise a record by either bullet, not only by its Location
Keying recognition on the Location alone made the gate's own fixtures invisible: they carry an Evidence and a Status and no Location, which is the shape a test probe wants. Either bullet marks a record now, so a section missing one is reported rather than dropped, whichever one it is.
Every verdict reads its pass and fail flags, grades and classes from the values it holds (#949)
A result no longer stores a verdict beside the readings it came from. Sixty-two result classes used to keep the flag, grade or class their function had worked out (`passes`, `complies`, `qualified`, the `*_met` and `*_ok` flags, the advisories, the per-band classes of the IEC 61260-1, IEC 61672-1 and IEC 61043 verdicts, the ISO 9614-2 grade, the ISO/PAS 1996-3 category, the IEC TS 61400-11-2 block status and the rest), so a result built by hand or rewritten with `dataclasses.replace` could hold readings that fail and a flag that says they pass. Each of them is now a read-only property, read from the values the result keeps and the limit the standard prints, and so is any figure that only fed it, such as the rounded level of an RD 1367/2007 period or the acceptance region of a trend test.
Band averages for every part of ISO 10846, the driving-point method of ISO 10846-5 and the rig checks of ISO 10846-4 (#876)
* A nominal band frequency below the preferred table is the printed number
The decades below the IEC 61260-1 base table were built by scaling with
0.1, which binary cannot hold, so the 3.15 Hz one-third-octave band came
back as 3.1500000000000004 and the 6.3 Hz band as 6.300000000000001.
Dividing by the power of ten gives the double nearest the printed value.
* Band averages, rig checks and the driving-point method of ISO 10846-4 and -5
band_averaged_stiffness takes the energy mean of the narrow-band stiffness
over each base-ten one-third-octave band, as every part of ISO 10846 asks
(Part 2 Formula (6), Part 3 (7), Part 4 (11), Part 5 (6)); a band holding
fewer than five lines gets no value and a TransferStiffnessWarning, and lines
that fail an adequacy condition are left out. TransferStiffnessResult gains a
per-line validity mask and band_average(); the indirect result marks the
lines with |T| > 0.1, and the indirect method warns with the new class.
check_blocked_output, check_unwanted_input and check_output_mass judge the
20 dB, the 15 dB and the output-mass limit of Part 4 Inequality (3) line by
line and warn where they fail. effective_blocking_mass is Part 4 Formula (6)
with the f3 of Inequality (5), a departure below 40 Hz ignored.
driving_point_stiffness turns the input force and acceleration into k1,1
(Part 5 Formula (3)), finds the upper limiting frequency of 6.2 and averages
only the lines below it, where Formula (7) makes k1,1 stand for k2,1 within
2 dB. driving_point_uncertainty builds the Annex B budget on
metrology.combine_uncertainty with U = 2u, keeping the rectangular terms at
the expressions B.3 prints. Every result has .plot().
* Conformance rows for ISO 10846-4 and ISO 10846-5
Neither part prints a worked example, so the thirteen rows are closed
forms: a band of identical lines averages to itself, lines of 1 to 5 MN/m
to the square root of 11 MN/m, and a band of four lines has no value; a
massless spring gives a flat k1,1 that never reaches f_UL, and a spring
under a 2 kg force plate gives the f_UL of its closed form with every band
below it within the 2 dB of Formula (7); the output mass on the bound of
Part 4 Inequality (3) is 0.6 kg for a 20 dB level difference and biases
the force by the 0.5 dB of NOTE 1; a rigid block has an effective mass
equal to its own, and a block with a spring mode the f3 of its closed
form; Inequalities (1) and (2) hold at equality; and the Annex B budget
at its defaults and at the one-decimal values of Table B.1.
* Document ISO 10846-4 and -5 on the transfer-stiffness guide
The guide gains three sections in both languages: the one-third-octave
band average every part asks for, the checks of the rig read from the
measured spectra (the blocked output, the unidirectional input, the mass
in front of the output force transducers and the effective blocking mass
with its f3), and the driving-point method of Part 5 with its upper
limiting frequency, a figure of k1,1 under a 2 kg force plate and the
Annex B budget. The scope and the section overviews now say what is
computed; only the clause 7.6 linearity criterion is still left to the
operator.
Two printed defects go in the errata: ISO 10846-4:2003 6.2 NOTE 1 prints
the 0,5 dB bias of Inequality (3) as "05 dB", and ISO 10846-5:2008 B.3.6
and Table B.1 round the linearity term 1,5/(2 sqrt 3) = 0,433 dB to
0,5 dB, as ISO 10846-2 does for its own terms.
* The ISO 10846 fiche prints the band levels, and a line on f_UL counts
The transfer-stiffness fiche now carries the one-third-octave band levels
the test report of ISO 10846-2 and -3 presents, prints the line count of a
band short of five valid lines, and reads its low-frequency headline at the
lowest valid line, so an indirect result no longer boxes the resonance
region Inequality (2) rules out. The L_k(f) plot draws the excluded lines
apart.
DrivingPointStiffnessResult.valid keeps a line that sits exactly on the
2 dB threshold, since ISO 10846-5 8.3 states the 2 dB for f <= f_UL. The
band-average and Annex B docstrings attribute the 2 dB to 8.3 and B.3.5 and
describe Table B.1 as the expressions rounded up to one decimal.
The resilient-element figures name their band axis in Spanish, keep the
legend clear of the markers, say so when no band holds five lines, label
the level-difference curve as a difference rather than a verdict, and fit
a figure they draw themselves to its canvas.
* Conformance rows for ISO 10846 cite the linearity test per part and state the NOTE 1 bias exactly
The linearity row cites clause 7.7 of ISO 10846-2 and 7.6 of ISO 10846-3,
the two numbers the parts print. The ISO 10846-4 NOTE 1 row states the
worst-case force-level bias on the Inequality (3) bound, 0,537 dB, as the
0,5 dB the note prints to one decimal. The Formula (7) row covers the bands
at or below f_UL, and the Table B.1 row names its inputs as the B.3
expressions rounded up to one decimal.
* The resilient-element guide, errata and figures say what the standards print
The ISO 10846-2:2008 clause 7.6.1 cross-reference, which sends the
unidirectionality pre-run to the blocked-output inequality of 6.1 instead of
the unwanted-input one of 6.4, is registered in the errata in both
languages. The Annex B entry of ISO 10846-5 is withdrawn: Table B.1 rounds
the three rectangular terms up to one decimal, the conservative rounding an
uncertainty may take, and the guide now says so for Parts 2 and 5.
The guide cites the linearity test per part (7.7 of Parts 2, 4 and 5, 7.6 of
Part 3), puts the preload, creep and temperature conditioning back among
what it leaves to the operator, says that only the unidirectionality
pre-run is judged from the spectra, attributes the 2 dB of Formula (7) to
8.3 and B.3.5, names the input-side mass a force distribution plate with
its own symbol, gives the |T| = 0,1 crossing of the example element as
187,5 Hz, and reproduces the driving-point figure by hand. The fiche section
and example describe the band levels it now prints.
* The fiche keeps a wide sweep on one page, and the guides compare stiffness levels and judge the transmissibility line by line
* The generated pages follow the layers below
* The labels the ISO 10846-4 and -5 plots share are named once