55 rail = prepare(config,
None, drawing,
_rail(drawing))
56 assert rail.ok
and rail.derived[
"dome_source"] ==
"set on the rail"
57 for lockup, fill
in ((600.0, 3000.0), (500.0, 4200.0)):
58 p = prepare(config,
None, drawing, at_operating_point(
_rail(drawing), lockup_psia=lockup, fill_psig=fill))
59 assert p.derived[
"target_lockup_psia"] == pytest.approx(lockup, abs=0.01)
60 assert p.derived[
"copv_psig"] == pytest.approx(fill)
61 assert p.derived[
"dome_source"] ==
"solved for the rail's tank pressure"
63 only = at_operating_point(
_rail(drawing), lockup_psia=600.0)
64 assert only.dome_psia
is None and only.copv_pressure_psia == 3600.0
68 variables = [opt.Variable(
"lockup_psia",
"Tank pressure",
"psia", 500.0, 700.0, 600.0),
69 opt.Variable(
"copv_psig",
"Bottle fill",
"psig", 3000.0, 4500.0, 4000.0)]
70 st, _ = opt._candidate(
LayerXSettings(drawing_id=
"d", dome_psia=560.0, copv_pressure_psia=3600.0), variables,
71 {
"lockup_psia": 610.0,
"copv_psig": 3100.0},
None,
"impulse", 600.0)
72 assert (st.tank_pressure_psia, st.dome_psia, st.copv_pressure_psig, st.copv_pressure_psia) == (610.0,
None, 3100.0,
None)
78 def fake_prepare(config, runner, drawing, settings, overrides=None):
80 return SimpleNamespace(ok=
False, derived={}, checks=[SimpleNamespace(status=
"fail", label=
"stub", detail=
"")])
85 monkeypatch.setattr(sys.modules[
"engine.layerx.prepare"],
"prepare", fake_prepare)
86 out = sp.burn_point({
"config":
None,
"drawing":
None,
"overrides": [],
"lockup_psia": 600.0,
"fill_psig": 3000.0,
87 "settings":
LayerXSettings(drawing_id=
"d", dome_psia=560.0, copv_pressure_psia=3600.0)})
88 assert out[
"ok"]
is False and len(seen) == 1
90 assert (s.tank_pressure_psia, s.dome_psia, s.copv_pressure_psig, s.copv_pressure_psia) == (600.0,
None, 3000.0,
None)
95 from dataclasses
import replace
97 nominal = prepare(config,
None, drawing,
_rail(drawing))
98 found, _ = unc.factors(nominal, config)
99 by = {f.key: f
for f
in found}
100 lockup, fill = nominal.derived[
"target_lockup_psia"], nominal.derived[
"copv_psig"]
101 for case
in by[
"op.lockup"].cases + by[
"op.fill"].cases:
102 p = prepare(config,
None, drawing, replace(
_rail(drawing), **case.settings))
103 moved = (p.derived[
"target_lockup_psia"] - lockup)
if case.factor ==
"op.lockup" else (p.derived[
"copv_psig"] - fill)
104 assert abs(moved) > 4.0, (case.factor, case.side, moved)