back to table · edit · history · where entries came from · files · download
2013 bytes, as of the version from 2026-11-11 03:31 (current). Recorded here, not run.
import json,pathlib,sys,math,importlib.metadata,platform
import numberdb.sage as numberdb
from sage.rings.real_arb import RealBallField
from sage.rings.rational_field import QQ
from sage.version import version as sage_version
from numberdb._write import to_text
from generate import CentralBinomialSums
from checks import rational, decimal_bounds
import mpmath as mp
w=pathlib.Path(__file__).parent; G=CentralBinomialSums(); R=RealBallField(600)
results=[]
for tid,v in [('T697','1/16'),('T713','-1/16')]:
d=json.loads((w/(tid+'-comparison-rows.json')).read_text())
for row in d['rows']:
p=int(row['params']['n']); lo,hi,_=decimal_bounds(row['number'])
b=R((lo+hi)/2).add_error(R((hi-lo)/2))
expected=b*((-1)**p)/math.factorial(p-1)
got=G.value({'p':p,'v':v},100)
ok=expected.overlaps(got); assert ok
results.append({'table':tid,'order':p,'v':v,'overlap':bool(ok)})
# Test the public Programs snippet against all fast interior cases using a
# different library (mpmath hypergeometric summation), at 140 decimal digits.
mp.mp.dps=140
interior=[]
for p in range(1,10):
for v in ['-1/16','1/16']:
q=rational(v); mv=mp.mpf(int(q.numerator()))/int(q.denominator())
y=mp.hyper([mp.mpf('0.5')]*(p+1),[mp.mpf('1.5')]*p,4*mv)
text=to_text(G.value({'p':p,'v':v},100),100); lo,hi,_=decimal_bounds(text)
mlo=mp.mpf(int(lo.numerator()))/int(lo.denominator()); mhi=mp.mpf(int(hi.numerator()))/int(hi.denominator())
ok=bool(mlo<y<mhi); assert ok
interior.append({'p':p,'v':v,'stored_contains_mpmath':ok,'value':mp.nstr(y,125)})
versions={'python':platform.python_version(),'sage':sage_version,'numberdb':numberdb.__version__,'mpmath':mp.__version__}
for name in ['passagemath-standard','python-flint','passagemath-flint','passagemath-symbolics','passagemath-repl']:
try: versions[name]=importlib.metadata.version(name)
except importlib.metadata.PackageNotFoundError: pass
print('EXTRA_JSON='+json.dumps({'companion_comparisons':results,'independent_library_interior':interior,'versions':versions}))