STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
test_layerx_limits Namespace Reference

Functions

 _saved_burns ()
 _by_key (entries)
 _ui_verdict (result)
 test_the_reference_run_matches_the_audits_hand_worked_worst_times ()
 test_the_worst_index_points_at_the_graded_value (name, result)
 _result (n=8, dt=0.05)
 test_a_burn_with_nothing_to_grade_grades_nothing ()
 test_chug_from_the_stability_diagnostics_grades_the_settled_minimum_and_reports_the_start ()
 test_chug_margin_is_red_below_one_and_amber_below_one_point_two (margin, expect)
 test_the_chug_amber_edge_follows_a_requirement_above_one_point_two_but_never_below_it ()
 test_a_drawing_basis_run_without_its_stability_block_does_not_grade_the_config_margin ()
 test_the_delivered_chug_minimum_maps_onto_the_series_by_firing_step ()
 test_stiffness_band_edges_and_the_rule_of_thumb_without_a_band ()
 test_stiffness_worst_time_ignores_the_first_fifth_of_a_second ()
 test_tank_peak_against_mawp_meop_and_the_design_cap ()
 test_a_design_cap_the_design_never_stated_is_reported_not_graded ()
 test_bottle_sag_and_depletion_edges ()
 test_a_burn_that_never_ran_dry_says_so ()
 test_a_vessel_trip_is_red_at_its_instant ()
 test_diagnostics_blocks_are_graded_when_present_and_skipped_when_absent ()
 test_cavitation_is_red_once_the_orifice_cavitates_and_amber_near_it (ratio, expect)
 test_a_stated_flag_margin_moves_the_saturation_amber_edge ()
 test_separation_from_the_hardware_block_and_schmucker_as_amber ()
 test_nozzle_separation_from_the_delivered_exit_pressure ()
 test_flight_limits_fall_back_to_the_competition_rules ()
 test_requirements_are_read_from_the_recorded_yaml_without_a_config ()
 test_a_malformed_block_costs_only_its_own_grades ()
 test_every_entry_carries_the_contract_keys ()

Variables

str RUNS = Path(__file__).resolve().parents[1] / ".userdata" / "local" / "engine" / "layerx" / "runs"
str REFERENCE = RUNS / "20261002-231658-7e47d1.json"
float PSI = 6894.757293168361
 SAVED = _saved_burns()
 needs_saved = pytest.mark.skipif(not SAVED, reason="no saved Layer X burns in .userdata (the user's runs)")
dict VERDICT
dict SERIES_BACKED

Detailed Description

One graded list of limits for a Layer X burn (engine/layerx/diag/limits.py).

What these check, and against what:

* **Today's UI grades.** ``verdictItems`` in ``frontend/src/components/layerx/LayerXResult.tsx`` is
  transcribed below, line for line, as an independent oracle (``_ui_verdict``), and every saved burn
  in ``.userdata`` (read only) must grade the same through :func:`grade`. The saved runs are the
  user's; when none is present the parity test skips and the hand-built results below still run.
* **Worst-case times, by hand.** For the 2026-10-02 flown GN2 run ``7e47d1`` the audit (AUDIT 9.9 D)
  worked out each limit's worst time from the series by hand: LOX dP/Pc 0.3082 at 0.75 s, fuel
  0.2858 at 0.20 s, both tank peaks at burnout (3.466 s), the sag at 0.40 s (fuel), chug 1.2046 at
  0.80 s. Those numbers are asserted.
* **The index is the time.** For every series-backed limit on every saved run, the series value at
  ``index_worst`` is the graded value and ``series.t[index_worst]`` is ``t_worst``.
* **Each new grader on a hand-built result**: thresholds at, just inside and just outside their
  edges, so a flipped comparison or a wrong default goes red.

Function Documentation

◆ _by_key()

◆ _result()

test_layerx_limits._result ( n = 8,
dt = 0.05 )
protected

◆ _saved_burns()

test_layerx_limits._saved_burns ( )
protected

Definition at line 36 of file test_layerx_limits.py.

◆ _ui_verdict()

