42 lines
3.1 KiB
Python
42 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
||
"""Run installed PyJHora Sphuta OSS case as isolated observation."""
|
||
from __future__ import annotations
|
||
import argparse, contextlib, hashlib, importlib.metadata as md, io, json
|
||
from pathlib import Path
|
||
|
||
ROOT=Path(__file__).resolve().parents[1]
|
||
OUT=ROOT/'references/oracle/prashna_sphuta_oss_case_probe_2026_07_20.json'
|
||
|
||
def h(o): return hashlib.sha256(json.dumps(o,ensure_ascii=False,sort_keys=True,default=str).encode()).hexdigest()
|
||
|
||
def build(date):
|
||
rows=[]; meta={}
|
||
try:
|
||
captured_stdout = io.StringIO()
|
||
captured_stderr = io.StringIO()
|
||
with contextlib.redirect_stdout(captured_stdout), contextlib.redirect_stderr(captured_stderr):
|
||
import jhora
|
||
from jhora.panchanga import drik
|
||
from jhora.horoscope.chart import sphuta
|
||
try: dist=md.metadata('jhora')
|
||
except md.PackageNotFoundError: dist=md.metadata('PyJHora')
|
||
meta={'package':dist.get('Name'),'version':dist.get('Version'),'license':dist.get('License') or 'AGPL detected from package metadata text','module_file':jhora.__file__,'captured_import_stdout_hash':h(captured_stdout.getvalue()),'captured_import_stderr_hash':h(captured_stderr.getvalue())}
|
||
dob=drik.Date(1996,12,7); tob=(10,34,0); place=drik.Place('Chennai',13.0878,80.2785,5.5)
|
||
for field,fn,expected in [('tri_sphuta',sphuta.tri_sphuta,'Pisces 20° 47’ 20"'),('chatur_sphuta',sphuta.chatur_sphuta,'Scorpio 12° 21’ 15"'),('pancha_sphuta',sphuta.pancha_sphuta,'Aries 22° 54’ 29"')]:
|
||
try:
|
||
with contextlib.redirect_stdout(io.StringIO()), contextlib.redirect_stderr(io.StringIO()):
|
||
got=fn(dob,tob,place,divisional_chart_factor=1)
|
||
rows.append({'field':field,'status':'observed','raw_result':got,'expected_from_oss_case':expected})
|
||
except Exception as e:
|
||
rows.append({'field':field,'status':'runtime_error','error':type(e).__name__,'expected_from_oss_case':expected})
|
||
except Exception as e:
|
||
meta={'package':'jhora','import_error':type(e).__name__}
|
||
for field in ['tri_sphuta','chatur_sphuta','pancha_sphuta']: rows.append({'field':field,'status':'runtime_error','error':'jhora_import_failed'})
|
||
data={'scope':'prashna_sphuta_oss_case_probe','created_at':date,'status':'oss_probe_ready','claim_status':'tooling_observation_only','production_tuning_allowed':False,'truth_matrix_allowed':False,'oracle_ready':False,'license_boundary':'agpl_observation_only_do_not_vendor','case':{'source':'jhora.tests.pvr_tests.sphuta_tests','dob':'1996-12-07','tob':'10:34:00','place':'Chennai 13.0878,80.2785 +05:30'},'package_metadata':meta,'rows':rows,'boundary':'Runs installed OSS package only; no AGPL implementation is copied and no oracle truth is upgraded.'}
|
||
data['raw_hash']=h({'meta':meta,'rows':rows})
|
||
return data
|
||
|
||
def main():
|
||
ap=argparse.ArgumentParser(); ap.add_argument('--date',default='2026-07-20'); args=ap.parse_args(); data=build(args.date); OUT.write_text(json.dumps(data,ensure_ascii=False,indent=2,sort_keys=True)+'\n'); print(json.dumps(data,ensure_ascii=False,indent=2,sort_keys=True))
|
||
if __name__=='__main__': main()
|