"""Separate nonblind challenge checks. Synthetic cases are not empirical attribution.""" from pathlib import Path from fractions import Fraction as F import csv, hashlib, json, math, sys import numpy as np R=Path(__file__).resolve().parents[1]; O=R/'analysis/challenge'; O.mkdir(exist_ok=True) s=F('0.0111802') def q(delta): r=s*(1+F(str(delta))/1000) return r/(1+r) def delta(qv): return float(1000*(qv/(1-qv)/s-1)) qf=q(-28); qi=q(-13.2); qa=q(-8.5) qn=(qa-F('0.05')*qf)/F('0.95') qn_in=qn+F(5,95)*(qi-qf) exact_residual=10*qf+95*qn_in-5*qf-95*qn-5*qi assert exact_residual==0 # Finite interval: N0=1000,F0=50, natural stock=950, F'=G=5. # Total outflow100, each tag removed in proportion to stock. # Fossil emission adjusts to5+100*p. Natural input=100*(1-p). # Exact qn evolution supplies constant net signature qi at every time. rows=[] for t in range(21): N=F(1000+5*t); NF=F(50+5*t); NN=F(950); p=NF/N qnt=qn+F(5*t,950)*(qi-qf) fossil_out=100*p; natural_out=100*(1-p) fossil_in=5+fossil_out; natural_in=natural_out qnit=qnt+5*(qi-qf)/natural_in H=fossil_in*qf+natural_in*qnit-fossil_out*qf-natural_out*qnt assert H==5*qi qat=(NF*qf+NN*qnt)/N assert qat==(1000*qa+5*t*qi)/N assert 0250 and -20