Python library for 1D statistical tolerancing analysis and design.
PyPI: https://pypi.org/project/dimstack/
Docs: https://phcreery.github.io/dimstack/
import dimstack as ds
ds.display.mode(ds.display.DisplayMode.RICH)
k = 0.25
target_process_sigma = 3
std_dev = 0.036 / target_process_sigma
m1 = dim = ds.dim.Basic(
nom=208,
tol=ds.tol.Bilateral.symmetric(0.036),
name="a",
desc="Shaft",
).review(
distribution=ds.dist.Normal(208 + k * target_process_sigma * std_dev, std_dev),
)
m2 = dim = (
ds.dim.Basic(
nom=-1.75,
tol=ds.tol.Bilateral.unequal(0, 0.06),
name="b",
desc="Retainer ring",
)
.review()
.assume_normal_dist(3)
)
m3 = dim = (
ds.dim.Basic(
nom=-23,
tol=ds.tol.Bilateral.unequal(0, 0.12),
name="c",
desc="Bearing",
)
.review()
.assume_normal_dist(3)
)
m4 = dim = (
ds.dim.Basic(
nom=20,
tol=ds.tol.Bilateral.symmetric(0.026),
name="d",
desc="Bearing Sleeve",
)
.review()
.assume_normal_dist(3)
)
m5 = dim = (
ds.dim.Basic(
nom=-200,
tol=ds.tol.Bilateral.symmetric(0.145),
name="e",
desc="Case",
)
.review()
.assume_normal_dist(3)
)
m6 = ds.dim.Basic(
nom=20,
tol=ds.tol.Bilateral.symmetric(0.026),
name="f",
desc="Bearing Sleeve",
)
m7 = dim = (
ds.dim.Basic(
nom=-23,
tol=ds.tol.Bilateral.unequal(0, 0.12),
name="g",
desc="Bearing",
)
.review()
.assume_normal_dist(3)
)
items = [m1, m2, m3, m4, m5, m7]
stack = ds.dim.ReviewedStack(name="stacks on stacks", dims=items)
stack.to_basic_stack().show()
stack.show()
ds.calc.Closed(stack).show()
ds.calc.WC(stack).show()
ds.calc.RSS(stack).show()
ds.calc.MRSS(stack).show()
designed_for = ds.calc.SixSigma(stack, at=4.5)
designed_for.show()
spec = ds.dim.Requirement("stack spec", "", distribution=designed_for.distribution, LL=0.05, UL=0.8)
spec.show()
ds.plot.StackPlot().add(stack).add(ds.calc.RSS(stack)).show()Returns:
DIMENSION STACK: stacks on stacks
ββββββ³βββββββ³βββββββββββββββββ³ββββ³ββββββββ³βββββββββββββββββ³ββββββββββββ³βββββββββββββββββββββββ
β ID β Name β Desc. β Β± β Nom. β Tol. β Sens. (a) β Abs. Bounds β
β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β 0 β a β Shaft β + β 208.0 β Β± 0.036 β 1 β [207.964, 208.036] β
β 1 β b β Retainer ring β - β 1.75 β +0.06 / +0 β 1 β [-1.81, -1.75] β
β 2 β c β Bearing β - β 23.0 β +0.12 / +0 β 1 β [-23.12, -23] β
β 3 β d β Bearing Sleeve β + β 20.0 β Β± 0.026 β 1 β [19.974, 20.026] β
β 4 β e β Case β - β 200.0 β Β± 0.145 β 1 β [-200.145, -199.855] β
β 5 β f β Bearing Sleeve β + β 20.0 β Β± 0.026 β 1 β [19.974, 20.026] β
β 6 β g β Bearing β - β 23.0 β +0.12 / +0 β 1 β [-23.12, -23] β
ββββββ΄βββββββ΄βββββββββββββββββ΄ββββ΄ββββββββ΄βββββββββββββββββ΄ββββββββββββ΄βββββββββββββββββββββββ
REVIEWED DIMENSION STACK: stacks on stacks
βββββββββββββββββββββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββ³ββββββββββββ³ββββββ³βββββββ³βββββββββ³ββββββββββ³βββββββββββββ³ββββββββββββββ³βββββββββββββ
β Dim. β Dist. β Shift (k) β C_p β C_pk β ΞΌ_eff β Ο_eff β Eff. Sigma β Yield Prob. β Reject PPM β
β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β 0: a Shaft + 208 Β± 0.036 β Normal Dist. ΞΌ=208.009, Ο=0.012 β 0.25 β 1.0 β 0.75 β 208.0 β 0.016 β Β± 2.25Ο β 98.76871101 β 12312.89 β
β 1: b Retainer ring - 1.75 +0.06 / +0 β Normal Dist. ΞΌ=-1.78, Ο=0.01 β 0.0 β 1.0 β 1.0 β -1.78 β 0.01 β Β± 3.0Ο β 99.73002039 β 2699.8 β
β 2: c Bearing - 23 +0.12 / +0 β Normal Dist. ΞΌ=-23.06, Ο=0.02 β 0.0 β 1.0 β 1.0 β -23.06 β 0.02 β Β± 3.0Ο β 99.73002039 β 2699.8 β
β 3: d Bearing Sleeve + 20 Β± 0.026 β Normal Dist. ΞΌ=20.0, Ο=0.00867 β 0.0 β 1.0 β 1.0 β 20.0 β 0.00867 β Β± 3.0Ο β 99.73002039 β 2699.8 β
β 4: e Case - 200 Β± 0.145 β Normal Dist. ΞΌ=-200.0, Ο=0.04833 β 0.0 β 1.0 β 1.0 β -200.0 β 0.04833 β Β± 3.0Ο β 99.73002039 β 2699.8 β
β 5: f Bearing Sleeve + 20 Β± 0.026 β Normal Dist. ΞΌ=20.0, Ο=0.00867 β 0.0 β 1.0 β 1.0 β 20.0 β 0.00867 β Β± 3.0Ο β 99.73002039 β 2699.8 β
β 6: g Bearing - 23 +0.12 / +0 β Normal Dist. ΞΌ=-23.06, Ο=0.01 β 0.0 β 2.0 β 2.0 β -23.06 β 0.01 β Β± 6.0Ο β 99.9999998 β 0.0 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββ΄ββββββββββββ΄ββββββ΄βββββββ΄βββββββββ΄ββββββββββ΄βββββββββββββ΄ββββββββββββββ΄βββββββββββββ
DIMENSION: stacks on stacks - Closed Analysis
ββββββ³βββββββββββββββββββββββββββββββββββββ³ββββββββ³ββββ³βββββββ³ββββββββββββββββββ³ββββββββββββ³ββββββββββββββββββ
β ID β Name β Desc. β Β± β Nom. β Tol. β Sens. (a) β Abs. Bounds β
β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β 7 β stacks on stacks - Closed Analysis β β + β 0.25 β +0.233 / -0.533 β 1 β [-0.283, 0.483] β
ββββββ΄βββββββββββββββββββββββββββββββββββββ΄ββββββββ΄ββββ΄βββββββ΄ββββββββββββββββββ΄ββββββββββββ΄ββββββββββββββββββ
DIMENSION: stacks on stacks - WC Analysis
ββββββ³βββββββββββββββββββββββββββββββββ³ββββββββ³ββββ³βββββββ³βββββββββββββββββ³ββββββββββββ³ββββββββββββββββββ
β ID β Name β Desc. β Β± β Nom. β Tol. β Sens. (a) β Abs. Bounds β
β‘ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β 8 β stacks on stacks - WC Analysis β β + β 0.1 β Β± 0.383 β 1 β [-0.283, 0.483] β
ββββββ΄βββββββββββββββββββββββββββββββββ΄ββββββββ΄ββββ΄βββββββ΄βββββββββββββββββ΄ββββββββββββ΄ββββββββββββββββββ
DIMENSION: stacks on stacks - RSS Analysis
ββββββ³ββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββββββββββββββ³ββββ³βββββββ³βββββββββββββββββ³ββββββββββββ³ββββββββββββββββββββββ
β ID β Name β Desc. β Β± β Nom. β Tol. β Sens. (a) β Abs. Bounds β
β‘ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β 9 β stacks on stacks - RSS Analysis β (assuming inputs with Normal Dist. & uniform SD) β + β 0.1 β Β± 0.17825 β 1 β [-0.07825, 0.27825] β
ββββββ΄ββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββ΄βββββββ΄βββββββββββββββββ΄ββββββββββββ΄ββββββββββββββββββββββ
DIMENSION: stacks on stacks - MRSS Analysis
ββββββ³βββββββββββββββββββββββββββββββββββ³βββββββββββββββββββββββββββββββββββββββββββββββββββ³ββββ³βββββββ³βββββββββββββββββ³ββββββββββββ³ββββββββββββββββββββββ
β ID β Name β Desc. β Β± β Nom. β Tol. β Sens. (a) β Abs. Bounds β
β‘βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β 10 β stacks on stacks - MRSS Analysis β (assuming inputs with Normal Dist. & uniform SD) β + β 0.1 β Β± 0.24046 β 1 β [-0.14046, 0.34046] β
ββββββ΄βββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββ΄βββββββ΄βββββββββββββββββ΄ββββββββββββ΄ββββββββββββββββββββββ
REVIEWED DIMENSION: stacks on stacks - '6 Sigma' Analysis
ββββββββββββββββββββββββββββββββββββββββββββββββββββ³ββββββββββββββββββββββββββββββββ³ββββββββββββ³ββββββ³βββββββ³ββββββββ³ββββββββββ³βββββββββββββ³ββββββββββββββ³βββββββββββββ
β Dim. β Dist. β Shift (k) β C_p β C_pk β ΞΌ_eff β Ο_eff β Eff. Sigma β Yield Prob. β Reject PPM β
β‘ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β 11: stacks on stacks - '6... + 0.1 Β± 0.26016 β Normal Dist. ΞΌ=0.1, Ο=0.05781 β 0.0 β 1.5 β 1.5 β 0.1 β 0.05781 β Β± 4.5Ο β 99.99932047 β 6.8 β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββ΄ββββββββββββ΄ββββββ΄βββββββ΄ββββββββ΄ββββββββββ΄βββββββββββββ΄ββββββββββββββ΄βββββββββββββ
REQUIREMENT: stack spec
ββββββββββββββ³ββββββββ³ββββββββββββββββββββββββββββββββ³βββββββββ³βββββββββββββββ³ββββββββββββββ³βββββββββββββ
β Name β Desc. β Distribution β Median β Spec. Limits β Yield Prob. β Reject PPM β
β‘ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ©
β stack spec β β Normal Dist. ΞΌ=0.1, Ο=0.05781 β 0.425 β [0.05, 0.8] β 80.64418072 β 193558.19 β
ββββββββββββββ΄ββββββββ΄ββββββββββββββββββββββββββββββββ΄βββββββββ΄βββββββββββββββ΄ββββββββββββββ΄βββββββββββββ
dimstack works great as a library in a python script, in REPL, or in JupyterLab.
%pip install -q dimstack
uv run python -m unittest
python -m mkdocs build
python -m mkdocs serve
python -m mkdocs gh-deploy
uv run mkdocs build
uv run mkdocs serve
uv run mkdocs gh-deploy
First bump version in pyproject.toml, then
uv build
uv publish
- https://d2t1xqejof9utc.cloudfront.net/files/147765/Dimensioning%20and%20Tolerancing%20Handbook.pdf?1541238602
- http://www.newconceptzdesign.com/stackups/
- https://github.com/slightlynybbled/tol-stack
- https://www.mitcalc.com/doc/tolanalysis1d/help/en/tolanalysis1d.htm
- https://clas.iusb.edu/math-compsci/_prior-thesis/YFeng_thesis.pdf
- https://ris.utwente.nl/ws/portalfiles/portal/6632975/Salomons96computer1.pdf
- https://ris.utwente.nl/ws/files/6632926/Salomons96computer2.pdf

