|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Classes | |
| class | DesignRequirementsRequest |
| class | DesignRequirementsResponse |
| class | Layer1Request |
| class | Layer2Request |
Functions | |
| tuple[bool, list] | layer1_design_is_valid (Dict[str, Any] results) |
| Dict[str, Any] | merge_design_requirements (Optional[Dict[str, Any]] old, Dict[str, Any] incoming) |
| convert_numpy (obj) | |
| str | safe_json_dumps (Any payload) |
| save_design_requirements (DesignRequirementsRequest request, UserSession session=Depends(get_session), None _=DesignCheckout) | |
| get_design_requirements (UserSession session=Depends(get_session)) | |
| get_layer1_status (UserSession session=Depends(get_session)) | |
| get_layer1_results (UserSession session=Depends(get_session)) | |
| get_layer_results_csv (int layer, UserSession session=Depends(get_session)) | |
| get_layer2_status (UserSession session=Depends(get_session)) | |
| get_layer2_results (UserSession session=Depends(get_session)) | |
| stop_layer2 (UserSession session=Depends(get_session)) | |
| stop_layer1 (UserSession session=Depends(get_session)) | |
| run_layer1 (float thrust_tolerance=0.1, float|None target_burn_time=None, int report_every_n=1, UserSession session=Depends(get_session), None _=DesignCheckout) | |
| run_layer2 (int max_iterations=20, bool save_plots=False, int de_maxiter=5, int de_popsize=2, int de_n_time_points=25, UserSession session=Depends(get_session), None _=DesignCheckout) | |
| upload_layer2_config (UploadFile file=FastAPIFile(...), UserSession session=Depends(get_session), None _=DesignCheckout) | |
| get_layer3_status (UserSession session=Depends(get_session)) | |
| get_layer3_results (UserSession session=Depends(get_session)) | |
| stop_layer3 (UserSession session=Depends(get_session)) | |
| upload_layer3_config (UploadFile file=FastAPIFile(...), UserSession session=Depends(get_session), None _=DesignCheckout) | |
| run_layer3 (int max_iterations=20, bool save_plots=False, str optimization_method="gradient", UserSession session=Depends(get_session), None _=DesignCheckout) | |
Variables | |
| router = APIRouter(prefix="/api/optimizer", tags=["optimizer"]) | |
| dict | _CSV_NAMES = {2: "pressure_curves.csv", 3: "layer3_results.csv"} |
Optimizer endpoints for design optimization and Layer 1.
| backend.routers.optimizer.convert_numpy | ( | obj | ) |
Recursively convert numpy types to Python native types for JSON serialization.
Definition at line 88 of file optimizer.py.
References convert_numpy().
Referenced by convert_numpy(), run_layer1(), run_layer2(), run_layer3(), and safe_json_dumps().
| backend.routers.optimizer.get_design_requirements | ( | UserSession | session = Depends(get_session) | ) |
Get current design requirements from config.
Definition at line 201 of file optimizer.py.
| backend.routers.optimizer.get_layer1_results | ( | UserSession | session = Depends(get_session) | ) |
Get Layer 1 optimization results.
Definition at line 228 of file optimizer.py.
| backend.routers.optimizer.get_layer1_status | ( | UserSession | session = Depends(get_session) | ) |
Get Layer 1 optimization status.
Definition at line 215 of file optimizer.py.
| backend.routers.optimizer.get_layer2_results | ( | UserSession | session = Depends(get_session) | ) |
Get Layer 2 optimization results.
Definition at line 281 of file optimizer.py.
| backend.routers.optimizer.get_layer2_status | ( | UserSession | session = Depends(get_session) | ) |
Get Layer 2 optimization status.
Definition at line 268 of file optimizer.py.
| backend.routers.optimizer.get_layer3_results | ( | UserSession | session = Depends(get_session) | ) |
Get Layer 3 optimization results.
Definition at line 901 of file optimizer.py.
| backend.routers.optimizer.get_layer3_status | ( | UserSession | session = Depends(get_session) | ) |
Get Layer 3 optimization status.
Definition at line 888 of file optimizer.py.
| backend.routers.optimizer.get_layer_results_csv | ( | int | layer, |
| UserSession | session = Depends(get_session) ) |
Layer 2 or 3's pressure curves as CSV (backend/results_csv.py): time, LOX and fuel tank pressure. The file the UI's "CSV" button saves, written here so anyone can fetch it.
Definition at line 247 of file optimizer.py.
| tuple[bool, list] backend.routers.optimizer.layer1_design_is_valid | ( | Dict[str, Any] | results | ) |
Did Layer 1 produce a design that passed its own validation gates? Returns ``(is_valid, reasons)``. A design is valid only when it reports NO failure reasons and no ``*_check_passed`` / ``*_gate_passed`` flag is False. Why this exists: the optimized geometry used to be written back into the live config unconditionally, INCLUDING when validation failed. A failed run then became the seed for the next run, which started from a wrecked geometry, failed worse, and saved something worse again -- a death spiral that bricked a working design (observed live: expansion_ratio 4.91 -> 9.74, oxidizer d_jet 2.33 -> 4.35 mm, and every subsequent run infeasible with the UI giving no indication the seed was the problem). Combined with the known run-to-run spread, one unlucky run in three could permanently destroy a design the user had converged.
Definition at line 20 of file optimizer.py.
Referenced by run_layer1().
| Dict[str, Any] backend.routers.optimizer.merge_design_requirements | ( | Optional[Dict[str, Any]] | old, |
| Dict[str, Any] | incoming ) |
Lay a (possibly partial) requirements payload over the requirements already loaded. A key ABSENT from ``incoming`` keeps its current value. A key sent as an explicit ``None`` is cleared. Those are different intents -- a form that only knows a dozen fields must not, by not mentioning them, reset the ~100 ``layer1_*`` knobs, the injector face limits and the pinned seed to schema defaults. It did: the save route rebuilt ``design_requirements`` from the payload alone, and the next run optimised a different problem than the one the file described. ``frozen_parameters`` merges key by key with the same null-clears rule, as it already did.
Definition at line 47 of file optimizer.py.
Referenced by save_design_requirements().
| backend.routers.optimizer.run_layer1 | ( | float | thrust_tolerance = 0.1, |
| float | None | target_burn_time = None, | ||
| int | report_every_n = 1, | ||
| UserSession | session = Depends(get_session), | ||
| None | _ = DesignCheckout ) |
Run Layer 1 optimization with Server-Sent Events for progress updates. Note: max_iterations is hardcoded in the optimizer for consistent robust convergence. Returns a stream of progress updates in SSE format.
Definition at line 346 of file optimizer.py.
References convert_numpy(), and layer1_design_is_valid().
| backend.routers.optimizer.run_layer2 | ( | int | max_iterations = 20, |
| bool | save_plots = False, | ||
| int | de_maxiter = 5, | ||
| int | de_popsize = 2, | ||
| int | de_n_time_points = 25, | ||
| UserSession | session = Depends(get_session), | ||
| None | _ = DesignCheckout ) |
Run Layer 2 optimization with Server-Sent Events for progress updates.
Definition at line 608 of file optimizer.py.
References convert_numpy().
| backend.routers.optimizer.run_layer3 | ( | int | max_iterations = 20, |
| bool | save_plots = False, | ||
| str | optimization_method = "gradient", | ||
| UserSession | session = Depends(get_session), | ||
| None | _ = DesignCheckout ) |
Run Layer 3 thermal protection optimization with Server-Sent Events for progress updates.
Args:
optimization_method: "gradient" (fast, ~5-15 evals), "cma" (thorough, ~60-80 evals), or "de" (fallback)
Definition at line 984 of file optimizer.py.
References convert_numpy().
| str backend.routers.optimizer.safe_json_dumps | ( | Any | payload | ) |
Strict JSON serialization for SSE: converts numpy + strips NaN/Inf.
Definition at line 119 of file optimizer.py.
References convert_numpy().
| backend.routers.optimizer.save_design_requirements | ( | DesignRequirementsRequest | request, |
| UserSession | session = Depends(get_session), | ||
| None | _ = DesignCheckout ) |
Save design requirements to config.
Definition at line 159 of file optimizer.py.
References merge_design_requirements().
| backend.routers.optimizer.stop_layer1 | ( | UserSession | session = Depends(get_session) | ) |
Stop the currently running Layer 1 optimization.
Definition at line 321 of file optimizer.py.
| backend.routers.optimizer.stop_layer2 | ( | UserSession | session = Depends(get_session) | ) |
Stop the currently running Layer 2 optimization.
Definition at line 296 of file optimizer.py.
| backend.routers.optimizer.stop_layer3 | ( | UserSession | session = Depends(get_session) | ) |
Stop the currently running Layer 3 optimization.
Definition at line 916 of file optimizer.py.
| backend.routers.optimizer.upload_layer2_config | ( | UploadFile | file = FastAPIFile(...), |
| UserSession | session = Depends(get_session), | ||
| None | _ = DesignCheckout ) |
Upload a config to use for Layer 2. A wholesale replacement like /api/config/upload: behind the checkout, off the event loop, with a new load_token (``replace_config``). Without the token a second tab of this user kept autosaving -- the uploaded engine into its own design.
Definition at line 849 of file optimizer.py.
| backend.routers.optimizer.upload_layer3_config | ( | UploadFile | file = FastAPIFile(...), |
| UserSession | session = Depends(get_session), | ||
| None | _ = DesignCheckout ) |
Upload a config to use for Layer 3 (should have pressure_curves from Layer 2). A wholesale replacement: see upload_layer2_config.
Definition at line 941 of file optimizer.py.
|
protected |
Definition at line 243 of file optimizer.py.
| backend.routers.optimizer.router = APIRouter(prefix="/api/optimizer", tags=["optimizer"]) |
Definition at line 125 of file optimizer.py.