mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 13:33:42 +08:00
83 lines
3.6 KiB
Python
83 lines
3.6 KiB
Python
"""Uncensored score-baseline and physical-drift seams, synthetic data only."""
|
|
from dataclasses import replace
|
|
from types import SimpleNamespace
|
|
|
|
from openpilot.starpilot.flm.tests.test_live_tracking_rollout import _optimizer, _refresh, _episode, NS
|
|
from openpilot.starpilot.flm.live_tracking_response import ResponseMonitor
|
|
from openpilot.starpilot.flm.tests.test_live_tracking_requalification import certificate, synthetic_pair
|
|
|
|
|
|
def test_error_selected_discovery_is_not_reused_as_comparison_baseline():
|
|
owner = _optimizer()
|
|
index = 0
|
|
while owner.discovery is None and index < 24:
|
|
index += 1
|
|
now = index*8*NS
|
|
_refresh(owner, now)
|
|
owner.observe_episode(_episode(owner, index, now, owner.accepted, .6, .35, 22.), now_ns=now)
|
|
assert owner.discovery is not None
|
|
assert owner.offer_state is None
|
|
discovery = dict(owner.discovery)
|
|
comparison = []
|
|
for _ in range(discovery['quota']):
|
|
index += 1
|
|
now = index*8*NS
|
|
_refresh(owner, now)
|
|
# Every newly requested comparison episode is retained, even perfect0.
|
|
row = _episode(owner, index, now, owner.accepted, .6, 0., 22.)
|
|
comparison.append(row)
|
|
owner.observe_episode(row, now_ns=now)
|
|
if owner.offer_state is not None:
|
|
assert owner.before == tuple(comparison)
|
|
assert all(row.error_rms == 0. for row in owner.before)
|
|
else:
|
|
assert owner.reason == 'independent_baseline_trial_power_insufficient'
|
|
assert owner.discovery is None
|
|
|
|
|
|
def test_overlapping_comparison_does_not_count_twice():
|
|
owner = _optimizer()
|
|
index = 0
|
|
while owner.discovery is None and index < 24:
|
|
index += 1
|
|
now = index*8*NS
|
|
_refresh(owner, now)
|
|
owner.observe_episode(_episode(owner, index, now, owner.accepted, .6, .35, 22.), now_ns=now)
|
|
assert owner.discovery is not None
|
|
index += 1
|
|
now = index*8*NS
|
|
_refresh(owner, now)
|
|
first = _episode(owner, index, now, owner.accepted, .6, .35, 22.)
|
|
owner.observe_episode(first, now_ns=now)
|
|
overlap = replace(first, episode_id='1'*64, start_ns=first.start_ns+1, end_ns=first.end_ns+1)
|
|
assert not owner.observe_episode(overlap, now_ns=now+1)
|
|
assert owner.comparison == [first]
|
|
|
|
|
|
def test_constant_command_point12_physical_shift_cannot_refresh_response_witness():
|
|
cert = certificate()
|
|
source = SimpleNamespace(_binding=cert.binding, original=cert)
|
|
monitor = ResponseMonitor(cert)
|
|
for index in range(8):
|
|
control, output, pose = synthetic_pair(source, index, command=.1)
|
|
assert monitor.observe(control, output, pose, now_ns=pose.mono_ns, binding=cert.binding, current_native=True)
|
|
assert monitor.witness(pose.mono_ns) is not None
|
|
for index in range(8, 16):
|
|
control, output, pose = synthetic_pair(source, index, command=.1)
|
|
shifted_yaw = pose.yaw_rate+.12/pose.speed_mps
|
|
pose = replace(pose, yaw_rate=shifted_yaw, angular_velocity_device=(0., 0., shifted_yaw))
|
|
monitor.observe(control, output, pose, now_ns=pose.mono_ns, binding=cert.binding, current_native=True)
|
|
assert monitor.witness(pose.mono_ns) is None
|
|
|
|
|
|
def test_changed_actual_commands_explain_point12_shift_without_proving_trial_benefit():
|
|
cert = certificate()
|
|
source = SimpleNamespace(_binding=cert.binding, original=cert)
|
|
monitor = ResponseMonitor(cert)
|
|
for index in range(16):
|
|
control, output, pose = synthetic_pair(source, index, command=.1 if index < 8 else .14)
|
|
assert monitor.observe(control, output, pose, now_ns=pose.mono_ns, binding=cert.binding, current_native=True)
|
|
assert monitor.witness(pose.mono_ns) is not None
|
|
# A response witness licenses the numerical model, never causal attribution
|
|
# of a tracking improvement to the offered knob rather than another input.
|