fix(ayanamsa): keep a caller-selected mode across import and transit paths (BUG-1269, upstream 23be1807)
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
"""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")
|
||||
Reference in New Issue
Block a user