Map advanced dignity labels into vimsopaka

This commit is contained in:
732642856
2026-06-28 17:32:03 +08:00
parent 925f9f5603
commit 3ade797491
4 changed files with 43 additions and 4 deletions
+4 -3
View File
@@ -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,
+7 -1
View File
@@ -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,
}
# 力量等级分类(基于总分)
+12
View File
@@ -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", {})
+20
View File
@@ -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 时间线计算"""