checks.py

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

3548 bytes, as of the version from 2026-10-25 20:38 (current). Recorded here, not run.

"""Validate the T503 transcription and saved independent computation.

Run with SageMath, beside generate.py, check.py, b073001.txt and
remez-evidence.json:
    sage -python checks.py
    NUMBERDB_KEY_FROM_STDIN=1 sage -python checks.py --stored < private-key

Regenerate the independent evidence with remez_check.py. Its final RESULT
line is JSON after the seven-character prefix. Keep that JSON in
remez-evidence.json. This script does not claim a certified error bound.
"""
import os
import sys
import json
from pathlib import Path
from fractions import Fraction
import numberdb.sage as numberdb
from generate import BernsteinConstant
from check import exactness, measure, agrees_with, names_its_rings

HERE=Path(__file__).resolve().parent


def check_value(text):
    digits=[]
    for line in (HERE/'b073001.txt').read_text().splitlines():
        if line.strip() and not line.startswith('#'):
            index,digit=map(int,line.split())
            assert index==len(digits) and 0<=digit<=9
            digits.append(str(digit))
    assert len(digits)==50
    expected='0.'+''.join(digits)
    assert not agrees_with({'beta':text},lambda key:expected)
    assert len(text.split('.')[1])==50
    value=Fraction(text)
    ulp=Fraction(1,10**50)
    assert Fraction(2801685,10**7)<value-ulp<value+ulp<Fraction(2801734,10**7)
    evidence=json.loads((HERE/'remez-evidence.json').read_text())
    rows=evidence['rows']
    assert [r['n'] for r in rows]==list(range(1,53))
    errors=[Fraction(r['2nE']) for r in rows]
    assert errors[0]==Fraction(1,4)
    assert all(abs(Fraction(r['spread']))<Fraction(1,10**90) for r in rows)
    assert all(errors[i]<errors[i+1] for i in range(len(errors)-1))
    # Finite-degree errors printed to 20 decimal places in Table 2.1.
    published={1:'0.25000000000000000000',2:'0.27048359711113710107',
               10:'0.27973243377197382968',24:'0.28009324593880850547',
               52:'0.28015324245316384249'}
    for n,printed in published.items():
        assert abs(errors[n-1]-Fraction(printed))<Fraction(1,10**20)
    independent=Fraction(evidence['extrapolations']['52'])
    assert value-ulp<independent<value+ulp
    delta=abs(independent-value)
    return {'oeis_digits_matched':50,'finite_errors_computed':52,
            'published_finite_errors_compared':len(published),
            'extrapolation_inside_written_interval':True,
            'independent_difference_ulp':float(delta/ulp),
            'rigour':'heuristic; no certified remainder for extrapolation'}


def main():
    assert not names_its_rings(str(HERE/'generate.py'))
    g=BernsteinConstant()
    generated=g.value({},50)
    assert not exactness({'beta':generated})
    report={'measure':measure({'beta':generated}),'generated':check_value(generated)}
    if '--stored' in sys.argv:
        if os.environ.get('NUMBERDB_KEY_FROM_STDIN')=='1':
            numberdb.configure(api_key=sys.stdin.read().strip())
        d=numberdb.table('T503')
        rows=d['Numbers']
        assert len(rows)==1
        row=rows[0]
        text=row['number'] if isinstance(row,dict) else row
        assert not exactness({'beta':text})
        report['stored']=check_value(text)
        assert d['Data properties']['rigour']=='heuristic'
        assert d['Display properties']['number-header']==r'$\beta$'
        assert not d.get('Parameters')
        verification=g.verify(sample=None)
        assert verification.ok
        report['verify']=str(verification)
    print(json.dumps(report,indent=2))


if __name__=='__main__':
    main()