from research import *
s=begin(784,'Transfer full residual vectors through finite variants','Does rounding retain its coordinate discrepancies throughout the admitted MT configuration?',{},['File51a 23 regular and26 cumulative paired rows; C760,C772'])
from itertools import product
p=json.loads((ROOT/'model/variant_inputs.json').read_text());r=p['convenience_tables']['MT_regular_actual_strict_and_rounded']['rows']; cf=json.loads((ROOT/'model/MT_rounding_field.json').read_text());out={}
for so,te,ca in product([0,1],repeat=3):
    ds=[]
    for i,row in enumerate(r):
        z=row['cells'];shift=215*(so-1)+60*te*(i<=18)+130*ca*(i<=11)
        ds.append((int(z[4])+shift)-(int(z[3])+shift))
    cds=[(cf['rounded'][i]+460*ca*(i<=11))-(cf['actual'][i]+460*ca*(i<=11)) for i in range(26)]
    out[f'{so}{te}{ca}']={'regular':ds,'cumulative':cds}
a=artifact('model/variant_residual_vectors.json',json.dumps(out,indent=2)+'\n')
finish(s,{'residuals':a,'basis':'row-level Q(n+5k)=Q(n)+5k; coordinate calculation is its consequence'},'All existing23 regular and26 cumulative MT residual coordinates persist under their compatible admitted state moves. This transfers the whole field, while keeping raw cumulative Terah/Sojourn choices forgotten.','Evaluate the new Cainan coordinate on both Actual and Rounded rails.',{'regular_invariance':len({tuple(v['regular']) for v in out.values()})==1,'cumulative_invariance':all(v['cumulative']==cf['D'] for v in out.values())})
