back to table · edit · history · where entries came from · files · download
2295 bytes, as of the version from 2026-10-30 22:25 (current). Recorded here, not run.
"""Read-only stored-decimal identities for numberdb.org/T631.
Run: sage -python readback_identities.py with NUMBERDB_API_KEY set.
"""
import os,sys,json
from decimal import Decimal
from pathlib import Path
import numberdb.sage as numberdb
import mpmath as mp
mp.mp.dps=175
def interval(text):
if isinstance(text,dict):text=text['number']
dec=Decimal(text)
return mp.mpf(text),mp.power(10,dec.as_tuple().exponent)
if os.environ.get('NUMBERDB_KEY_FROM_STDIN')=='1':
key=sys.stdin.read().strip()
if '=' in key and key.split('=',1)[0].replace('_','').isalnum():key=key.split('=',1)[1].strip().strip('\"\'')
os.environ['NUMBERDB_API_KEY']=key
D=numberdb.table('T631')['Numbers']
conversion=0;cover=0;nontrivial=0;trivial=0
source=json.loads(Path(__file__).with_name('numerical-evidence.json').read_text())
target=mp.zeta(3)/mp.pi**2-2*mp.log(2*mp.pi)
max_cover_fraction=mp.mpf(0)
for ps,qs in D.items():
p=int(ps)
for qs_key,us in qs.items():
q=int(qs_key); total=mp.mpf(0); width=mp.mpf(0)
for uu,row in us.items():
u=int(uu);ld,lr=interval(row['logdet']);det,dr=interval(row['det'])
assert mp.exp(ld-lr)<det+dr and mp.exp(ld+lr)>det-dr
assert dr/abs(det)<mp.mpf('1e-98') and lr/abs(ld)<mp.mpf('1e-98')
conversion+=1
scalar=mp.mpf(source['independent_scalar_logdets'][f'{p},{q},{u}'])
if u==0:
lt=mp.log(2*mp.pi**2/p**2);trivial+=1
else:
v=u*pow(q,-1,p)%p
lt=mp.log(4*mp.sin(mp.pi*u/p)*mp.sin(mp.pi*v/p));nontrivial+=1
assert abs(ld-2*(scalar-lt))<lr
if u==0 or 2*u==p: mult=1
else:mult=2
total+=mult*ld;width+=mult*lr
assert abs(total-target)<width
max_cover_fraction=max(max_cover_fraction,abs(total-target)/width)
cover+=1
out={'table':'T631','stored_det_log_conversion_pairs':conversion,'stored_covering_identities':cover,'stored_trivial_torsion_identities':trivial,'stored_nontrivial_torsion_identities':nontrivial,'maximum_covering_discrepancy_as_fraction_of_total_decimal_radius':mp.nstr(max_cover_fraction,12),'mpmath_version':mp.__version__}
assert (conversion,cover,trivial,nontrivial)==(332,46,46,286)
print(json.dumps(out,indent=2))