import numpy as np META = {"name": "geometric_triangle_area", "domain": "geometric_graph", "description": "Triangle-area regression with shared global edge incidence."} N_POINTS = 8 N_CANDIDATES = 32 TRIS = np.array([(i % N_POINTS, (2*i+1) % N_POINTS, (3*i+2) % N_POINTS) for i in range(N_CANDIDATES)], dtype=np.int64) for i in range(N_CANDIDATES): if len(set(TRIS[i])) < 3: TRIS[i] = [i % N_POINTS, (i+1) % N_POINTS, (i+3) % N_POINTS] PAIRS = [(i,j) for i in range(N_POINTS) for j in range(i+1,N_POINTS)] EDGE_ID = {p:k for k,p in enumerate(PAIRS)} TRI_EDGES = np.array([[EDGE_ID[tuple(sorted((a,b)))], EDGE_ID[tuple(sorted((a,c)))], EDGE_ID[tuple(sorted((b,c)))] ] for a,b,c in TRIS], dtype=np.int64) def _make(rng, n): pts = rng.normal(size=(n,N_POINTS,2)).astype(np.float32) x = np.empty((n,N_CANDIDATES,3), dtype=np.float32) for k,(a,b,c) in enumerate(TRIS): x[:,k,0] = np.linalg.norm(pts[:,b]-pts[:,c],axis=1) x[:,k,1] = np.linalg.norm(pts[:,a]-pts[:,c],axis=1) x[:,k,2] = np.linalg.norm(pts[:,a]-pts[:,b],axis=1) s=x.sum(2)/2 areas=np.sqrt(np.maximum(s*(s-x[:,:,0])*(s-x[:,:,1])*(s-x[:,:,2]),1e-8)) total=areas.sum(1) y=((total-total.mean())/(total.std()+1e-7)).astype(np.float32) return x.reshape(n,-1), y.reshape(-1,1) def get_dataset(seed, n_train, n_test): tr=_make(np.random.default_rng(seed), n_train) te=_make(np.random.default_rng(seed+5000), n_test) return {"xtr":tr[0],"ytr":tr[1],"xte":te[0],"yte":te[1],"task":"regression","metric":"mse","out_dim":1}