back to table · edit · history · where entries came from · files · download
2197 bytes, as of the version from 2026-11-02 04:21 (current). Recorded here, not run.
"""Extract ONLY the 1A columns of CDH 1204.2779v3 Tables 20–47.
Uses PDF geometry (right-aligned exponent and identity columns), not generated
values. Run with pymupdf and the original PDF in this directory. The extraction
retains page/table locators and has independently specified column expectations.
"""
import pathlib,json,re
import pymupdf
root=pathlib.Path(__file__).resolve().parent
pdf=pymupdf.open(root/'1204.2779.pdf')
plan=[(89,2,[1]),(90,3,[1]),(91,3,[2])]+[(92+i,4,[1+i]) for i in range(3)]+[(95+i,5,[1+i]) for i in range(4)]+[(99+i,7,[1+2*i,2+2*i]) for i in range(3)]+[(102+i,13,[1+3*i,2+3*i,3+3*i]) for i in range(4)]
controls=[];table=20
for p,m,components in plan:
page=pdf[p-1];words=[]
for w in page.get_text('words'):
r=pymupdf.Rect(w[:4])*page.rotation_matrix
words.append((*r,w[4]))
heads=sorted([w for w in words if w[4]=='1A'],key=lambda w:w[0])
labels=sorted([w for w in words if w[4]=='[g]'],key=lambda w:w[0])
assert len(heads)==len(labels)==len(components),(p,heads,labels)
for r,head,label in zip(components,heads,labels):
def column(edge, centered=False, tolerance=1):
return [(round(w[1],1),int(w[4].replace('−','-'))) for w in words
if abs(((w[0]+w[2])/2 if centered else w[2])-edge)<tolerance and w[1]>head[1]+25
and re.fullmatch(r'-?\d+',w[4].replace('−','-'))]
exp=column(label[2], tolerance=15)
values=column(head[2]);data=[]
for row,s in exp:
matches=[v for pos,v in values if abs(pos-row)<0.6]
assert len(matches)==1,(p,r,s,matches)
data.append([s,matches[0]])
data.sort()
assert len(data)>=30,(p,r,len(data))
assert all((s+r*r)%(4*m)==0 for s,v in data)
assert all(b[0]-a[0]==4*m for a,b in zip(data,data[1:]))
controls.append({'m':m,'r':r,'page':p,'table':table,'coefficients':data})
print(table,m,r,len(data),data[:3],data[-1]);table+=1
(root/'published-controls.json').write_text(json.dumps({'source':'https://arxiv.org/pdf/1204.2779v3','pdf_sha256':'8cb8a06908b4f45e884ec105786dba3321f6866f2382297b35181ab25e5dd27c','extraction':'Identity (1A) column, with exponent numerator from first column. Geometry extraction; rendered pages inspected.','components':controls},indent=2)+'\n')