fix(varga): source D5/D6/D8/D11 from PVR 6.2 (BUG-1260, upstream f32472b5)

This commit is contained in:
jesse-ux
2026-10-07 16:39:01 +08:00
parent 5cc8e50458
commit db68e90816
5 changed files with 91 additions and 41 deletions
+20
View File
@@ -306,3 +306,23 @@ def test_d30_even_sign_venus_region():
"""Even sign, 0-5° → Taurus (Venus region)."""
lon = calc._calculate_varga_position(32.0, 30) # Taurus 2°
assert int(lon // 30) == 1 # Taurus
def test_extended_d5_d6_d8_d11_use_pvr_mapping():
"""Extended charts delegate D5/D6/D8/D11 to the sourced varga mapping."""
from varga import calc_varga
samples = (
(5, 60 + 11, 10), # 11° Gemini -> Aquarius
(6, 60 + 11, 2), # 11° Gemini -> Gemini
(6, 210 + 19, 9), # 19° Scorpio -> Capricorn
(8, 60 + 10, 6), # 10° Gemini -> Libra
(8, 210 + 19, 1), # 19° Scorpio -> Taurus
(11, 60 + 11, 2), # 11° Gemini -> Gemini
(11, 210 + 19, 11), # 19° Scorpio -> Pisces
)
for division, degree, sign_idx in samples:
lon = calc._calculate_varga_position(degree, division)
point = calc_varga(degree, division)
assert int(lon // 30) == sign_idx
assert lon == pytest.approx(point["sign_idx"] * 30 + point["degree_in_sign"])
+29 -4
View File
@@ -99,10 +99,13 @@ def test_varga_map_boundary_examples() -> None:
def test_rudramsa_d11_is_supported_by_native_varga_map() -> None:
assert varga_map(0, 0, 11) == 0
assert varga_map(0, 10, 11) == 10
assert varga_map(1, 0, 11) == 9
assert varga_map(1, 10, 11) == 7
# 原值: varga_map(1, 0, 11) == 9;varga_map(1, 10, 11) == 7;calc_varga(35) == Aquarius
# 新值: 11、9、Aries
# 原因: BUG-1260,D11 改按 PVR 6.2.11 从白羊逆数起点,再顺数各份
assert varga_map(1, 0, 11) == 11
assert varga_map(1, 10, 11) == 9
result = calc_varga(35.0, 11)
assert result["sign"] == "Aquarius"
assert result["sign"] == "Aries"
assert 0 <= result["degree_in_sign"] < 30
@@ -117,7 +120,29 @@ def test_default_varga_batch_includes_declared_vargas() -> None:
charts = calc_all_vargas({"Moon": 35.0}, 10.0)
for key in ("D5_Panchamsa", "D6_Shashthamsa", "D8_Ashtamsa", "D11_Rudramsa", "D81_Navamsa-Navamsa", "D108_Dwadasamsa-Navamsa", "D144_Dwadasamsa-Dwadasamsa"):
assert key in charts
assert charts["D11_Rudramsa"]["Moon"]["sign"] == "Aquarius"
# 原值: Aquarius / 新值: Aries / 原因: BUG-1260,35° 的 D11 按 PVR 6.2.11 落到白羊
assert charts["D11_Rudramsa"]["Moon"]["sign"] == "Aries"
assert "6.2.5" in charts["D5_Panchamsa"]["_meta"]["mapping_source"]
assert "6.2.11" in charts["D11_Rudramsa"]["_meta"]["mapping_source"]
def test_pvr_d5_d6_d8_d11_worked_examples() -> None:
"""Hand counts from PVR Integrated Approach 6.2.5 / 6.2.6 / 6.2.8 / 6.2.11."""
# 6.2.5: odd parts Ar, Aq, Sg, Ge, Li; even Ta, Vi, Pi, Cp, Sc.
# 11° Gemini is the 2nd part of an odd sign.
assert calc_varga(60 + 11, 5)["sign"] == "Aquarius"
# 19° Taurus is the 4th part of an even sign.
assert calc_varga(30 + 19, 5)["sign"] == "Capricorn"
# 6.2.6: 11° Gemini -> Gemini; 19° Scorpio -> Capricorn.
assert calc_varga(60 + 11, 6)["sign"] == "Gemini"
assert calc_varga(210 + 19, 6)["sign"] == "Capricorn"
# 6.2.8 counting: 10° Gemini is the 3rd part of a dual sign, 3rd from Leo is Libra.
# 19° Scorpio is the 6th part of a fixed sign, 6th from Sagittarius is Taurus.
assert calc_varga(60 + 10, 8)["sign"] == "Libra"
assert calc_varga(210 + 19, 8)["sign"] == "Taurus"
# 6.2.11: 11° Gemini -> Gemini; 19° Scorpio -> Pisces.
assert calc_varga(60 + 11, 11)["sign"] == "Gemini"
assert calc_varga(210 + 19, 11)["sign"] == "Pisces"
def test_navamsa_matches_user_jhora_pdf_reference_chart() -> None: