Every catalogue row has one shape and says what its source claims for each cell (#862)
* Every published catalogue cell is pinned to its last digit
The 1982 rows of the 23 published catalogues are dumped once, every float by
its repr, into tests/data/published_catalogues/baseline.json. A test takes
that baseline through every change listed in tests/catalogue_fingerprint.py
and asserts that the result is, field for field, what the library builds
today. The page generator's check sees the numbers only as the site prints
them; this sees the last digit of a float and a hedge moved from one field to
another, so a change to how a row is built has to say what it moved.
* Every catalogue row has one shape and says what its source claims
The rows of every published catalogue share one base, and phonometry.io now
publishes it: CatalogueRow, BandedRow, CatalogueError and CATALOGUE_BASES.
A row gains basis, what the source claims a value is (measured, declared,
calculated, estimated or extended), read through basis_of. The estimate had
two spellings, SolidMaterial.estimated with is_estimate and
OrthotropicWood.estimated with is_estimated; both are gone, and the 35 cells
Hopkins Table A2 and Rossing Table 15.5 mark as estimates hold "estimated"
in basis.
A value the page prints in another unit is no longer derived: the 116 cells
of Ver & Beranek Table 14.1 in degrees Fahrenheit and psi and the nine of
Long Table 7.1 in sabins keep the printed figure and unit in converted. A
cell the page leaves blank and prints on another row (Ver & Beranek Table
8.7, ASHRAE Table 30, Harris Chapter 32) names that row in carried.
is_derived now answers only for what the library computes. The published
catalogues page marks converted and carried cells as such, with the printed
figure on a converted one, and a test walks every hedged cell of every
catalogue to hold the page to it.
OrthotropicWood and PlateauMaterial take their fields by name only, and no
row class is slotted, because on Python 3.13 a slotted dataclass cannot call
super() without arguments from its own methods. No published value changes:
the fingerprint lists the 54 rows the move touched and nothing else moved.
* A catalogue cell no longer claims a unit or a derivation its page does not print
Long prints the six figures of his musician with no unit. The row now says
so in its note and why they are read as sabins, and `converted` is described
everywhere as the page's figure and its unit rather than as what the page
prints; the published catalogues page words its tooltip the same way. A
figure a packaged table prints with another SI prefix, such as the
megapascals of Rossing Table 15.5, keeps no `converted` entry, and the
docstring says so.
`carried` covers a value the page gives by reference to another row, which
includes the three Harris rows that print "Parecido al anterior" and no row
number, not only a cell left blank under a block. The two ASHRAE rows that
carry a diameter down no longer call it a derivation in their notes, and the
damping paragraph of the catalogues page no longer says converted cells are
marked as worked out.
The fingerprint compares every row as the text the baseline holds, so a
float served as an integer, or a flag served as a number, is a change. The
page generator refuses a cell whose hedges it cannot show, two on one value
or an estimate, a conversion or a carried value on an interval, a list or a
word, instead of publishing it with one of them missing; the test walks
every hedge of every published row to hold it to that.
The older unreleased notes that still named `is_estimated`, the `estimated`
field and cells marked derived now name `basis`, `basis_of` and `converted`.
The scripts and tests that import `CatalogueRow` take it from
`phonometry.io`, and the Spanish pages spell the sabin one way.
* An approximate interval keeps its tilde on the catalogue page
The porosity Cox Table 6.5 prints for granular vermiculite is an interval with
a tilde, and the page showed the bare interval. The range and bound kinds have
no mark of their own, so the tilde now goes into the cell text.
The fingerprint's migration test also requires every field outside the hedges
the step moves to stay equal, basis_of names all five bases, the baseline's
README states the terms that cover it, and the test that probed the
interpreter for the slotted super() failure is gone: Python 3.13.15 carries
the fix and 3.13.5 does not, so it tested the Python patch release, not the
library.
* A list of readings printed with a tilde keeps it on the catalogue page
Like an interval, a cell holding several readings has no mark of its own for
a tilde, so it goes into the text. The generator now refuses an approximate
hedge only on a printed word, which has nowhere to show it. No published cell
changes.
* A catalogue row refuses a basis outside the five words
The catalogue page and every reader of basis_of act on measured, declared,
calculated, estimated and extended only, so a row built with any other word,
such as a misspelt estimate, now raises CatalogueError instead of reaching
the page as a printed number.
Every catalogue row has one shape and says what its source claims for each cell (#862)
* Every published catalogue cell is pinned to its last digit
The 1982 rows of the 23 published catalogues are dumped once, every float by
its repr, into tests/data/published_catalogues/baseline.json. A test takes
that baseline through every change listed in tests/catalogue_fingerprint.py
and asserts that the result is, field for field, what the library builds
today. The page generator's check sees the numbers only as the site prints
them; this sees the last digit of a float and a hedge moved from one field to
another, so a change to how a row is built has to say what it moved.
* Every catalogue row has one shape and says what its source claims
The rows of every published catalogue share one base, and phonometry.io now
publishes it: CatalogueRow, BandedRow, CatalogueError and CATALOGUE_BASES.
A row gains basis, what the source claims a value is (measured, declared,
calculated, estimated or extended), read through basis_of. The estimate had
two spellings, SolidMaterial.estimated with is_estimate and
OrthotropicWood.estimated with is_estimated; both are gone, and the 35 cells
Hopkins Table A2 and Rossing Table 15.5 mark as estimates hold "estimated"
in basis.
A value the page prints in another unit is no longer derived: the 116 cells
of Ver & Beranek Table 14.1 in degrees Fahrenheit and psi and the nine of
Long Table 7.1 in sabins keep the printed figure and unit in converted. A
cell the page leaves blank and prints on another row (Ver & Beranek Table
8.7, ASHRAE Table 30, Harris Chapter 32) names that row in carried.
is_derived now answers only for what the library computes. The published
catalogues page marks converted and carried cells as such, with the printed
figure on a converted one, and a test walks every hedged cell of every
catalogue to hold the page to it.
OrthotropicWood and PlateauMaterial take their fields by name only, and no
row class is slotted, because on Python 3.13 a slotted dataclass cannot call
super() without arguments from its own methods. No published value changes:
the fingerprint lists the 54 rows the move touched and nothing else moved.
* A catalogue cell no longer claims a unit or a derivation its page does not print
Long prints the six figures of his musician with no unit. The row now says
so in its note and why they are read as sabins, and `converted` is described
everywhere as the page's figure and its unit rather than as what the page
prints; the published catalogues page words its tooltip the same way. A
figure a packaged table prints with another SI prefix, such as the
megapascals of Rossing Table 15.5, keeps no `converted` entry, and the
docstring says so.
`carried` covers a value the page gives by reference to another row, which
includes the three Harris rows that print "Parecido al anterior" and no row
number, not only a cell left blank under a block. The two ASHRAE rows that
carry a diameter down no longer call it a derivation in their notes, and the
damping paragraph of the catalogues page no longer says converted cells are
marked as worked out.
The fingerprint compares every row as the text the baseline holds, so a
float served as an integer, or a flag served as a number, is a change. The
page generator refuses a cell whose hedges it cannot show, two on one value
or an estimate, a conversion or a carried value on an interval, a list or a
word, instead of publishing it with one of them missing; the test walks
every hedge of every published row to hold it to that.
The older unreleased notes that still named `is_estimated`, the `estimated`
field and cells marked derived now name `basis`, `basis_of` and `converted`.
The scripts and tests that import `CatalogueRow` take it from
`phonometry.io`, and the Spanish pages spell the sabin one way.
* An approximate interval keeps its tilde on the catalogue page
The porosity Cox Table 6.5 prints for granular vermiculite is an interval with
a tilde, and the page showed the bare interval. The range and bound kinds have
no mark of their own, so the tilde now goes into the cell text.
The fingerprint's migration test also requires every field outside the hedges
the step moves to stay equal, basis_of names all five bases, the baseline's
README states the terms that cover it, and the test that probed the
interpreter for the slotted super() failure is gone: Python 3.13.15 carries
the fix and 3.13.5 does not, so it tested the Python patch release, not the
library.
* A list of readings printed with a tilde keeps it on the catalogue page
Like an interval, a cell holding several readings has no mark of its own for
a tilde, so it goes into the text. The generator now refuses an approximate
hedge only on a printed word, which has nowhere to show it. No published cell
changes.
* A catalogue row refuses a basis outside the five words
The catalogue page and every reader of basis_of act on measured, declared,
calculated, estimated and extended only, so a row built with any other word,
such as a misspelt estimate, now raises CatalogueError instead of reaching
the page as a printed number.
Resilient moduli, damping treatments, carpets and the nonlinearity of solids (#850)
* Three small catalogues: resilient moduli, damping treatments and carpets
Vigran's Table 8.3 gives the dynamic modulus of six resilient materials
under a static load of about 2 kPa, from which a layer's dynamic
stiffness is the modulus over its thickness. Table 14.2 of Harris (1977)
rates eight asphalt felt treatments by the decay rate of the chapter's
standard steel panel at 160 Hz, held as a decay rate and not converted
into a loss factor the page does not print. Harris 3e Tables 30.2 and
30.3 describe nineteen carpets by their pile and rate them by their noise
reduction coefficient.
Five pile weights of Table 30.2 print an imperial half that is not the
metric one: three follow from 0.035 kg/m2 per oz/yd2 rather than the
0.0339 of the definition, one from neither, and one lost a digit to a
decimal comma. They are registered, and the four in doubt serve nothing.
* The nonlinearity parameter of solids
Rossing's Table 6.5 gives the ultrasonic beta of eight solids at room
temperature, averaged over the pure-mode directions of a cubic crystal.
It is the page's own beta, -(3 + K3/K2), which for a liquid is B/A + 2
and not B/A, and the module and the catalogue page say so. Five rows are
structures rather than materials; the misspelt Flourite is kept as
printed and registered.
* Carpets after the absorption areas, and what the page says of fibre
The carpets section split the absorption section from its areas and the
finder cut it at the wrong heading. The chapter's own text says the type
of fibre makes no significant difference, and the prose now says so.
The one carpet printed with a wood fibre carries a note pointing at its
wool twin in Table 30.3.
* The catalogue filter matches every word column the table shows
Every catalogue row has one shape and says what its source claims for each cell (#862)
* Every published catalogue cell is pinned to its last digit
The 1982 rows of the 23 published catalogues are dumped once, every float by
its repr, into tests/data/published_catalogues/baseline.json. A test takes
that baseline through every change listed in tests/catalogue_fingerprint.py
and asserts that the result is, field for field, what the library builds
today. The page generator's check sees the numbers only as the site prints
them; this sees the last digit of a float and a hedge moved from one field to
another, so a change to how a row is built has to say what it moved.
* Every catalogue row has one shape and says what its source claims
The rows of every published catalogue share one base, and phonometry.io now
publishes it: CatalogueRow, BandedRow, CatalogueError and CATALOGUE_BASES.
A row gains basis, what the source claims a value is (measured, declared,
calculated, estimated or extended), read through basis_of. The estimate had
two spellings, SolidMaterial.estimated with is_estimate and
OrthotropicWood.estimated with is_estimated; both are gone, and the 35 cells
Hopkins Table A2 and Rossing Table 15.5 mark as estimates hold "estimated"
in basis.
A value the page prints in another unit is no longer derived: the 116 cells
of Ver & Beranek Table 14.1 in degrees Fahrenheit and psi and the nine of
Long Table 7.1 in sabins keep the printed figure and unit in converted. A
cell the page leaves blank and prints on another row (Ver & Beranek Table
8.7, ASHRAE Table 30, Harris Chapter 32) names that row in carried.
is_derived now answers only for what the library computes. The published
catalogues page marks converted and carried cells as such, with the printed
figure on a converted one, and a test walks every hedged cell of every
catalogue to hold the page to it.
OrthotropicWood and PlateauMaterial take their fields by name only, and no
row class is slotted, because on Python 3.13 a slotted dataclass cannot call
super() without arguments from its own methods. No published value changes:
the fingerprint lists the 54 rows the move touched and nothing else moved.
* A catalogue cell no longer claims a unit or a derivation its page does not print
Long prints the six figures of his musician with no unit. The row now says
so in its note and why they are read as sabins, and `converted` is described
everywhere as the page's figure and its unit rather than as what the page
prints; the published catalogues page words its tooltip the same way. A
figure a packaged table prints with another SI prefix, such as the
megapascals of Rossing Table 15.5, keeps no `converted` entry, and the
docstring says so.
`carried` covers a value the page gives by reference to another row, which
includes the three Harris rows that print "Parecido al anterior" and no row
number, not only a cell left blank under a block. The two ASHRAE rows that
carry a diameter down no longer call it a derivation in their notes, and the
damping paragraph of the catalogues page no longer says converted cells are
marked as worked out.
The fingerprint compares every row as the text the baseline holds, so a
float served as an integer, or a flag served as a number, is a change. The
page generator refuses a cell whose hedges it cannot show, two on one value
or an estimate, a conversion or a carried value on an interval, a list or a
word, instead of publishing it with one of them missing; the test walks
every hedge of every published row to hold it to that.
The older unreleased notes that still named `is_estimated`, the `estimated`
field and cells marked derived now name `basis`, `basis_of` and `converted`.
The scripts and tests that import `CatalogueRow` take it from
`phonometry.io`, and the Spanish pages spell the sabin one way.
* An approximate interval keeps its tilde on the catalogue page
The porosity Cox Table 6.5 prints for granular vermiculite is an interval with
a tilde, and the page showed the bare interval. The range and bound kinds have
no mark of their own, so the tilde now goes into the cell text.
The fingerprint's migration test also requires every field outside the hedges
the step moves to stay equal, basis_of names all five bases, the baseline's
README states the terms that cover it, and the test that probed the
interpreter for the slotted super() failure is gone: Python 3.13.15 carries
the fix and 3.13.5 does not, so it tested the Python patch release, not the
library.
* A list of readings printed with a tilde keeps it on the catalogue page
Like an interval, a cell holding several readings has no mark of its own for
a tilde, so it goes into the text. The generator now refuses an approximate
hedge only on a printed word, which has nowhere to show it. No published cell
changes.
* A catalogue row refuses a basis outside the five words
The catalogue page and every reader of basis_of act on measured, declared,
calculated, estimated and extended only, so a row built with any other word,
such as a misspelt estimate, now raises CatalogueError instead of reaching
the page as a printed number.