back to table · edit · history · where entries came from · files · download
3464 bytes, as of the version from 2026-11-01 12:09. Recorded here, not run.
"""Modified Mahler measures of the Hessian family -- numberdb.org/T650.
Run with SageMath (download catalogue.py and periods.py beside this file):
sage -pip install numberdb mpmath
sage -python generate.py # verify all stored entries
sage -python generate.py --fill # send values to this existing draft
--fill requires NUMBERDB_API_KEY. The package method publish() submits entries;
it does not publish or offer a draft. No lifecycle action is performed here.
The ten exact CM arguments are selected in catalogue.py by -1<t<27. The
numerical method in periods.py solves the defining quadratic on the unit
circle and integrates the logarithm of the larger root modulus on [0,c] and
[c,pi], splitting at the torus crossing. It uses tanh-sinh quadrature and
bisects when its convergence estimate is insufficient. These estimates are
not certified error bounds. At the default 100 digits, computations use 135
and 185 decimal working digits, measured in numerical-evidence.json. Their
interval union is an agreement diagnostic, not a rigorous enclosure.
The independent hypergeometric checks and exact CM checks are attached.
See argument-selection.md for the family, bounds and archived skill manifest.
"""
import os,sys
import numberdb.sage as numberdb
import mpmath as mp
from catalogue import selected,label
from periods import periods
# The margin is measured, not an error theorem. Run evidence records the
# worst relative agreement at the two stated working precisions.
LOW_EXTRA_DIGITS=35
HIGH_EXTRA_DIGITS=85
class ModifiedHessian(numberdb.Generator):
table='T650'
parameters=('t',)
type='R'
digits=100
rigour='heuristic (agreement-checked)'
files=('generate.py','catalogue.py','periods.py','argument-selection.md',
'cm_checks.py','hypergeom_checks.py','integral_checks.py',
'numerical-evidence.json','cm-checks.json','integral-checks.jsonl',
'hypergeom-checks.jsonl','skill-evidence.json','lvalue_check.py',
'lvalue-check.json','readback_checks.py','check.py','skill-manifest.json')
def enumerate(self):
for item in selected():
yield {'t':item['key']}
def value(self,params,digits):
item=next(i for i in selected() if i['key']==str(params['t']))
def compute(working):
with mp.workdps(working):
I,J,_=periods(item['key'],working)
return mp.nstr(I-2*J,working-5)
value=numberdb.agreeing(compute,at=(digits+LOW_EXTRA_DIGITS,
digits+HIGH_EXTRA_DIGITS))
entry={'number':value}
if item['b']:
entry['param-latex']=label(item)
if item['key']=='24':
entry['comment']=r'The rational CM parameter has order discriminant $-27$; its modified period is negative.'
return entry
if __name__=='__main__':
if os.environ.get('NUMBERDB_KEY_FROM_STDIN')=='1':
os.environ['NUMBERDB_API_KEY']=sys.stdin.read().strip()
g=ModifiedHessian()
if '--fill' in sys.argv or os.environ.get('NUMBERDB_PUBLISH')=='1':
# Compute every value before submission to keep the fill in one batch.
for parameters in g.enumerate():g.value(parameters,g.digits)
print(g.publish(message='Add ten signed CM modified periods with independent checks.'))
else:
report=g.verify(sample=None)
print(report)
sys.exit(0 if report.ok else 1)