"""Parse actual local original inputs into the pinned browser import schema.""" from pathlib import Path import argparse,csv,json,numpy as np from model_io import RECIPES,verify_inputs,original_model def prepare(inputs,output): receipts=verify_inputs(inputs);output.mkdir(parents=True,exist_ok=True);products=[] for expected in RECIPES['trustedModelsets']: source=expected['sourceId'].split('-')[0];model={key:expected[key] for key in ['schema','sourceId','passbands','ageNodesLog10Years','composition']};tables=[] for table in expected['tables']: name=f"parsec-dense-av{table['Av']:.1f}.dat" if source=='parsec' else RECIPES['mistPhotometryName'] columns,rows=original_model(inputs/name,source) tables.append({'Av':table['Av'],'columns':columns,'rows':rows.tolist(),'numericSha256':table['numericSha256']}) model['tables']=tables;model['originalResponses']=receipts;model['boundary']='Private local import; no upload or implied redistribution license.' path=output/(source+'-native12.json');path.write_text(json.dumps(model,separators=(',',':'))+'\n') if path.stat().st_size>=25000000:raise ValueError('Import file exceeds stated25MBcap') products.append({'name':path.name,'bytes':path.stat().st_size,'ageNodes':model['ageNodesLog10Years']}) # Derive licensed default anew from the actual author CSV, not a frozen answer. source=list(csv.DictReader((inputs/'m67-isochrone-a.csv').open()));selected=[row for row in source if float(row['center_h1'])>.001] native=json.loads((Path(__file__).parent/'isoa-hydrogen-burning.json').read_text()) rows=[[float(row[key]) for key in ['initial_mass','star_mass','log_L','log_Teff']]+[0]+[float(row[key]) for key in ['abs_mag_g_dr2','abs_mag_bp_dr2','abs_mag_rp_dr2']] for row in selected] if rows!=native['rows'] or len(rows)!=98 or not np.all(np.diff(np.array(rows)[:,0])>0):raise ValueError('Licensed default node derivation changed') (output/'production-receipt.json').write_text(json.dumps({'products':products,'publicDefaultRowsActuallyDerived':len(rows),'inputs':receipts},indent=2)+'\n') return products if __name__=='__main__': parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('--inputs',type=Path,default=Path('inputs'));parser.add_argument('--out',type=Path,default=Path('local-modelsets'));args=parser.parse_args() print(json.dumps(prepare(args.inputs,args.out),indent=2))