#!/usr/bin/env python """Reproducible GPU/CPU scaling benchmark for Hilbert Operator Intelligence.""" from __future__ import annotations import argparse, json, os, random, time from pathlib import Path import numpy as np import torch from torch import nn from torch.utils.data import DataLoader, Subset, TensorDataset ROOT=Path(__file__).resolve().parents[1] import sys; sys.path.insert(0,str(ROOT)) from hilbert_mi.scalable import build_model def seed_all(s): random.seed(s); np.random.seed(s); torch.manual_seed(s); torch.cuda.manual_seed_all(s) def synthetic(n, classes, size, seed): g=torch.Generator().manual_seed(seed); y=torch.randint(classes,(n,),generator=g); x=torch.randn(n,3,size,size,generator=g)*.15 # deterministic class-dependent spectral/spatial signal for i in range(n): k=int(y[i]); x[i,:, (k*3)%size::10, :] += .6; x[i,:, :, (k*5)%size::11] += .35 return TensorDataset(x,y) def datasets(name, root, ntrain, ntest, size, seed): if name=="synthetic": return synthetic(ntrain,10,size,seed), synthetic(ntest,10,size,seed+1),10 try: import torchvision.transforms as T; import torchvision.datasets as D except ImportError as e: raise SystemExit("Install benchmark extras: pip install -e '.[benchmark]'") from e tf=T.Compose([T.Resize((size,size)),T.ToTensor()]) cls={"cifar10":D.CIFAR10,"cifar100":D.CIFAR100}[name]; nc=10 if name=="cifar10" else 100 tr=cls(root=root,train=True,download=True,transform=tf); te=cls(root=root,train=False,download=True,transform=tf) if ntrain and ntrain