Files
Jyotisha/tests/test_kp_cusp_house_assignment.py
T
jesse-uxandGrok (agent loop) 2748e43871 KP 改成宫头到宫头判宫,并写明口径(BUG-1319,上游 0337b77f)
本命 Bhava Chalit 表仍按中点,默认宫位不变。传了宫头却不声明就拒绝;没传宫头记整宫代理。报告多一行判宫口径。pytest tests/test_kp_cusp_house_assignment.py 3 通过,tests/test_bhava_chalit.py 仍通过。

Co-Authored-By: Grok (agent loop)
2026-10-14 00:48:38 +08:00

59 lines
2.4 KiB
Python

"""BUG-1319: KP house occupancy is cusp-to-cusp and must be declared.
Upstream 0337b77f. Natal Bhava Chalit stays on the sandhi midpoint rule.
"""
from __future__ import annotations
import os
import sys
import pytest
SCRIPTS = os.path.join(os.path.dirname(__file__), "..", "scripts")
if SCRIPTS not in sys.path:
sys.path.insert(0, SCRIPTS)
from bhava_chalit import BhavaChalitCalculator # noqa: E402
from kp_system import build_kp_report_pack, calc_kp_analysis # noqa: E402
def test_cusp_to_cusp_differs_from_sandhi_and_default_houses_stay() -> None:
calc = BhavaChalitCalculator()
planets = {"Sun": 40.0}
sandhi = calc.get_bhava_chalit_chart(planets, 15.0, 270.0, "equal")
explicit = calc.get_bhava_chalit_chart(
planets, 15.0, 270.0, "equal", house_assignment="sandhi",
)
cusp = calc.get_bhava_chalit_chart(
planets, 15.0, 270.0, "equal", house_assignment="cusp_to_cusp",
)
assert sandhi["house_assignment"] == "sandhi"
assert explicit["planets"]["Sun"]["bhava_house"] == sandhi["planets"]["Sun"]["bhava_house"] == 2
assert cusp["house_assignment"] == "cusp_to_cusp"
assert cusp["planets"]["Sun"]["bhava_house"] == 1
assert cusp["planets"]["Sun"]["bhava_house"] != sandhi["planets"]["Sun"]["bhava_house"]
def test_unknown_house_assignment_is_rejected() -> None:
calc = BhavaChalitCalculator()
with pytest.raises(ValueError, match="house_assignment"):
calc.get_bhava_chalit_chart({"Sun": 10.0}, 15.0, 270.0, "equal", house_assignment="whole")
def test_kp_cusps_require_an_occupancy_basis_and_the_report_names_it() -> None:
planets = {"Sun": {"sign": "Taurus", "degree": 10.0, "house": 2}}
cusps = [15.0 + 30.0 * index for index in range(12)]
with pytest.raises(ValueError, match="house_occupancy_basis"):
calc_kp_analysis(planets, "Aries", house_cusps=cusps)
with pytest.raises(ValueError, match="house_occupancy_basis"):
calc_kp_analysis(planets, "Aries", house_cusps=cusps, house_occupancy_basis="")
declared = calc_kp_analysis(
planets, "Aries", house_cusps=cusps, house_occupancy_basis="cusp_to_cusp",
)
assert declared["house_occupancy_basis"] == "cusp_to_cusp"
proxy = calc_kp_analysis(planets, "Aries")
assert proxy["house_occupancy_basis"] == "whole_sign_proxy"
markdown = build_kp_report_pack(declared)["exports"]["markdown"]
assert "House occupancy basis: `cusp_to_cusp`" in markdown