Files
EscapistsReintroduced/docs/evidence/field-policy-review-2026-09-19-2059/idealized_model.py
T

13 lines
1.5 KiB
Python

# Offline actual-rule calculation only: assumes instantaneous reference tracking.
# This is deliberately NOT an engine/physics measurement or benchmark.
import runpy,sys,types,tempfile,subprocess,contextlib,io
from pathlib import Path
root=Path('/tmp/erri-next-build');captured=[]
sys.modules['policy_harness']=types.SimpleNamespace(ROOT=root,run=captured.append)
with contextlib.redirect_stdout(io.StringIO()):
runpy.run_path(str(root/'tests/test_aircraft_field_rules.py'))
code=captured[0].split('int main(){',1)[0]
code+='#include <cstdio>\nint main(){for(float v:{1.0f,1.5f,2.0f}){float remaining=25, elapsed=0, low=-1;vector ref={v,0,0};float cap=.9f*v;while(elapsed<100){float target=Rules::ApproachSpeed(remaining,std::min(ref.Length(),cap));ref=Rules::RampReference(ref,{target,0,0},.01f);remaining-=ref[0]*.01f;elapsed+=.01f;if(ref.Length()<.25f){if(low<0)low=elapsed;if(elapsed-low>=2)break;}else low=-1;}std::printf("initial_v=%.2f reserve=%.6f travel=%.6f time=%.3f final_remaining=%.6f final_speed=%.6f\\n",v,Rules::BrakingReserve(v),25-remaining,elapsed,remaining,ref.Length());}}\n'
with tempfile.TemporaryDirectory(prefix='erri-field-model-') as d:
p=Path(d);(p/'model.cpp').write_text(code);subprocess.run(['g++','-std=c++17',str(p/'model.cpp'),'-o',str(p/'model')],check=True);r=subprocess.run([str(p/'model')],capture_output=True,text=True,check=True);print(r.stdout);Path('/tmp/erri-field-idealized-stop.txt').write_text('IDEALIZED ACTUAL-RULE CALCULATION; NOT NATIVE MEASUREMENTS\n'+r.stdout)