from pathlib import Path import sys,numpy as np import matplotlib;matplotlib.use("Agg");import matplotlib.pyplot as plt ROOT=Path(__file__).resolve().parents[1];sys.path.insert(0,str(ROOT)) from model.precip_extremes_gan import load_config,write_json c=load_config(ROOT);d=np.load(ROOT/c["paths"]["predictions"]);q=c["evaluation"]["extreme_percentile"];metrics={} for name,p in (("deterministic",d["baseline"]),("gan",d["mean"])): metrics[name]={"mae":float(np.mean(abs(p-d["target"]))),"extreme_percentile_mae":float(np.mean(abs(np.percentile(p,q,axis=0)-np.percentile(d["target"],q,axis=0))))} def signal(a): h=a[d["period"]==0].mean(0);f=a[d["period"]==1].mean(0);return 100*(f-h)/np.maximum(h,.1) truth=signal(d["target"]);metrics["climate_signal_mae_percent"]={"deterministic":float(np.mean(abs(signal(d["baseline"])-truth))),"gan":float(np.mean(abs(signal(d["mean"])-truth)))};metrics["synthetic"]=True;write_json(ROOT/c["paths"]["evaluation"],metrics) fig,ax=plt.subplots(1,4,figsize=(14,3.5));fields=(d["target"][0,0],d["baseline"][0,0],d["mean"][0,0],abs(d["mean"][0,0]-d["target"][0,0]));titles=("CCAM target","Deterministic","Residual GAN","Absolute error") for a,f,t in zip(ax,fields,titles):im=a.imshow(f,cmap="Blues");a.set_title(t);a.axis("off");fig.colorbar(im,ax=a,shrink=.7) fig.tight_layout();path=ROOT/c["paths"]["figure"];path.parent.mkdir(parents=True,exist_ok=True);fig.savefig(path,dpi=140);plt.close(fig);print(path)