readback.py

back to table · edit · history · where entries came from · files · download

2758 bytes, as of the version from 2026-10-29 07:39 (current). Recorded here, not run.

"""Verify every stored T603 decimal interval and its stated relations.

    sage -python readback.py
Set NUMBERDB_API_KEY to read an unpublished draft. If NUMBERDB_KEY_FROM_STDIN=1,
the key is read only from stdin. No writes or publication actions occur.
"""
import os,sys,json,re
from pathlib import Path
import numberdb.sage as numberdb
from sage.rings.real_arb import RealBallField
from generate import HemisphereDirichlet,logdet
from independent import continuation
from relations import rational_decimal,decimal_enclosure

if __name__=='__main__':
    if os.environ.get('NUMBERDB_KEY_FROM_STDIN')=='1':
        key=sys.stdin.read().strip()
        if re.match(r'^[A-Z_][A-Z0-9_]*\s*=',key):
            key=key.split('=',1)[1].strip().strip('\"\'')
        os.environ['NUMBERDB_API_KEY']=key
    g=HemisphereDirichlet()
    report=g.verify(sample=None)
    assert report.ok and report.checked==40
    print(json.dumps({'verify':str(report),'all_entries':True}),flush=True)
    doc=numberdb.table('T603')
    R=RealBallField(numberdb.bits(240))
    block=doc['Numbers']
    if isinstance(block,list):
        vals={(str(r['params']['d']),r['params']['convention']):r['number'] for r in block}
    else:
        vals={(str(d),conv):val['number'] if isinstance(val,dict) else val
              for d,record in block.items() for conv,val in record.items()}
    expected=[(p['d'],p['convention']) for p in g.enumerate()]
    assert list(vals)==expected
    assert list(doc['Parameters'])==['d','convention']
    spheres=numberdb.table('T595')['Numbers']
    for d in range(1,21):
        independent,_=continuation(d)
        neumann,_=continuation(d,boundary='N')
        L=logdet(d,200)
        for conv in ('det','logdet'):
            text=vals[(str(d),conv)];v,ulp=rational_decimal(text)
            lower,upper=R(v-ulp),R(v+ulp)
            computed=L.exp() if conv=='det' else L
            checked=independent.exp() if conv=='det' else independent
            assert lower<computed and computed<upper
            assert lower<checked and checked<upper
        storedL=decimal_enclosure(vals[(str(d),'logdet')],R)
        storedD=decimal_enclosure(vals[(str(d),'det')],R)
        assert storedL.exp().overlaps(storedD)
        assert (storedL+neumann).overlaps(decimal_enclosure(spheres[str(d)]['logdet'],R))
        assert (storedD*neumann.exp()).overlaps(decimal_enclosure(spheres[str(d)]['det'],R))
        print(json.dumps({'d':d,'both_stored_intervals_contain_primary_and_independent':True,
                          'stored_conversion':True,'stored_sphere_relation':True}),flush=True)
    print(json.dumps({'status':'PASS','entries':40,'ordered_selection_matches':True,
          'maximum_stored_value_characters':max(map(len,vals.values()))}))