"""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")