"""Recompute the manuscript's numerical log summaries from verified derived arrays.""" from __future__ import annotations import hashlib,json from pathlib import Path import numpy as np import pandas as pd ROOT=Path(__file__).resolve().parents[1] def segmented(x,y,min_segment=20): fits=[] for j in range(min_segment,len(x)-min_segment+1): left=np.column_stack([np.ones(j),x[:j]]) right=np.column_stack([np.ones(len(x)-j),x[j:]]) bl=np.linalg.lstsq(left,y[:j],rcond=None)[0];br=np.linalg.lstsq(right,y[j:],rcond=None)[0] sse=float(np.sum((y[:j]-left@bl)**2)+np.sum((y[j:]-right@br)**2)) fits.append((int(x[j-1]),sse,float(bl[1]),float(br[1]))) return min(fits,key=lambda r:r[1]),pd.DataFrame(fits,columns=['split_after_step','sse','slope_left','slope_right']) def main(): out=ROOT/'results';out.mkdir(exist_ok=True) g=np.load(ROOT/'data/gradient.npy',allow_pickle=False);e=np.load(ROOT/'data/eval.npy',allow_pickle=False) assert g.shape==(792,2) and e.shape==(79,2) gt=pd.DataFrame(g,columns=['step','grad_norm']);gt['step']=gt['step'].astype(int) et=pd.DataFrame(e,columns=['step','eval_loss']);et['step']=et['step'].astype(int);et['loss_drop']=et['eval_loss'].shift(1)-et['eval_loss'] smooth={} for w in [5,11,21,31]: gt[f'mean_{w}']=gt.grad_norm.rolling(w,center=True,min_periods=w).mean() i=gt[f'mean_{w}'].idxmax();smooth[str(w)]={'step':int(gt.loc[i,'step']),'mean':float(gt.loc[i,f'mean_{w}'])} best,scan=segmented(g[:300,0],g[:300,1]);scan.to_csv(out/'prefix_break_scan.csv',index=False) a=g[160:180,1].mean();b=g[180:200,1].mean() largest=et.loc[et.loss_drop.idxmax()] bad=et.loc[et.loss_drop<=0,['step','eval_loss','loss_drop']].to_dict(orient='records') summary={'training_runs':1,'n_checkpoints':167,'n_gradient':len(g),'n_eval':len(e), 'raw_gradient_peak':{'step':int(g[g[:,1].argmax(),0]),'value':float(g[:,1].max())}, 'smoothed_peaks':smooth,'gradient_window_161_180_mean':float(a),'gradient_window_181_200_mean':float(b),'gradient_window_decline_percent':float(100*(1-b/a)), 'prefix_two_line_best':{'split_after_step':best[0],'sse':best[1],'slope_left':best[2],'slope_right':best[3]}, 'largest_eval_decrease':{'from_step':int(largest.step-10),'to_step':int(largest.step),'decrease':float(largest.loss_drop)}, 'eval_first':{'step':int(e[0,0]),'loss':float(e[0,1])},'eval_last':{'step':int(e[-1,0]),'loss':float(e[-1,1])}, 'eval_reduction_percent':float(100*(1-e[-1,1]/e[0,1])),'nondecreasing_eval_intervals':bad, 'original_prefix_numeric_digests':{'gradient':hashlib.sha256(np.asarray(g[:300],dtype='