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