58 lines
2.6 KiB
Python
58 lines
2.6 KiB
Python
from scripts import candidate_time_sensitivity_scan as scanner
|
|
|
|
|
|
def test_scanner_reports_real_divisional_transitions(monkeypatch):
|
|
def fake_engine(command, payload, timeout=20):
|
|
minute = payload["minute"]
|
|
if command == "chart":
|
|
return {"ascendant": {"sign": "Leo", "degree_in_sign": 10 + minute / 100, "lon": 130 + minute / 100}}
|
|
ascendant = "Aries" if minute % 2 else "Taurus"
|
|
return {
|
|
"D4_Turyamsa": {"Ascendant": {"sign": ascendant, "degree_in_sign": minute / 10, "lon": minute}},
|
|
"D9_Navamsa": {"Ascendant": {"sign": ascendant, "degree_in_sign": minute / 10, "lon": minute}},
|
|
"D10_Dasamsa": {"Ascendant": {"sign": ascendant, "degree_in_sign": minute / 10, "lon": minute}},
|
|
"D24_Siddhamsa": {"Ascendant": {"sign": ascendant, "degree_in_sign": minute / 10, "lon": minute}},
|
|
"D30_Trimsamsa": {"Ascendant": {"sign": ascendant, "degree_in_sign": minute / 10, "lon": minute}},
|
|
}
|
|
|
|
monkeypatch.setattr(scanner, "_engine_json", fake_engine)
|
|
report = scanner.scan_candidate_times(
|
|
{"year": 2000, "month": 1, "day": 1, "hour": 12, "minute": 1, "lat": 1, "lon": 1, "tz": 0},
|
|
uncertainty_minutes=1,
|
|
)
|
|
|
|
assert report["candidate_count"] == 3
|
|
assert report["transitions"]
|
|
assert report["pending_layers"] == ["UL", "A7", "A10", "KP_cusp"]
|
|
assert report["rows"][0]["d1_longitude"] is not None
|
|
assert report["rows"][0]["divisional_ascendants"]["D9"]["sign"] in {"Aries", "Taurus"}
|
|
assert "D1" not in scanner._VARGAS
|
|
assert report["input_contract"]["settings"]["node_mode"] == "mean"
|
|
assert report["rows"][0]["input_fingerprint"] != report["rows"][1]["input_fingerprint"]
|
|
assert report["stability_contract"]["minute_confirmation_allowed"] is False
|
|
|
|
|
|
def test_scanner_keeps_raman_default_and_applies_explicit_lahiri() -> None:
|
|
birth = {
|
|
"year": 2000,
|
|
"month": 1,
|
|
"day": 1,
|
|
"hour": 12,
|
|
"minute": 1,
|
|
"lat": 25.04,
|
|
"lon": 121.56,
|
|
"tz": 8,
|
|
}
|
|
|
|
default_report = scanner.scan_candidate_times(birth, uncertainty_minutes=1)
|
|
lahiri_report = scanner.scan_candidate_times(
|
|
{**birth, "ayanamsa": "lahiri"},
|
|
uncertainty_minutes=1,
|
|
)
|
|
default_center = next(row for row in default_report["rows"] if row["offset_minutes"] == 0)
|
|
lahiri_center = next(row for row in lahiri_report["rows"] if row["offset_minutes"] == 0)
|
|
|
|
assert default_report["input_contract"]["settings"]["ayanamsa"] == "raman"
|
|
assert lahiri_report["input_contract"]["settings"]["ayanamsa"] == "lahiri"
|
|
assert abs(default_center["d1_longitude"] - lahiri_center["d1_longitude"]) > 1
|