Map advanced dignity labels into vimsopaka
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
# 力量等级分类(基于总分)
|
||||
|
||||
@@ -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", {})
|
||||
|
||||
@@ -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 时间线计算"""
|
||||
|
||||
Reference in New Issue
Block a user