FiWiControl/tests/test_spc.py

34 lines
888 B
Python

# Copyright (c) 2026 Umber
#
# Licensed under the Apache License, Version 2.0; see LICENSE.
from __future__ import annotations
import pytest
np = pytest.importorskip("numpy")
def test_shewhart_individuals_limits() -> None:
from fiwicontrol.spc import ShewhartControlChart
x = np.array([1.0, 1.1, 0.9, 1.05, 0.95, 1.02])
chart = ShewhartControlChart(k=3.0).fit_individuals(x)
lo, c, hi = chart.limits()
assert lo < c < hi
assert not chart.is_out_of_control(c)
assert chart.is_out_of_control(c + 10 * (hi - lo))
def test_hotelling_t2_ucl() -> None:
pytest.importorskip("scipy")
from fiwicontrol.spc import HotellingT2
rng = np.random.default_rng(0)
m, p = 40, 3
base = rng.standard_normal((m, p))
ht = HotellingT2().fit(base)
ucl = ht.ucl(alpha=0.05)
in_control = np.mean(base, axis=0)
assert ht.t2(in_control) < ucl