"""Three unequal folds with a training-mean baseline; no library models."""
from fractions import Fraction as F
import json
if __name__=="__main__":
    y=list(map(F,[0,0,0,0,0,0,7]));folds=[[0,1,2],[3,4],[5,6]];oof=[None]*7;seen=[0]*7;metrics=[]
    for test in folds:
        train=[i for i in range(7) if i not in test]
        assert not set(train)&set(test) and len(train)+len(test)==7
        prediction=sum(y[i] for i in train)/len(train)
        for i in test:oof[i]=prediction;seen[i]+=1
        mse=sum((prediction-y[i])**2 for i in test)/len(test)
        metrics.append(mse)
    assert seen==[1]*7
    pooled=sum((p-t)**2 for p,t in zip(oof,y))/7
    weighted=sum(len(t)*m for t,m in zip(folds,metrics))/7;plain=sum(metrics)/3
    assert pooled==weighted==F(3549,400) and plain==F(11809,1200)
    print(json.dumps({"fold_sizes":[3,2,2],"fold_mse":[float(m) for m in metrics],"OOF_mse":float(pooled),"weighted_fold_mse":float(weighted),"unweighted_fold_mse":float(plain),"OOF_predictions":[str(v) for v in oof],"coverage":seen},indent=2))
