Files
StarPilot/openpilot/starpilot/flm/tests/test_full_effect_trace.py
T
firestar5683 2cd7728be2 FLM Auto-Weave
2026-10-17 18:38:27 -05:00

69 lines
3.5 KiB
Python

"""Full30 wire/child state and EXACT owner/replay transition equivalence."""
from dataclasses import replace
import pytest
from openpilot.starpilot.flm.canonical_surface_adapter import full_profile_sha256
from openpilot.starpilot.flm.effect_trace import trace_dict, trace_from_dict, ordered
from openpilot.starpilot.flm.learning_wire import read_control
from openpilot.starpilot.flm.selected_effects import EffectTrial, EffectReplayTransition
from openpilot.starpilot.flm.tests.test_fullrate_pipeline import snapshots, serialized_control
from openpilot.starpilot.flm.tests.test_selected_effect_owner import fixture, NOW, BASE
from openpilot.starpilot.flm.torque_adapter import Admission
def current_trace():
owner,p,v,context=fixture(accumulated=True)
owner.prepare(Admission(p,NOW,True,False,True,v),active=True,current_context=context)
return owner,p,v,context
def test_typed_wire_and_child_snapshot_keep_all30_and_original_hash():
owner,p,_,_=current_trace()
control,_,_=snapshots(NOW)
control=replace(control,baseline_revision=BASE,source_epoch=p.effect_envelope.source_epoch,
controller_revision=p.effect_envelope.controller_revision,applied_coordinates=(0.,0.),features=(1.,0.),
effect_trace=owner.trace,effect_prepare_ns=NOW)
assert read_control(serialized_control(control))==control
assert trace_from_dict(trace_dict(owner.trace))==owner.trace
assert len(owner.trace.applied)==30
assert owner.trace.applied_full_profile_sha256==full_profile_sha256(BASE,owner.trace.applied)
@pytest.mark.parametrize('field', ['applied','target','before','applied_full_profile_sha256','control_ns'])
def test_changed_transition_state_is_rejected(field):
owner,_,_,_=current_trace()
trace=owner.trace
value='0'*64 if field=='applied_full_profile_sha256' else -1 if field=='control_ns' else tuple(
(n, v+.001 if n=='ff_gain_left' else v) for n,v in getattr(trace,field))
with pytest.raises(ValueError):
replace(trace,**{field:value}).validate()
def test_exact_prior_centered_transition_matches_real_owner_with_jitter_and_withdrawal():
owner,p,v,context=fixture(accumulated=True)
# The new trial baseline is the ACTUAL accepted full target, not its old prior.
accepted=p.effect_envelope
anchor=replace(accepted,prior_coordinates=accepted.coordinates,
prior_full_profile_sha256=accepted.full_profile_sha256)
objective=owner.objective
trial=EffectTrial(objective,tuple(dict(anchor.prior_coordinates)[n] for n in objective.names),BASE,anchor.replay_anchor())
replay=EffectReplayTransition(trial)
stamps=(NOW,NOW+11_000_000,NOW+19_000_000,NOW+31_000_000)
for stamp in stamps:
owner.prepare(Admission(p,stamp,True,False,True,v),active=True,current_context=context)
source=replay.source_for_frame(stamp,owner.trace)
assert ordered(source.source.values)==owner.trace.applied
owner.prepare(Admission(p,NOW+40_000_000,True,False,False,v),active=True,current_context=context)
replay.source_for_frame(NOW+40_000_000,None)
assert not any(replay.applied.values())
owner.prepare(Admission(p,NOW+50_000_000,True,False,True,v),active=True,current_context=context)
source=replay.source_for_frame(NOW+50_000_000,owner.trace)
assert ordered(source.source.values)==owner.trace.applied
def test_nonzero_original_profile_without_applied_trace_is_rejected():
owner,p,_,_=current_trace()
trial=EffectTrial(owner.objective,(.004,),BASE,p.effect_envelope.replay_anchor())
with pytest.raises(ValueError):
EffectReplayTransition(trial).source_for_frame(NOW,None)