test_layerx_limits._ui_verdict ( result)
protected
``verdictItems`` + the context ``LayerXResultView`` builds, as the UI ran on 2026-10-02.
Returns {my key: grade} for the items the UI would show.

Definition at line 63 of file test_layerx_limits.py.

References max.

◆ test_a_burn_that_never_ran_dry_says_so()

test_layerx_limits.test_a_burn_that_never_ran_dry_says_so ( )

Definition at line 396 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_a_burn_with_nothing_to_grade_grades_nothing()

test_layerx_limits.test_a_burn_with_nothing_to_grade_grades_nothing ( )

Definition at line 222 of file test_layerx_limits.py.

◆ test_a_design_cap_the_design_never_stated_is_reported_not_graded()

test_layerx_limits.test_a_design_cap_the_design_never_stated_is_reported_not_graded ( )
``max_*_tank_pressure_psi`` default to 700 / 850 psi in the schema with no source. A design that
states its caps (LE4: 600 / 600) is graded against them; one that does not gets the default
reported as information, and says so, rather than amber against a number nobody chose.

Definition at line 350 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_a_drawing_basis_run_without_its_stability_block_does_not_grade_the_config_margin()

test_layerx_limits.test_a_drawing_basis_run_without_its_stability_block_does_not_grade_the_config_margin ( )
A run graded on the drawing's feed (``options.chug_basis``, decided 2026-10-03) that carries no
stability block -- every set-point, Hardware, reconcile and sweep burn -- has only the replay's
margin, on EngineDesign's feed_system. It was graded as "the" chug margin: 1.21 'ok' on LE4 (3),
where the drawing basis grades 1.004 'warn'. It is now information, labelled with its basis. A run
saved before the decision (no options, or ``config``) grades it as it always did.

Definition at line 276 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_a_malformed_block_costs_only_its_own_grades()

test_layerx_limits.test_a_malformed_block_costs_only_its_own_grades ( )

Definition at line 534 of file test_layerx_limits.py.

References _result().

◆ test_a_stated_flag_margin_moves_the_saturation_amber_edge()

test_layerx_limits.test_a_stated_flag_margin_moves_the_saturation_amber_edge ( )

Definition at line 456 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_a_vessel_trip_is_red_at_its_instant()

test_layerx_limits.test_a_vessel_trip_is_red_at_its_instant ( )

Definition at line 403 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_bottle_sag_and_depletion_edges()

test_layerx_limits.test_bottle_sag_and_depletion_edges ( )

Definition at line 379 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_cavitation_is_red_once_the_orifice_cavitates_and_amber_near_it()

test_layerx_limits.test_cavitation_is_red_once_the_orifice_cavitates_and_amber_near_it ( ratio,
expect )

Definition at line 450 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_chug_from_the_stability_diagnostics_grades_the_settled_minimum_and_reports_the_start()

test_layerx_limits.test_chug_from_the_stability_diagnostics_grades_the_settled_minimum_and_reports_the_start ( )

Definition at line 227 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_chug_margin_is_red_below_one_and_amber_below_one_point_two()

test_layerx_limits.test_chug_margin_is_red_below_one_and_amber_below_one_point_two ( margin,
expect )

Definition at line 251 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_diagnostics_blocks_are_graded_when_present_and_skipped_when_absent()

test_layerx_limits.test_diagnostics_blocks_are_graded_when_present_and_skipped_when_absent ( )

Definition at line 413 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_every_entry_carries_the_contract_keys()

test_layerx_limits.test_every_entry_carries_the_contract_keys ( )

Definition at line 541 of file test_layerx_limits.py.

References _result().

◆ test_flight_limits_fall_back_to_the_competition_rules()

test_layerx_limits.test_flight_limits_fall_back_to_the_competition_rules ( )
A design that states no rail-exit or static-margin requirement is graded against FAR-OUT's
(2024-25 rules 5.1.4 and 5.1.5), and says so: a 21.7 m/s rail exit used to drop out of the
limits altogether and leave the Overview reading "Within limits" (D-59).

