import pandas as pd, numpy as np, runpy, sys, io, contextlib # masked re-estimation: for each origin, set future y (>t-2) and e (>t-1) to NaN and confirm forecast identical fc = pd.read_csv("out/forecasts.csv", parse_dates=["origin_date"]) d = pd.read_csv("data/canada_gdp_employment.csv", parse_dates=["month"]).set_index("month") mx=0 for t in sorted(fc.origin_date.unique()): t=pd.Timestamp(t); dm=d.copy() dm.loc[dm.index>t-pd.DateOffset(months=2),["gdp_level","gdp_yoy"]]=np.nan dm.loc[dm.index>t-pd.DateOffset(months=1),["emp_level","emp_yoy"]]=np.nan covid=lambda m:(m>=pd.Timestamp("2020-03-01"))&(m<=pd.Timestamp("2021-12-01")) for h in [1,3]: y=dm.gdp_yoy; e=dm.emp_yoy; s=dm.index Y=y.reindex(s+pd.DateOffset(months=h)).values; A=y.reindex(s-pd.DateOffset(months=2)).values; B=e.reindex(s-pd.DateOffset(months=1)).values k=~np.isnan(Y)&~np.isnan(A)&~np.isnan(B)&~np.asarray(covid(s+pd.DateOffset(months=h))|covid(s-pd.DateOffset(months=2))|covid(s-pd.DateOffset(months=1))) X=np.column_stack([np.ones(k.sum()),A[k],B[k]]); b=np.linalg.lstsq(X,Y[k],rcond=None)[0] f=b@[1,y[t-pd.DateOffset(months=2)],e[t-pd.DateOffset(months=1)]] g=fc[(fc.origin_date==t)&(fc.horizon==h)&(fc.model!="naive")].forecast.iloc[0] mx=max(mx,abs(f-g)) print("max abs diff masked vs ledger:",mx)