From 3ade797491b1dbda0dd9234c932981c1907f22ca Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Sun, 28 Jun 2026 17:32:03 +0800 Subject: [PATCH] Map advanced dignity labels into vimsopaka --- scripts/jyotish_engine.py | 7 ++++--- scripts/vimsopaka_calculator.py | 8 +++++++- tests/test_cli_smoke.py | 12 ++++++++++++ tests/test_dasha.py | 20 ++++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/scripts/jyotish_engine.py b/scripts/jyotish_engine.py index 284fc098..f11488ac 100644 --- a/scripts/jyotish_engine.py +++ b/scripts/jyotish_engine.py @@ -3938,9 +3938,10 @@ def cmd_full_reading(args): # 需要转为: {planet: {VargaType: DignityLevel}} dignity_map = { 'EXALTED': DignityLevel.EXALTED, 'MOOLATRIKONA': DignityLevel.MOOLATRIKONA, - 'OWN_SIGN': DignityLevel.OWN_SIGN, 'FRIEND': DignityLevel.FRIEND, - 'NEUTRAL': DignityLevel.NEUTRAL, 'ENEMY': DignityLevel.ENEMY, - 'DEBILITATED': DignityLevel.DEBILITATED, + 'OWN_SIGN': DignityLevel.OWN_SIGN, 'GREAT_FRIEND': DignityLevel.GREAT_FRIEND, + 'FRIEND': DignityLevel.FRIEND, 'NEUTRAL': DignityLevel.NEUTRAL, + 'ENEMY': DignityLevel.ENEMY, 'GREAT_ENEMY': DignityLevel.GREAT_ENEMY, + 'DEBILITATED': DignityLevel.DEBILITATED, 'NEECHA_BHANGA': DignityLevel.NEECHA_BHANGA, } # 建立 VargaType → varga_result key 的映射(修复:每个分盘独立计算尊贵) _vt_div = {VimsVargaType.D1:1, VimsVargaType.D2:2, VimsVargaType.D3:3, diff --git a/scripts/vimsopaka_calculator.py b/scripts/vimsopaka_calculator.py index 39afb8eb..7337fb53 100644 --- a/scripts/vimsopaka_calculator.py +++ b/scripts/vimsopaka_calculator.py @@ -42,10 +42,13 @@ class DignityLevel(Enum): EXALTED = "Exalted" # 入庙(最高) MOOLATRIKONA = "Moolatrikona" # 根本三角 OWN_SIGN = "Own Sign" # 自己的星座 + GREAT_FRIEND = "Great Friend" # 极友 FRIEND = "Friend" # 友好星座 NEUTRAL = "Neutral" # 中性星座 ENEMY = "Enemy" # 敌对星座 + GREAT_ENEMY = "Great Enemy" # 极敌 DEBILITATED = "Debilitated" # 落陷(最低) + NEECHA_BHANGA = "Neecha Bhanga" # 落陷取消 class VimsopakaBalaCalculator: """Vimsopaka Bala计算器""" @@ -89,10 +92,13 @@ class VimsopakaBalaCalculator: DignityLevel.EXALTED: 20.0, DignityLevel.MOOLATRIKONA: 18.0, DignityLevel.OWN_SIGN: 15.0, + DignityLevel.GREAT_FRIEND: 12.5, DignityLevel.FRIEND: 10.0, DignityLevel.NEUTRAL: 7.5, DignityLevel.ENEMY: 5.0, - DignityLevel.DEBILITATED: 2.0 + DignityLevel.GREAT_ENEMY: 3.5, + DignityLevel.DEBILITATED: 2.0, + DignityLevel.NEECHA_BHANGA: 9.0, } # 力量等级分类(基于总分) diff --git a/tests/test_cli_smoke.py b/tests/test_cli_smoke.py index e8f36fde..1bf38a2a 100644 --- a/tests/test_cli_smoke.py +++ b/tests/test_cli_smoke.py @@ -376,6 +376,18 @@ def test_full_reading_uses_d9_context_for_vimsopaka_navamsa_dignity() -> None: assert navamsa["dignity"] == "Enemy" +def test_full_reading_maps_advanced_dignity_labels_into_vimsopaka_scores() -> None: + result = run_engine("full-reading", *BASE_BIRTH_ARGS) + + jupiter_d9 = result["modules"]["d9_navamsa_expanded"]["Jupiter"] + assert jupiter_d9["dignity"] == "NEECHA_BHANGA" + + jupiter_navamsa = result["modules"]["vimsopaka"]["Jupiter"]["varga_scores"]["Navamsa"] + assert jupiter_navamsa["dignity"] == "Neecha Bhanga" + assert isinstance(jupiter_navamsa["virupas"], (int, float)) + assert jupiter_navamsa["virupas"] > 2.0 + + def test_varga_cli_outputs_d9_and_d10() -> None: result = run_engine("varga", *BASE_BIRTH_ARGS, "--d9", "--d10") charts = result.get("divisional_charts", {}) diff --git a/tests/test_dasha.py b/tests/test_dasha.py index 0cd11cb0..17d83682 100644 --- a/tests/test_dasha.py +++ b/tests/test_dasha.py @@ -128,6 +128,26 @@ class TestDignityLevel(unittest.TestCase): 'DEBILITATED', ) + def test_vimsopaka_calculator_supports_advanced_dignity_levels(self): + from vimsopaka_calculator import DignityLevel, VargaType, VimsopakaBalaCalculator + + calculator = VimsopakaBalaCalculator(mode="shodasavarga") + results = calculator.calculate_vimsopaka_bala({ + 'Jupiter': { + VargaType.D9: DignityLevel.NEECHA_BHANGA, + VargaType.D1: DignityLevel.GREAT_FRIEND, + VargaType.D10: DignityLevel.GREAT_ENEMY, + } + }) + + jupiter = results['Jupiter'] + assert jupiter['varga_scores']['Navamsa']['dignity'] == 'Neecha Bhanga' + assert jupiter['varga_scores']['Navamsa']['virupas'] == 9.0 + assert jupiter['varga_scores']['Rashi']['dignity'] == 'Great Friend' + assert jupiter['varga_scores']['Rashi']['virupas'] == 12.5 + assert jupiter['varga_scores']['Dasamsa']['dignity'] == 'Great Enemy' + assert jupiter['varga_scores']['Dasamsa']['virupas'] == 3.5 + class TestDashaCalculation(unittest.TestCase): """测试 Dasha 时间线计算"""