"""Independent identities on the stored T517 intervals.

Run: sage -python check_stored_identities.py
Set NUMBERDB_API_KEY for draft access, or pipe it with NUMBERDB_KEY_FROM_STDIN=1.
No function from the generating recurrence is used.
"""
import os
import sys
import json
from decimal import Decimal
import numberdb.sage as numberdb
import mpmath as mp

if os.environ.get('NUMBERDB_KEY_FROM_STDIN')=='1':
    os.environ['NUMBERDB_API_KEY']=sys.stdin.read().strip()

mp.mp.dps=200
document=numberdb.table('T517')
results=[]
for key,entry in document['Numbers'].items():
    text=entry['number'] if isinstance(entry,dict) else entry
    x=mp.mpf(text)
    ulp=mp.mpf(10)**int(Decimal(text).as_tuple().exponent)
    left,right=x-ulp,x+ulp
    f=lambda t:mp.diff(mp.scorergi,t)
    assert f(left)*f(right)<0
    ode=mp.diff(mp.scorergi,x,2)-x*mp.scorergi(x)+1/mp.pi
    connection=f(x)+mp.diff(mp.scorerhi,x)-mp.airybi(x,1)
    assert abs(ode)<mp.mpf('1e-190')
    assert abs(connection)<mp.mpf('1e-190')
    results.append({'n':int(key),'written':text,'endpoint_sign_change':True,
                    'ode_residual':mp.nstr(ode,6),
                    'differentiated_sum_residual':mp.nstr(connection,6)})
assert len(results)==13
print(json.dumps({'table':'T517','working_digits':200,'stored_identity_checks':results},indent=2))
