WillTools 2026-09-09 -- clean snapshot of the development repo for review
ci / test (push) Successful in 6m18s

History-free snapshot of the private development repository at cbe45c5
(2026-09-09). Code, docs and public catalogue only; no plant or job
knowledge layers, no client or job names (tools/scrub.py clean). The
intro deck is left out of this snapshot because its slide images could
not be checked for job drawings.
This commit is contained in:
2026-09-09 08:32:15 -05:00
commit 8e6ee31596
406 changed files with 223435 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
"""An opening that all but reaches an edge must not leave a fibre behind.
A real piece had an opening drawn to 11.1041 ft on a panel 11.1042 ft wide.
The 0.001 in of concrete left over was, arithmetically, the outermost material
in the section -- so every in-plane stress was reported at a fibre 110 in from
the centroid instead of 23 in, on a sliver nothing could be cast into. The
piece came back at 432 psi where a commercial check of the same piece said
162, and it was one of only two failures in a 194-piece sweep.
The stress at a fibre that is not really there is a stress nobody has.
"""
import pytest
from panellift import section
from panellift.model import Blockout
from conftest import make_panel
def _panel_with_opening(gap_ft):
"""A panel whose only opening stops `gap_ft` short of the far edge."""
panel = make_panel()
panel.blockouts = [Blockout(
name='O1', x0=10.0, y0=3.0, length=4.0,
width=panel.width_ft - 3.0 - gap_ft)]
return panel
@pytest.mark.parametrize('gap_ft', [0.0, 1e-4, 1e-3, 0.004])
def test_a_drafting_sliver_is_not_the_extreme_fibre(gap_ft):
"""Whether the opening lands exactly on the edge or a thousandth short,
the section has to be the same piece of concrete."""
exact = section.NetSection(_panel_with_opening(0.0), 12.0)
nearly = section.NetSection(_panel_with_opening(gap_ft), 12.0)
assert nearly.width_in == pytest.approx(exact.width_in, abs=0.1)
assert nearly.y_extremes_in[1] == pytest.approx(exact.y_extremes_in[1],
abs=0.1)
assert nearly.iy_in4 == pytest.approx(exact.iy_in4, rel=0.01)
def test_the_extreme_fibre_is_inside_the_concrete():
"""The outermost fibre cannot be further from the centroid than the
material is. This is what the sliver broke: 110 in of lever arm on a
section only 46 in wide."""
net = section.NetSection(_panel_with_opening(1e-3), 12.0)
reach = max(abs(v) for v in net.y_extremes_in)
assert reach <= net.width_in, (
'extreme fibre %.1f in from the centroid, but the section is only '
'%.1f in wide' % (reach, net.width_in))
def test_an_opening_well_short_of_the_edge_keeps_its_strip():
"""The snap is a noise floor, not a licence to delete real concrete. A
strip an inch and a half wide is still a strip."""
panel = _panel_with_opening(0.125) # 1.5 in of concrete left
net = section.NetSection(panel, 12.0)
strips = section.strips_at(panel, 12.0)
assert len(strips) == 2
assert net.y_extremes_in[1] > 0.5 * panel.width_ft * 12.0