readback_identities.py

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))