"""Local fictional learning reference. No website/database/cloud connection."""
import csv,json,sqlite3,hashlib,math,re,statistics,collections
from pathlib import Path

def dl_arrays():
 import numpy as np
 rng=np.random.default_rng(8);x=rng.normal(size=(40,2));y=(x[:,0]+.6*x[:,1]>0).astype(float)
 return x,y

def dl_torch(source,out):
 import numpy as np
 import torch
 torch.set_num_threads(1);torch.manual_seed(7);x,y=dl_arrays();x=torch.tensor(x,dtype=torch.float32);y=torch.tensor(y[:,None],dtype=torch.float32)
 model=torch.nn.Sequential(torch.nn.Linear(2,4),torch.nn.Tanh(),torch.nn.Linear(4,1));optim=torch.optim.SGD(model.parameters(),lr=.1);loss_fn=torch.nn.BCEWithLogitsLoss()
 for _ in range(100):
  model.train();optim.zero_grad();loss=loss_fn(model(x[:24]),y[:24]);loss.backward();optim.step()
 model.eval()
 with torch.no_grad():validation=float(((model(x[24:32])>=0)==(y[24:32]>=.5)).float().mean());final_loss=float(loss_fn(model(x[:24]),y[:24]))
 return {'torch_version':torch.__version__,'train_rows':24,'validation_rows':8,'test_rows_reserved':8,'training_loss':final_loss,'validation_accuracy':validation,'test_scored':False,'warning':'Tiny synthetic exercise, not evidence of real-world generalisation.'}

if __name__=='__main__':
    import argparse,platform
    parser=argparse.ArgumentParser();parser.add_argument('--source',default='.');parser.add_argument('--output',required=True);args=parser.parse_args()
    source=Path(args.source).resolve();out=Path(args.output).resolve()
    if source==out:raise ValueError('Source and output must differ')
    out.mkdir(parents=False,exist_ok=False)
    # Partial folders after an error are NOT successful; result.json is written last.
    result=dl_torch(source,out)
    with (out/'result.json').open('x',encoding='utf-8') as handle:json.dump(result,handle,indent=2,allow_nan=False);handle.write(chr(10))
    print(json.dumps(result,indent=2,allow_nan=False))