Definition at line 487 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_nozzle_separation_from_the_delivered_exit_pressure()

test_layerx_limits.test_nozzle_separation_from_the_delivered_exit_pressure ( )

Definition at line 477 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_requirements_are_read_from_the_recorded_yaml_without_a_config()

test_layerx_limits.test_requirements_are_read_from_the_recorded_yaml_without_a_config ( )

Definition at line 527 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_separation_from_the_hardware_block_and_schmucker_as_amber()

test_layerx_limits.test_separation_from_the_hardware_block_and_schmucker_as_amber ( )

Definition at line 467 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_stiffness_band_edges_and_the_rule_of_thumb_without_a_band()

test_layerx_limits.test_stiffness_band_edges_and_the_rule_of_thumb_without_a_band ( )

Definition at line 303 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_stiffness_worst_time_ignores_the_first_fifth_of_a_second()

test_layerx_limits.test_stiffness_worst_time_ignores_the_first_fifth_of_a_second ( )

Definition at line 318 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_tank_peak_against_mawp_meop_and_the_design_cap()

test_layerx_limits.test_tank_peak_against_mawp_meop_and_the_design_cap ( )

Definition at line 328 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_the_chug_amber_edge_follows_a_requirement_above_one_point_two_but_never_below_it()

test_layerx_limits.test_the_chug_amber_edge_follows_a_requirement_above_one_point_two_but_never_below_it ( )

Definition at line 260 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_the_delivered_chug_minimum_maps_onto_the_series_by_firing_step()

test_layerx_limits.test_the_delivered_chug_minimum_maps_onto_the_series_by_firing_step ( )

Definition at line 294 of file test_layerx_limits.py.

References _by_key(), and _result().

◆ test_the_reference_run_matches_the_audits_hand_worked_worst_times()

test_layerx_limits.test_the_reference_run_matches_the_audits_hand_worked_worst_times ( )
AUDIT 9.9 D, worked by hand from the series of run 7e47d1.

Definition at line 127 of file test_layerx_limits.py.

References _by_key().

◆ test_the_worst_index_points_at_the_graded_value()

test_layerx_limits.test_the_worst_index_points_at_the_graded_value ( name,
result )

Definition at line 165 of file test_layerx_limits.py.

References min.

Variable Documentation

◆ needs_saved

test_layerx_limits.needs_saved = pytest.mark.skipif(not SAVED, reason="no saved Layer X burns in .userdata (the user's runs)")

Definition at line 49 of file test_layerx_limits.py.

◆ PSI

float test_layerx_limits.PSI = 6894.757293168361

Definition at line 33 of file test_layerx_limits.py.

◆ REFERENCE

str test_layerx_limits.REFERENCE = RUNS / "20261002-231658-7e47d1.json"

Definition at line 32 of file test_layerx_limits.py.

◆ RUNS

str test_layerx_limits.RUNS = Path(__file__).resolve().parents[1] / ".userdata" / "local" / "engine" / "layerx" / "runs"

Definition at line 31 of file test_layerx_limits.py.

◆ SAVED

test_layerx_limits.SAVED = _saved_burns()

Definition at line 48 of file test_layerx_limits.py.

◆ SERIES_BACKED

dict test_layerx_limits.SERIES_BACKED
Initial value:
1= {"stiffness_ox": "ox.stiffness", "stiffness_fuel": "fuel.stiffness",
2 "tank_mawp_ox": "ox.tank_psia", "tank_mawp_fuel": "fuel.tank_psia",
3 "tank_cap_ox": "ox.tank_psia", "tank_cap_fuel": "fuel.tank_psia"}

Definition at line 158 of file test_layerx_limits.py.

◆ VERDICT

dict test_layerx_limits.VERDICT
Initial value:
1= {"copvHeadroomPsi": 100, "droopPsi": (30, 60), "residualKg": 0.2, "stiffnessFloor": 0.15,
2 "chugMarginWarn": 1.2, "ratingUse": 0.8, "depletionTie": 0.03, "replayAgreement": (0.005, 0.02)}

Definition at line 59 of file test_layerx_limits.py.