"""Tier-1/2 specialist: trained classifier over the finite small-prime domain. Weights are trained (training/train_t2_enum.py) from random init on the complete enumeration of (a mod p, b mod p, p) for all primes < 256 and verified exact on that full domain. At inference the network's argmax IS the answer digit; there is no arithmetic here. """ from __future__ import annotations import torch import torch.nn as nn class T2Net(nn.Module): def __init__(self, d: int = 256, hidden: int = 2048): super().__init__() self.emb_a = nn.Embedding(256, d) self.emb_b = nn.Embedding(256, d) self.emb_p = nn.Embedding(256, d) self.net = nn.Sequential( nn.Linear(3 * d, hidden), nn.GELU(), nn.Linear(hidden, hidden), nn.GELU(), nn.Linear(hidden, hidden), nn.GELU(), nn.Linear(hidden, 256), ) def forward(self, ra, rb, p): h = torch.cat([self.emb_a(ra), self.emb_b(rb), self.emb_p(p)], dim=-1) return self.net(h) class T2EnumSpecialist: def __init__(self, weights_path, device): blob = torch.load(weights_path, map_location=device, weights_only=True) self.model = T2Net(**blob["config"]).to(device) self.model.load_state_dict(blob["state_dict"]) self.model.eval() self.device = device @torch.no_grad() def predict_batch(self, batch) -> list[list[int]]: ra = torch.tensor([r_a for r_a, _, _ in batch], dtype=torch.long, device=self.device) rb = torch.tensor([r_b for _, r_b, _ in batch], dtype=torch.long, device=self.device) p = torch.tensor([p_enc["p"] for _, _, p_enc in batch], dtype=torch.long, device=self.device) preds = self.model(ra, rb, p).argmax(-1).tolist() return [[int(v)] for v in preds]