"""Local custom track: fixed-size graph classification with cycle topology.""" import numpy as np META = {"name": "cycle_topology_graph", "domain": "graph_topology", "description": "Classify fixed-size relabeled graphs by independent cycle count."} N = 12 def _one(rng, label): A = np.zeros((N, N), dtype=np.float32) if label == 0: for i in range(N): u, v = i, (i + 1) % N A[u, v] = A[v, u] = 1.0 else: for base, size in ((0, 6), (6, 6)): for j in range(size): u, v = base + j, base + (j + 1) % size A[u, v] = A[v, u] = 1.0 p = rng.permutation(N) A = A[p][:, p] h = rng.uniform(0.05, 0.95, N).astype(np.float32) return np.concatenate([A.reshape(-1), h]), int(label) def get_dataset(seed, n_train=400, n_test=400): rng = np.random.RandomState(seed) def make(n): xs, ys = zip(*[_one(rng, i % 2) for i in range(n)]) order = rng.permutation(n) return np.asarray(xs, np.float32)[order], np.asarray(ys, np.int64)[order] xtr, ytr = make(n_train) xte, yte = make(n_test) return {"xtr": xtr, "ytr": ytr, "xte": xte, "yte": yte, "task": "classification", "metric": "err", "out_dim": 2}