suboptimumg.log_analysis.yaw_fit_models#
- class suboptimumg.log_analysis.yaw_fit_models.AggregateMetrics[source]#
Bases:
BaseModelRMSE / VAF pooled across a list of
WindowMetrics.Fields# Field
Type
Required
Default
floatYes
floatYes
floatYes
- Parameters:
rmse_raw_rad_s (float)
rmse_ac_rad_s (float)
vaf_ac_pct (float)
- classmethod from_rows(rows)[source]#
Pool per-window rows; all-NaN when
rowsis empty.- Parameters:
rows (list[WindowMetrics])
- Return type:
- property rmse_ac_deg_s: float#
rmse_ac_rad_sin deg/s.
- rmse_ac_rad_s: float#
- rmse_raw_rad_s: float#
- vaf_ac_pct: float#
- class suboptimumg.log_analysis.yaw_fit_models.BicycleCoeffs[source]#
Bases:
BaseModelLPV coefficients of the yaw-rate-to-front-tire-steer transfer function.
Evaluated at one or more speeds by
bicycle_coeffs; every field is shaped like the input speed(s).Fields# Field
Type
Required
Default
NDArray[float64]Yes
NDArray[float64]Yes
NDArray[float64]Yes
NDArray[float64]Yes
- Parameters:
K (NDArray[float64])
T_z (NDArray[float64])
omega_n (NDArray[float64])
zeta (NDArray[float64])
- K: NDArray[np.float64]#
- T_z: NDArray[np.float64]#
- omega_n: NDArray[np.float64]#
- zeta: NDArray[np.float64]#
- class suboptimumg.log_analysis.yaw_fit_models.BicyclePoint[source]#
Bases:
BaseModelLinear-region bicycle coefficients evaluated at a single speed.
Fields# Field
Type
Required
Default
floatYes
floatYes
floatYes
floatYes
floatYes
- Parameters:
V (float)
K (float)
T_z_ms (float)
wn_hz (float)
zeta (float)
- K: float#
- T_z_ms: float#
- V: float#
- wn_hz: float#
- zeta: float#
- class suboptimumg.log_analysis.yaw_fit_models.ChassisParams[source]#
Bases:
BaseModelThe three free chassis scalars of the linear bicycle model.
Transfer-function form:
H(s; V) = K wn^2 (1 + T_z s) / (s^2 + 2 zeta wn s + wn^2), evaluated bybicycle_coeffs.- Parameters:
Ca_f (float)
Ca_r (float)
Izz (float)
- Ca_f: float#
- Ca_r: float#
- Izz: float#
- class suboptimumg.log_analysis.yaw_fit_models.FitComparison[source]#
Bases:
BaseModelSide-by-side table of several
YawFit, one row each.- Parameters:
data (Any)
- classmethod from_fits(fits)[source]#
Build a comparison table from fits keyed by display name.
- Parameters:
fits (dict[str, YawFit])
- Return type:
- rows: list['FitComparisonRow']#
- class suboptimumg.log_analysis.yaw_fit_models.FitComparisonRow[source]#
Bases:
BaseModelOne fit’s row in a
FitComparison.Fields# Field
Type
Required
Default
floatYes
floatYes
floatYes
floatYes
floatYes
floatYes
Literal[‘none’, ‘abs_alpha_per_axle’]Yes
floatYes
intYes
strYes
Literal[‘none’, ‘front’]Yes
floatYes
floatYes
floatYes
- Parameters:
name (str)
ca_scheduler (Literal['none', 'abs_alpha_per_axle'])
relaxation (Literal['none', 'front'])
n_params (int)
final_cost (float)
rmse_ac_deg_s (float)
vaf_ac_pct (float)
aic (float)
bic (float)
Ca_f (float)
Ca_r (float)
Izz (float)
L_f (float)
u_off_deg (float)
- Ca_f: float#
- Ca_r: float#
- Izz: float#
- L_f: float#
- aic: float#
- bic: float#
- ca_scheduler: CaScheduler#
- final_cost: float#
- classmethod from_fit(name, fit)[source]#
Summarize one fit into a comparison row.
- Parameters:
name (str)
fit (YawFit)
- Return type:
- n_params: int#
- name: str#
- relaxation: Relaxation#
- rmse_ac_deg_s: float#
- u_off_deg: float#
- vaf_ac_pct: float#
- class suboptimumg.log_analysis.yaw_fit_models.FitContext[source]#
Bases:
BaseModelChannel names, units, and the car geometry shared by every fit.
Built once per notebook run. Holds everything the predictor and optimizer need that depends on neither the fit spec nor the parameter vector.
Fields# Field
Type
Required
Default
strNo
'front.steerAngle.bicycle'Literal[‘rad’, ‘deg’]No
'deg'strNo
'body.slipAngle'Literal[‘rad’, ‘deg’]No
'deg'strNo
'front.steerAngle.bicycle'Literal[‘rad’, ‘deg’]No
'deg'Yes
strNo
'pcm.vnav.velocityBody.x'strNo
'pcm.vnav.compensatedAngularRate.z'- Parameters:
irl_car (IrlCar)
input_col (str)
input_units (Literal['rad', 'deg'])
speed_col (str)
yaw_rate_col (str)
body_slip_col (str)
body_slip_units (Literal['rad', 'deg'])
bicycle_steer_col (str)
bicycle_steer_units (Literal['rad', 'deg'])
- bicycle_steer_col: str#
- bicycle_steer_units: Literal['rad', 'deg']#
- body_slip_col: str#
- body_slip_units: Literal['rad', 'deg']#
- input_col: str#
- input_units: Literal['rad', 'deg']#
- speed_col: str#
- yaw_rate_col: str#
- class suboptimumg.log_analysis.yaw_fit_models.FitSpec[source]#
Bases:
BaseModelSelects the Ca-decay scheduler and the tire-relaxation flavor.
Together with a
ParamLayout(which decides which scalars are free) this fully determines the prediction pipeline.Fields# Field
Type
Required
Default
Literal[‘none’, ‘abs_alpha_per_axle’]No
'none'strYes
Literal[‘none’, ‘front’]No
'none'- Parameters:
name (str)
ca_scheduler (Literal['none', 'abs_alpha_per_axle'])
relaxation (Literal['none', 'front'])
- ca_scheduler: CaScheduler#
- name: str#
- relaxation: Relaxation#
- class suboptimumg.log_analysis.yaw_fit_models.Param[source]#
Bases:
BaseModelOne entry of the optimizer’s parameter vector.
A
pinnedparam is held atinitand never handed to the optimizer, so it carries no bounds.Fields# Field
Type
Required
Default
floatYes
floatYes
floatYes
strYes
boolNo
FalsefloatYes
- Parameters:
name (str)
init (float)
lo (float)
hi (float)
scale (float)
pinned (bool)
- format(value)[source]#
Render
valuein this parameter’s display units.- Parameters:
value (float)
- Return type:
str
- hi: float#
- init: float#
- lo: float#
- name: str#
- pinned: bool#
- scale: float#
- class suboptimumg.log_analysis.yaw_fit_models.ParamLayout[source]#
Bases:
BaseModelThe ordered parameter vector for a fit: what is free, and within what box.
Free params appear in the optimizer’s
xinfreeorder; pinned params are held at their initial value and never reach the optimizer.- Parameters:
params (list[Param])
- property bounds: tuple[NDArray[float64], NDArray[float64]]#
(lo, hi)arrays, aligned withfree.
- get(x, name)[source]#
Value of
namegiven the optimizer’s currentx.Pinned parameters ignore
xand return their held value.- Parameters:
x (NDArray[float64])
name (str)
- Return type:
float
- has(name)[source]#
Whether
nameis a parameter of this fit, free or pinned.- Parameters:
name (str)
- Return type:
bool
- property n_free: int#
Length of the optimizer’s
xvector.
- named(x)[source]#
Every parameter keyed by name, free values taken from
x.- Parameters:
x (NDArray[float64])
- Return type:
dict[str, float]
- property x0: NDArray[float64]#
Initial guess, aligned with
free.
- property x_scale: NDArray[float64]#
Characteristic magnitudes, aligned with
free.
- class suboptimumg.log_analysis.yaw_fit_models.Prediction[source]#
Bases:
BaseModelPer-sub-window predictions and residual diagnostics.
Shared by a training fit and a held-out evaluation, which differ only in which sub-windows they were computed over.
Fields# Field
Type
Required
Default
floatYes
floatYes
list[NDArray[float64]]Yes
intYes
list[WindowMetrics]Yes
list[NDArray[float64]]Yes
- Parameters:
y_hat_per_window (list[NDArray[float64]])
err_per_window (list[NDArray[float64]])
window_metrics (list[WindowMetrics])
n_samples (int)
aic (float)
bic (float)
- aic: float#
- bic: float#
- err_per_window: list[NDArray[np.float64]]#
- n_samples: int#
- window_metrics: list[WindowMetrics]#
- y_hat_per_window: list[NDArray[np.float64]]#
- class suboptimumg.log_analysis.yaw_fit_models.WindowArrays[source]#
Bases:
BaseModelAligned numpy arrays for one sub-window, as the optimizer sees it.
Built once per sub-window by
FitContext.arrays; every array shares the yaw-rate timestamp grid.u_radis the steering input already converted to radians.body_slip_radandbicycle_steer_radareNonewhen the corresponding channel is absent from the sub-window.Fields# Field
Type
Required
Default
NDArray[float64] |NoneYes
NDArray[float64] |NoneYes
NDArray[float64]Yes
intYes
NDArray[float64]Yes
NDArray[float64]Yes
NDArray[float64]Yes
- Parameters:
sw_id (int)
t (NDArray[float64])
speed (NDArray[float64])
yaw_rate (NDArray[float64])
u_rad (NDArray[float64])
body_slip_rad (NDArray[float64] | None)
bicycle_steer_rad (NDArray[float64] | None)
- bicycle_steer_rad: NDArray[np.float64] | None#
- body_slip_rad: NDArray[np.float64] | None#
- property duration_s: float#
Time spanned by the sub-window (s).
- speed: NDArray[np.float64]#
- sw_id: int#
- t: NDArray[np.float64]#
- u_rad: NDArray[np.float64]#
- yaw_rate: NDArray[np.float64]#
- class suboptimumg.log_analysis.yaw_fit_models.WindowMetrics[source]#
Bases:
BaseModelResidual diagnostics for one sub-window.
acmetrics have the per-window DC offset removed, isolating how well the dynamics are captured from any steady-state bias.Fields# Field
Type
Required
Default
floatYes
floatYes
floatYes
floatYes
floatYes
intYes
floatYes
floatYes
- Parameters:
subwindow_id (int)
duration_s (float)
mean_speed_mps (float)
dc_offset_rad_s (float)
rmse_raw_rad_s (float)
rmse_ac_rad_s (float)
yaw_rate_std_meas_rad_s (float)
vaf_ac_pct (float)
- dc_offset_rad_s: float#
- duration_s: float#
- mean_speed_mps: float#
- property rmse_ac_deg_s: float#
rmse_ac_rad_sin deg/s.
- rmse_ac_rad_s: float#
- rmse_raw_rad_s: float#
- subwindow_id: int#
- vaf_ac_pct: float#
- yaw_rate_std_meas_rad_s: float#
- class suboptimumg.log_analysis.yaw_fit_models.YawFit[source]#
Bases:
BaseModelA fitted yaw-response model: the spec, the parameters, and how well it did.
Carries everything needed to evaluate the model on new data (
spec/layout/ctx/x_hat) and everything needed to report on the fit that produced it (train).Fields# Field
Type
Required
Default
strYes
Yes
floatYes
intYes
Yes
strYes
intYes
intYes
Yes
intYes
Yes
NDArray[float64]Yes
- Parameters:
spec (FitSpec)
layout (ParamLayout)
ctx (FitContext)
x_hat (NDArray[float64])
train (Prediction)
final_cost (float)
n_eval (int)
status (int)
message (str)
balance_mode (str)
fit_view_count (int)
source_window_count (int)
- balance_mode: str#
- ctx: FitContext#
- final_cost: float#
- fit_view_count: int#
- has_param(name)[source]#
Whether
nameis a parameter of this fit.- Parameters:
name (str)
- Return type:
bool
- layout: ParamLayout#
- message: str#
- n_eval: int#
- property n_params: int#
Number of free parameters.
- params_named()[source]#
Every fitted and pinned parameter, keyed by name.
- Return type:
dict[str, float]
- source_window_count: int#
- status: int#
- train: Prediction#
- x_hat: NDArray[np.float64]#