#!/usr/bin/env python3 '''Independent prediction innovations on the frozen 267 held-out windows.''' from __future__ import annotations import argparse,json,sys from pathlib import Path import numpy as np from scipy.spatial.transform import Rotation ROOT=Path(__file__).resolve().parents[1] if str(ROOT) not in sys.path: sys.path.insert(0,str(ROOT)) from imu_lidar.rtk_imu_engineering import _height_reference from imu_lidar.rtk_imu_multisource import load_unified_sessions from imu_lidar.rtk_imu_node_graph import build_problem from tools.audit_rtk_imu_factor_consistency import _jsonable from tools.audit_rtk_imu_innovation_noise import ( _factor_report,_hpr_innovations,_interval_innovations) from tools.run_rtk_imu_node_graph_free_selected import _restore_segments LIMITS={ 'best_position':{'bias_norm':.10,'vector_p95':.50}, 'doppler':{'bias_norm':.10,'vector_p95':.50}, 'hpr':{'bias_norm':.01,'vector_p95':.05}, } def _finite_max_abs(values): a=np.asarray(values,dtype=float) return float(np.max(np.abs(a[np.isfinite(a)]))) if np.any(np.isfinite(a)) else np.inf def _summary_gate(summary,limits,min_samples=20): if summary.get('sample_count',0)