Download runtime.py from mvbalaji/Odyssey_PyPro_10M: direct link, hf CLI and curl.
- Browser
- Download file 8.69 kB
-
https://huggingface.co/mvbalaji/Odyssey_PyPro_10M/resolve/main/runtime.py
- Command line
-
hf download hf://mvbalaji/Odyssey_PyPro_10M/runtime.py
-
curl -L -o runtime.py https://huggingface.co/mvbalaji/Odyssey_PyPro_10M/resolve/main/runtime.py
8.69 kB
| """Fixed generic neural runtime: recurrent signed-add threshold network (task-neutral). | |
| Imports only numpy/json/hashlib. It never imports the task contract, interpreter, renderer, datasets or any | |
| expert/constructor code. Architecture id: rsat-v1. | |
| Symbols: bytes 0..255, BOS=256, EOS=257, SEP=258, PAD=259 (V = 260). | |
| Per-tick input x (270 channels): one-hot symbol (0..259), mode (260 = prefix, 261 = output), one-hot clock | |
| phase (262..269). Every external symbol occupies 8 ticks (phase 0..7) with its symbol and mode held. | |
| State: H bits, reset to 0 for every request. Synchronous update: | |
| a_i = sum_{j: R[i,j]=+1} s_j - sum_{j: R[i,j]=-1} s_j + sum_{k: I[i,k]=+1} x_k - sum_{k: I[i,k]=-1} x_k | |
| s'_i = 1 if a_i >= theta_i else 0 | |
| Output (after the 8th tick of every OUTPUT-mode symbol): | |
| score_o = sum_{i: O[o,i]=+1} s_i - sum_{i: O[o,i]=-1} s_i + bias_o ; emit smallest o with maximal score. | |
| Protocol: feed BOS then the request bytes in PREFIX mode; then feed SEP in OUTPUT mode (ending the prefix and | |
| starting generation); after each output-mode symbol emit one symbol and feed it back (OUTPUT mode). | |
| EOS ends generation. Emitting BOS/SEP/PAD, or more than 2,048 source bytes, is a failure. | |
| Integer bounds (proved, enforced by validate()): connections in {-1,0,+1}; |a_i| <= H + 3 (one symbol, one | |
| mode, one phase channel active) <= 2,883 for H = 2,880; |score| <= H + 32,767 < 2^31. All accumulation is in | |
| int32; thresholds and biases are int16. No multiplication, matrix product, BLAS, einsum or attention is used: | |
| contributions are added/subtracted column by column. | |
| """ | |
| from __future__ import annotations | |
| import hashlib | |
| import json | |
| import numpy as np | |
| V, BOS, EOS, SEP, PAD = 260, 256, 257, 258, 259 | |
| MODE_PREFIX, MODE_OUTPUT = 260, 261 | |
| PHASE0 = 262 | |
| D_IN = 270 | |
| TICKS = 8 | |
| MAX_OUT_BYTES = 2048 | |
| ARCH_ID = "rsat-v1" | |
| KEYS = ("R", "I", "O", "theta", "bias") | |
| def shapes(H): | |
| return {"R": (H, H), "I": (H, D_IN), "O": (V, H), "theta": (H,), "bias": (V,)} | |
| def n_slots(H): | |
| return H * H + 531 * H + 260 | |
| def validate(arrs, H): | |
| sh = shapes(H) | |
| out = {} | |
| for k in KEYS: | |
| a = np.asarray(arrs[k]) | |
| if a.shape != sh[k]: | |
| raise ValueError(f"{k}: shape {a.shape} != {sh[k]}") | |
| if not np.issubdtype(a.dtype, np.integer): | |
| raise ValueError(f"{k}: integer dtype required, got {a.dtype}") | |
| if k in ("R", "I", "O"): | |
| if a.size and (a.min() < -1 or a.max() > 1): | |
| raise ValueError(f"{k}: connections must be -1, 0 or +1") | |
| out[k] = a.astype(np.int8) | |
| else: | |
| if a.size and (a.min() < -32768 or a.max() > 32767): | |
| raise ValueError(f"{k}: must fit signed 16-bit") | |
| out[k] = a.astype(np.int16) | |
| return out | |
| def weights_sha256(arrs): | |
| h = hashlib.sha256() | |
| for k in KEYS: | |
| a = np.ascontiguousarray(arrs[k]) | |
| h.update(k.encode() + str(a.dtype).encode() + str(a.shape).encode() + a.tobytes()) | |
| return h.hexdigest() | |
| def save(path, arrs, config: dict): | |
| meta = dict(config, architecture_id=ARCH_ID, weights_sha256=weights_sha256(arrs)) | |
| blob = np.frombuffer(json.dumps(meta, sort_keys=True).encode(), dtype=np.uint8) | |
| np.savez_compressed(path, __meta__=blob, **{k: arrs[k] for k in KEYS}) | |
| return meta | |
| def load(path): | |
| with np.load(path, allow_pickle=False) as z: | |
| meta = json.loads(bytes(z["__meta__"]).decode()) | |
| arrs = {k: z[k].copy() for k in KEYS} | |
| arrs = validate(arrs, int(meta["H"])) | |
| if weights_sha256(arrs) != meta["weights_sha256"]: | |
| raise ValueError("weights hash mismatch") | |
| return arrs, meta | |
| class Net: | |
| """Optimized CPU implementation (exactly equal to `reference_step`; see verify_runtime).""" | |
| def __init__(self, arrs, H): | |
| a = validate(arrs, H) | |
| self.H = H | |
| self.RT = np.ascontiguousarray(a["R"].T) # row j = outgoing connections of source unit j | |
| self.IT = np.ascontiguousarray(a["I"].T) # row k = connections of input channel k | |
| self.OT = np.ascontiguousarray(a["O"].T) # row i = output connections of unit i | |
| self.theta = a["theta"].astype(np.int32) | |
| self.bias = a["bias"].astype(np.int32) | |
| self.reset() | |
| def reset(self): | |
| self.s = np.zeros(self.H, dtype=bool) | |
| self.rec = np.zeros(self.H, dtype=np.int32) # sum_j R[:, j] s_j, maintained incrementally | |
| self.ticks = 0 | |
| def step(self, sym, mode, phase): | |
| a = self.rec + self.IT[sym] + self.IT[mode] + self.IT[PHASE0 + phase] # int32 + int8 adds | |
| new = a >= self.theta | |
| on = np.flatnonzero(new & ~self.s) | |
| off = np.flatnonzero(self.s & ~new) | |
| if on.size: | |
| self.rec += self.RT[on].sum(axis=0, dtype=np.int32) | |
| if off.size: | |
| self.rec -= self.RT[off].sum(axis=0, dtype=np.int32) | |
| self.s = new | |
| self.ticks += 1 | |
| def feed(self, sym, mode): | |
| for p in range(TICKS): | |
| self.step(sym, mode, p) | |
| def scores(self): | |
| act = np.flatnonzero(self.s) | |
| sc = self.bias.copy() | |
| if act.size: | |
| sc += self.OT[act].sum(axis=0, dtype=np.int32) | |
| return sc | |
| def emit(self): | |
| return int(np.argmax(self.scores())) # argmax returns the smallest index among maxima | |
| def generate(net: Net, request: bytes, max_bytes=MAX_OUT_BYTES, detect_cycles=True): | |
| """Returns dict(status, source_bytes, ticks). status: ok | invalid_symbol | too_long. | |
| Exact cycle detection: generation is a deterministic function of (state before feeding, fed symbol); | |
| if that pair repeats, the emitted sequence is periodic forever without EOS, so the outcome (too_long) | |
| is decided early. The result equals running to the byte limit.""" | |
| net.reset() | |
| net.feed(BOS, MODE_PREFIX) | |
| for b in request: | |
| net.feed(b, MODE_PREFIX) | |
| cur = SEP | |
| out = bytearray() | |
| seen = set() | |
| while True: | |
| if detect_cycles: | |
| key = (cur, np.packbits(net.s).tobytes()) | |
| if key in seen: | |
| return {"status": "too_long", "cycle_detected": True, "source": bytes(out[:max_bytes]), "ticks": net.ticks} | |
| seen.add(key) | |
| net.feed(cur, MODE_OUTPUT) | |
| y = net.emit() | |
| if y == EOS: | |
| return {"status": "ok", "source": bytes(out), "ticks": net.ticks} | |
| if y >= 256: | |
| return {"status": "invalid_symbol", "symbol": int(y), "source": bytes(out), "ticks": net.ticks} | |
| out.append(y) | |
| if len(out) > max_bytes: | |
| return {"status": "too_long", "source": bytes(out[:max_bytes]), "ticks": net.ticks} | |
| cur = y | |
| # ---------------- slow reference (definitional; small networks / short sequences) ---------------- | |
| def reference_step(R, I, theta, s, x): | |
| H = len(s) | |
| new = [0] * H | |
| for i in range(H): | |
| acc = 0 | |
| for j in range(H): | |
| if R[i][j] == 1 and s[j]: | |
| acc += 1 | |
| elif R[i][j] == -1 and s[j]: | |
| acc -= 1 | |
| for k in range(D_IN): | |
| if I[i][k] == 1 and x[k]: | |
| acc += 1 | |
| elif I[i][k] == -1 and x[k]: | |
| acc -= 1 | |
| new[i] = 1 if acc >= theta[i] else 0 | |
| return new | |
| def reference_scores(O, bias, s): | |
| out = [] | |
| for o in range(V): | |
| acc = int(bias[o]) | |
| for i in range(len(s)): | |
| if O[o][i] == 1 and s[i]: | |
| acc += 1 | |
| elif O[o][i] == -1 and s[i]: | |
| acc -= 1 | |
| out.append(acc) | |
| return out | |
| def reference_generate(arrs, H, request: bytes, max_bytes=MAX_OUT_BYTES): | |
| R, I, O = arrs["R"].tolist(), arrs["I"].tolist(), arrs["O"].tolist() | |
| theta, bias = arrs["theta"].tolist(), arrs["bias"].tolist() | |
| s = [0] * H | |
| ticks = 0 | |
| def feed(sym, mode, s): | |
| nonlocal ticks | |
| for p in range(TICKS): | |
| x = [0] * D_IN | |
| x[sym] = 1 | |
| x[mode] = 1 | |
| x[PHASE0 + p] = 1 | |
| s = reference_step(R, I, theta, s, x) | |
| ticks += 1 | |
| return s | |
| s = feed(BOS, MODE_PREFIX, s) | |
| for b in request: | |
| s = feed(b, MODE_PREFIX, s) | |
| cur, out = SEP, bytearray() | |
| while True: | |
| s = feed(cur, MODE_OUTPUT, s) | |
| sc = reference_scores(O, bias, s) | |
| y = max(range(V), key=lambda o: (sc[o], -o)) | |
| if y == EOS: | |
| return {"status": "ok", "source": bytes(out), "ticks": ticks} | |
| if y >= 256: | |
| return {"status": "invalid_symbol", "symbol": y, "source": bytes(out), "ticks": ticks} | |
| out.append(y) | |
| if len(out) > max_bytes: | |
| return {"status": "too_long", "source": bytes(out[:max_bytes]), "ticks": ticks} | |
| cur = y | |