93 lines
3.5 KiB
Python
93 lines
3.5 KiB
Python
"""BUG-1269: import bootstrap must not clobber a chosen ayanamsa, and the
|
|
natal, transit, bhava-chalit, and nakshatra paths must apply the requested mode.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import subprocess
|
|
import sys
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from scripts.ayanamsa_utils import AYANAMSA_MODES
|
|
from scripts.bhava_chalit import cmd_bhava_chalit
|
|
from scripts.cmd_nakshatra_adv import cmd_nakshatra_adv
|
|
from scripts.jyotish_engine import cmd_transit, compute_chart_data
|
|
|
|
MODES = ("lahiri", "raman", "krishnamurti", "fagan_bradley", "true_citra", "true_pushya")
|
|
|
|
|
|
def test_mode_names_exist():
|
|
for name in MODES:
|
|
assert name in AYANAMSA_MODES
|
|
|
|
|
|
def _birth(mode: str, second: int = 0):
|
|
return SimpleNamespace(
|
|
year=1955, month=2, day=24, hour=19, minute=15, second=second,
|
|
lat=37.7749, lon=-122.4194, tz=-8.0,
|
|
ayanamsa=mode, node_mode="mean",
|
|
mode="chart", house_system="sripati", planet=None,
|
|
retrograde_calendar=False,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("mode", MODES)
|
|
def test_requested_ayanamsa_is_applied_on_four_paths(mode: str):
|
|
chart, _asc, _jd, _value = compute_chart_data(
|
|
1955, 2, 24, 19, 15, 37.7749, -122.4194, -8.0, "mean",
|
|
second=0, ayanamsa_name=mode,
|
|
)
|
|
assert chart["birth_info"]["ayanamsa_name"] == mode
|
|
|
|
transit = cmd_transit(SimpleNamespace(
|
|
year=2026, month=10, day=5, tz=-8.0, ayanamsa=mode,
|
|
node_mode="mean", planet=None, retrograde_calendar=False,
|
|
))
|
|
policy = transit["transit_ayanamsa_policy"]
|
|
assert policy["requested_ayanamsa"] == mode
|
|
assert policy["applied_ayanamsa"] == mode
|
|
assert policy["same_ayanamsa_transit_parity"] is True
|
|
|
|
bhava = cmd_bhava_chalit(_birth(mode))
|
|
assert bhava["requested_ayanamsa"] == mode
|
|
assert bhava["applied_ayanamsa"] == mode
|
|
|
|
nak_args = _birth(mode)
|
|
nak_args.mode = "detail"
|
|
nakshatra = cmd_nakshatra_adv(nak_args)
|
|
assert nakshatra["requested_ayanamsa"] == mode
|
|
assert nakshatra["applied_ayanamsa"] == mode
|
|
|
|
|
|
def test_lahiri_and_raman_longitudes_differ():
|
|
lahiri, *_ = compute_chart_data(1955, 2, 24, 19, 15, 37.7749, -122.4194, -8.0, "mean", ayanamsa_name="lahiri")
|
|
raman, *_ = compute_chart_data(1955, 2, 24, 19, 15, 37.7749, -122.4194, -8.0, "mean", ayanamsa_name="raman")
|
|
assert lahiri["planets"]["Sun"]["degree_raw"] != pytest.approx(raman["planets"]["Sun"]["degree_raw"], abs=0.2)
|
|
|
|
lahiri_t = cmd_transit(SimpleNamespace(year=2026, month=10, day=5, tz=-8.0, ayanamsa="lahiri", node_mode="mean", planet=None, retrograde_calendar=False))
|
|
raman_t = cmd_transit(SimpleNamespace(year=2026, month=10, day=5, tz=-8.0, ayanamsa="raman", node_mode="mean", planet=None, retrograde_calendar=False))
|
|
assert lahiri_t["planets"]["Sun"]["degree_raw"] != pytest.approx(raman_t["planets"]["Sun"]["degree_raw"], abs=0.2)
|
|
|
|
|
|
def test_bhava_chalit_uses_birth_second():
|
|
zero = cmd_bhava_chalit(_birth("lahiri", 0))
|
|
later = cmd_bhava_chalit(_birth("lahiri", 40))
|
|
assert abs(later["ascendant_lon"] - zero["ascendant_lon"]) > 0.05
|
|
|
|
|
|
def test_import_bootstrap_does_not_clobber_explicit_mode():
|
|
probe = """
|
|
import sys
|
|
sys.path.insert(0, "scripts")
|
|
import ayanamsa_utils as au
|
|
au.apply_ayanamsa("lahiri")
|
|
import jyotish_engine
|
|
assert au.ACTIVE_AYANAMSA_NAME == "lahiri", au.ACTIVE_AYANAMSA_NAME
|
|
print("OK")
|
|
"""
|
|
proc = subprocess.run([sys.executable, "-c", probe], capture_output=True, text=True, cwd=str(__import__("pathlib").Path(__file__).resolve().parents[1]))
|
|
assert proc.returncode == 0, proc.stderr[-2000:]
|
|
assert proc.stdout.strip().endswith("OK")
|