"""Занятия 25, 33, 36: разбор сохранённых данных. Полевой решатель не вызывается."""
import sys,json,math
ROOT=globals().get('TVV_ROOT','')
if ROOT not in sys.path:sys.path.insert(0,ROOT)
from run_record import start,finish,sha,save_json
from editorial_checks import u_curve_diagnostic,trajectory_energy,time_step_error,control_requests

def read(relative):
    with open(ROOT+'/'+relative) as f:return json.loads(f.read())

folder,record=start(ROOT,globals().get('TVV_OUTPUT_ROOT',ROOT+'/runs'),'editorial-check',
    ['run_editorial_checks.py','editorial_checks.py','run_record.py','machine.json','release-gates.json'],
    'Saved-data audit only; no FEMM field solution')
try:
    base='examples/editorial-review/'
    dynamics='examples/checked-dynamics/transients/'
    manifest=read(base+'input-manifest.json')
    record['external_input_sha256']={}
    for name,expected in manifest['files'].items():
        actual=sha(ROOT+'/'+name)
        if actual!=expected:raise ValueError('Изменены входы проверки: '+name)
        record['external_input_sha256'][name]=actual
    machine=read('machine.json');rs=machine['resistance']['stator_phase_ohm'];rf=machine['resistance']['field_ohm']
    result={'u_curve':u_curve_diagnostic(read(base+'u-search-evaluations.json')),'dynamics':{},
            'release_ready':False,'new_field_solutions':0}
    requests={'schema':'tvv320-trajectory-check-request-v1','status':'planned_not_computed',
              'angles':[24,48],'flux_absolute_scale_Wb':1.,'flux_tolerance':.01,'cases':{}}
    for case in ('field-step','load-step'):
        coarse=read(dynamics+case+'.json');fine=read(dynamics+case+'-half-step.json')
        result['dynamics'][case]={'energy':trajectory_energy(coarse,rs,rf,2*math.pi*50),
            'half_step_energy':trajectory_energy(fine,rs,rf,2*math.pi*50),
            'time_step':time_step_error(coarse,fine),'independent_trajectory_FEMM_passed':False}
        requests['cases'][case]={'source':dynamics+case+'-half-step.json',
            'source_sha256':sha(ROOT+'/'+dynamics+case+'-half-step.json'),'points':control_requests(fine)}
    save_json(folder+'/results.json',result);save_json(folder+'/trajectory-check-requests.json',requests)
    gates=read('release-gates.json');save_json(folder+'/release-gates.json',gates)
    if not all(v[k]['passed'] for v in result['dynamics'].values() for k in ('energy','half_step_energy','time_step')):
        raise ValueError('Сохранённая динамика не прошла повторную проверку')
    finish(folder,record,'passed_saved_data_audit_release_blocked')
except Exception as error:
    record['error']=str(error);finish(folder,record,'failed');raise
print('TVV_EDITORIAL_CHECK',folder)
