Lead the API pages with the module, and type the conformance report as data (#369)
Two things the pages were saying about themselves rather than about their
subject.
All 120 generated API pages opened with the "auto-generated from the source
docstrings, do not edit by hand" note. That is a message to whoever might edit
the file, and it was standing where the module's own summary belongs: it was
the paragraph a search result quoted and the one the `speakable` selector
points assistants at. The summary leads now and the note follows it.
The conformance report page was typed as an article. It is a machine-generated
table with a fixed schema, regenerated by CI, downloadable at a stable URL, so
it is a Dataset, and it is the most citable object the project owns. Both
language versions now declare one, with the column schema, the download URL
and the DOI. The counts in the description are read from the report itself
rather than written out.
451 pages build, html-validate clean, i18n parity holds, the site-reports and
conformance-claims gates pass, and the three JSON-LD blocks on each
conformance page parse.
Geometry drawings: devices, measurement layouts and the FDTD domain (#385)
* Geometry drawings: devices, measurement layouts and the FDTD domain
Extends the to-scale geometry API from the materials batch to the
devices and set-ups around them:
- Reactive silencers: side cuts of the expansion chamber (plain and
with extended tubes), the side-branch Helmholtz resonator (cavity
drawn as its equal-volume cube, volume annotated) and the
quarter-wave stub, using equivalent circular diameters 2 sqrt(S/pi).
ReactiveSilencerResult retains its constructor geometry and gains
plot_geometry().
- Image-source room plan: ImageSourceResult.plot_geometry() draws the
mirror-room lattice with images coloured by reflection order (low
orders on top), source and receiver marked.
- Barrier section: direct and diffracted paths over ground with the
path-length difference annotated; BarrierInsertionLoss retains the
five distances/heights and the optional thickness.
- Microphone position arrays: plot_microphone_positions() is the
library's first 3-D drawing (numbered points on a wireframe
hemisphere or sphere with the reflecting plane), fed directly by
measurement_positions()/precision_positions().
- Wall apertures: slit or circular section to scale with transmitted
wavefronts; ApertureTransmissionResult retains width/radius/depth.
- Baffled piston with its normalised far-field lobe at a chosen
frequency (RadiatingPistonResult.plot_geometry()).
- Plenum chamber: the box honours the line of sight r and its angle
exactly; outlet mouth to scale, wall area annotated.
- FDTD domain preview: FDTD2D.plot_geometry() draws the configured
domain before any time stepping (obstacles, sponge layers, impedance
and rigid edges, sources, optional probes); the solver now records
sponge_width, sponge_sides and edge_impedance as public read-only
configuration.
Six new public plot_*_geometry functions, 40 generated SVG variants
embedded in seven guides (EN/ES and the GitHub mirrors) with runnable
snippets, curated table and generated API pages updated, and 14 new
tests (retention round-trips, refusal paths, validation before any
figure is created, 3-D smoke).
* Address review: probes and frequency-index validation, immutable edge record
- plot_fdtd_domain validates probes before any figure exists.
- RadiatingPistonResult.plot_geometry bounds-checks frequency_index
with a descriptive ValueError.
- FDTD2D.edge_impedance is a MappingProxyType over a private copy.
- Plenum kwargs docstring matches where they are forwarded; the FDTD
preview prose no longer claims source-in-obstacle catching (the
solver already rejects that at add_source).
* Address static analysis: shared constants, extracted helpers, flat calls
- Silencer kinds, axis labels, legend placement and repeated messages
hoisted into module constants; identical EN/ES strings dropped from
the translation table.
- plot_silencer_geometry split into per-kind validators (and its
artist kwargs removed, matching the geometry-dict entry point);
_draw_hr_cavity and the FDTD sponge/edge painters extracted.
- Aperture opening computed without a nested conditional; exception
tests build their arrays outside pytest.raises.
- Regenerated API pages for the touched docstrings.
* Split the side-branch dimension resolution out of the drawing routine
Keeps _draw_branch_silencer under the cognitive-complexity threshold;
drawing output unchanged.
Geometry drawings: secondary set-ups across building, materials and rooms (#386)
* Geometry drawings: secondary set-ups across building, materials and rooms
Nine more to-scale drawings, each with the realistic dimensions of its
standard rig or textbook case:
- Composite facade elevation with the element areas to scale
(FacadePredictionResult retains its elements).
- Mass-spring-mass double wall: 12,5 mm plasterboard leaves on a
100 mm cavity, resonance annotated (double-wall results retain
mass1/mass2/gap).
- Plate junctions L/T1/T2/X following the junction_transmission
conventions (plate 1 continuous for T1/X, the perpendicular pair
continuous for T2/X); results retain both thicknesses.
- In-situ road absorption set-up: source at 1,25 m, microphone at
0,25 m, the 1,34 m sampled radius of the 5 ms window.
- Dynamic-stiffness resonance rig: 200 mm square specimen under the
8 kg load plate.
- Free-field diffusion goniometer in plan: 37 microphones on the 5 m
arc, source at 10 m.
- Baffled radiating plate (RadiationEfficiencyResult already carries
its geometry).
- Open-plan measurement line with rD/rP marked (OpenPlanResult
retains the microphone positions).
- Face-to-face p-p intensity probe with the 12 mm spacer
(IntensityResult retains the spacing).
Nine public plot_* functions, retention fields on six results
(trailing, defaulted), 36 generated SVG variants embedded in nine
guides (EN/ES and the GitHub mirrors, including the first figures of
the junction-transmission and vibration-sound-power guides), curated
table and generated API pages updated, and 10 new tests.
* Address review: junction alt texts, retained-field docs, small guards
- The T-junction figure alt texts now name T2, matching the drawn
geometry and the runnable example.
- Retained-geometry fields documented on all six result docstrings
(and the generated API pages regenerated).
- plot_facade_elements rejects an explicit zero area instead of
silently substituting the nominal tile, and its kwargs contract now
names the first element rectangle; plot_goniometer_geometry
validates sample_width and documents it in the curated table.
- Facade prose spelling unified with the surrounding sections.
* Drop the identical-in-both-languages unit literal from the translation table
Lead the API pages with the module, and type the conformance report as data (#369)
Two things the pages were saying about themselves rather than about their
subject.
All 120 generated API pages opened with the "auto-generated from the source
docstrings, do not edit by hand" note. That is a message to whoever might edit
the file, and it was standing where the module's own summary belongs: it was
the paragraph a search result quoted and the one the `speakable` selector
points assistants at. The summary leads now and the note follows it.
The conformance report page was typed as an article. It is a machine-generated
table with a fixed schema, regenerated by CI, downloadable at a stable URL, so
it is a Dataset, and it is the most citable object the project owns. Both
language versions now declare one, with the column schema, the download URL
and the DOI. The counts in the description are read from the report itself
rather than written out.
451 pages build, html-validate clean, i18n parity holds, the site-reports and
conformance-claims gates pass, and the three JSON-LD blocks on each
conformance page parse.
Lead the API pages with the module, and type the conformance report as data (#369)
Two things the pages were saying about themselves rather than about their
subject.
All 120 generated API pages opened with the "auto-generated from the source
docstrings, do not edit by hand" note. That is a message to whoever might edit
the file, and it was standing where the module's own summary belongs: it was
the paragraph a search result quoted and the one the `speakable` selector
points assistants at. The summary leads now and the note follows it.
The conformance report page was typed as an article. It is a machine-generated
table with a fixed schema, regenerated by CI, downloadable at a stable URL, so
it is a Dataset, and it is the most citable object the project owns. Both
language versions now declare one, with the column schema, the download URL
and the DOI. The counts in the description are read from the report itself
rather than written out.
451 pages build, html-validate clean, i18n parity holds, the site-reports and
conformance-claims gates pass, and the three JSON-LD blocks on each
conformance page parse.
Lead the API pages with the module, and type the conformance report as data (#369)
Two things the pages were saying about themselves rather than about their
subject.
All 120 generated API pages opened with the "auto-generated from the source
docstrings, do not edit by hand" note. That is a message to whoever might edit
the file, and it was standing where the module's own summary belongs: it was
the paragraph a search result quoted and the one the `speakable` selector
points assistants at. The summary leads now and the note follows it.
The conformance report page was typed as an article. It is a machine-generated
table with a fixed schema, regenerated by CI, downloadable at a stable URL, so
it is a Dataset, and it is the most citable object the project owns. Both
language versions now declare one, with the column schema, the download URL
and the DOI. The counts in the description are read from the report itself
rather than written out.
451 pages build, html-validate clean, i18n parity holds, the site-reports and
conformance-claims gates pass, and the three JSON-LD blocks on each
conformance page parse.
Lead the API pages with the module, and type the conformance report as data (#369)
Two things the pages were saying about themselves rather than about their
subject.
All 120 generated API pages opened with the "auto-generated from the source
docstrings, do not edit by hand" note. That is a message to whoever might edit
the file, and it was standing where the module's own summary belongs: it was
the paragraph a search result quoted and the one the `speakable` selector
points assistants at. The summary leads now and the note follows it.
The conformance report page was typed as an article. It is a machine-generated
table with a fixed schema, regenerated by CI, downloadable at a stable URL, so
it is a Dataset, and it is the most citable object the project owns. Both
language versions now declare one, with the column schema, the download URL
and the DOI. The counts in the description are read from the report itself
rather than written out.
451 pages build, html-validate clean, i18n parity holds, the site-reports and
conformance-claims gates pass, and the three JSON-LD blocks on each
conformance page parse.
Lead the API pages with the module, and type the conformance report as data (#369)
Two things the pages were saying about themselves rather than about their
subject.
All 120 generated API pages opened with the "auto-generated from the source
docstrings, do not edit by hand" note. That is a message to whoever might edit
the file, and it was standing where the module's own summary belongs: it was
the paragraph a search result quoted and the one the `speakable` selector
points assistants at. The summary leads now and the note follows it.
The conformance report page was typed as an article. It is a machine-generated
table with a fixed schema, regenerated by CI, downloadable at a stable URL, so
it is a Dataset, and it is the most citable object the project owns. Both
language versions now declare one, with the column schema, the download URL
and the DOI. The counts in the description are read from the report itself
rather than written out.
451 pages build, html-validate clean, i18n parity holds, the site-reports and
conformance-claims gates pass, and the three JSON-LD blocks on each
conformance page parse.