pyaisc360
Executable design verification to ANSI/AISC 360-16, Specification for Structural Steel Buildings (July 7, 2016) — organised chapter-by-chapter, typed, and traceable back to the equation number and page it came from.
Built to drop into open-source structural tooling (FreeCAD / BIMSteelAuto, OpenSees, BlenderBIM). No runtime dependencies, so it imports inside FreeCAD's embedded interpreter.
Install
pip install pyaisc360
Requires Python 3.10+. No runtime dependencies.
Bring your own sections
There is no shapes database here — the AISC Shapes Database is a separate publication, and most users already have a section library. Point the adapter at whatever you have, in whatever units and under whatever names:
from pyaisc360 import SectionAdapter
# a metric profile record with its own naming
ipe300 = SectionAdapter(profile, metric=True, overrides={"Ag": "A_mm2", "Zx": "Wpl_y"})
ipe300.Ag # in.^2, converted
ipe300.rts # derived from Iy, Cw and Sx per Eq. F2-7 when not tabulated
Every result shows its workings
==============================================================================
Mn -- LRFD (phi = 0.90)
==============================================================================
limit state Mn [kip-in.]
------------------------------------------------------------------------------
yielding (plastic moment) 5,050
Mp = Fy*Zx = 50 x 101
lateral-torsional buckling 4,550 <-- governs
Lp < Lb <= Lr, inelastic LTB
------------------------------------------------------------------------------
governing: AISC 360-16, Eq. F2-2 (Sect. F2), p. 16.1-47
Mn 4,550
phi*Mn 4,095
------------------------------------------------------------------------------
Ru 3,000
demand / capacity 0.733 OK
==============================================================================
Status
Step 1 — scan and metadata mapping: complete. 372 equations, 43 tables and 120
sections catalogued in spec_index.json, with
the build plan in ROADMAP.md.
Step 2 — Wave 0 foundations: complete. core/ (units, config, results,
citations, exceptions), utils.py, materials.py and sections/. 175 tests, ruff
clean, mypy strict clean.
Wave 1 — Chapter E: complete. All 27 equations of Sects. E3–E7, plus Table B4.1a
in chapter_b.py. The Eq. E4-4 cubic is solved in closed form. 312 tests, including
AISC Manual Table 4-1a benchmarks and a regression lock confirmed bit-for-bit
against an independent Chapter E implementation over 184 shape/length combinations.
Wave 1 - Chapter F: complete. All 108 equations of Sects. F2-F13, plus Table B4.1b. Validated against AISC Manual Table 3-2 (W18x50, W16x26, W24x68, W24x55). 451 tests.
Wave 2 - Chapters G and D: complete. All 21 Chapter G equations (Sects. G1-G6, including the Sect. G2.1(a) phi = 1.00 exception, tension field action and stiffener sizing) and all 5 Chapter D equations plus the eight cases of Table D3.1. 594 tests.
Wave 2 - Chapter H and Appendices 6/7/8: complete. All 16 Chapter H equations (interaction, HSS torsion, flange rupture) and all 28 appendix equations (stability bracing, alternative stability methods, B1/B2 amplification). 722 tests.
Wave 3 - Chapter J: complete. All 44 equations of Sects. J2-J10, plus Tables J3.1 (minimum pretension), J3.2 (nominal fastener stresses) and the J2.5 weld strengths. 837 tests.
Wave 5 - Chapter C: complete. All 3 equations of Sects. C1-C3 -- notional loads,
the tau_b stiffness reduction, and the Sect. C3 effective-length rule -- wired into
DesignSettings.stability_method and coupled to the Appendix 8 B1/B2 amplifiers.
912 tests.
Wave 5 - Chapter K: complete. All 47 equations of Sects. K1-K5 -- plate-to-HSS, HSS-to-HSS truss and moment connections, and welds to rectangular HSS. Recovering Eq. K2-2b from a text-extraction defect raised the Specification's catalogued total from 372 to 373. 996 tests.
Wave 6 - Chapter I and Appendices 1-4: complete. All 39 Chapter I equations (Sects. I1-I8: encased and filled columns, composite flexure, the Sect. I5 interaction pair, load transfer, and stud and channel anchors) and all 33 equations of Appendices 1-4 (inelastic analysis, ponding, fatigue, fire). 1,138 tests.
373 of 373 equations implemented -- the Specification is complete. Chapters B through K plus Appendices 1-4 and 6-8. Chapters A, L, M and N carry no equations: they are scope, serviceability, fabrication and quality-assurance provisions rather than design calculations.
python -m pytest tests/ -q
Design rules
- Chapter = module.
chapter_e.pyis Chapter E and nothing else. - LRFD and ASD are one code path. Every public strength function returns nominal
strength plus the applicable φ and Ω, and a single
Basisflag selects which is applied (Eq. B3-1 / B3-2). No forked implementations. - Every function cites its source in the docstring: equation number, section, and
Specification page (
16.1-nn), taken from the generated index — not typed by hand. - Nothing is silently approximate. A provision outside a function's stated range of applicability raises, it does not extrapolate.
- Units are explicit. US customary (kip, in., ksi) internally, with a conversion layer at the boundary; unit intent is carried in the type annotations.
Regenerating the index
python tools/scan_spec.py --source /path/to/A360-16W.txt --out data/
python tools/gen_roadmap.py
Copyright note
ANSI/AISC 360-16 is copyrighted by the American Institute of Steel Construction. This repository contains no reproduction of the Specification text — only the design equations it defines (which are not themselves copyrightable) and citations by section, equation and page number. Users are expected to hold their own copy of the Specification and of the AISC Shapes Database, which is a separate publication and is therefore loaded at runtime rather than vendored here.
This library is an aid to a qualified engineer, not a substitute for one. Every result is subject to the same professional review as a hand calculation.
License
MIT. See LICENSE.
Metadata
Release files for pyaisc360 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyaisc360-0.1.1.tar.gz | 274.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyaisc360-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 464.8 kB
Release files / pyaisc360-0.1.1.tar.gz
| Download URL | pyaisc360-0.1.1.tar.gz |
|---|---|
| Size | 274.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ba192105b41155a420bea9b11d7808f83c0138fee5592e5bd24ffe75178a0e70
|
|
BLAKE2b-256 checksum How to use checksums |
8d2aa7330c92eb4c297a7baf346924cd06349950507d9ef12b8cca420fead207
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / pyaisc360-0.1.1-py3-none-any.whl
| Download URL | pyaisc360-0.1.1-py3-none-any.whl |
|---|---|
| Size | 189.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d63d08d93b17d5dd0bb80be3d071faff7963241a607953896fca1a23d1171376
|
|
BLAKE2b-256 checksum How to use checksums |
f04949f67421281db884ca4424da38e335800c25eb0b3081a7bc14b8456ca322
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency log