fix(vimsopaka): score sign-owner relationships on a 20-point scale (BUG-1261, upstream f32472b5)

This commit is contained in:
jesse-ux
2026-10-07 16:43:34 +08:00
parent db68e90816
commit ab9e30560a
5 changed files with 109 additions and 70 deletions
+8 -3
View File
@@ -757,9 +757,14 @@ def test_full_reading_maps_advanced_dignity_labels_into_vimsopaka_scores() -> No
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
# 原值: dignity == "Neecha Bhanga",virupas > 2.0
# 新值: 星主关系之一,virupas 属于 {20, 18, 15, 10, 7, 5}
# 原因: BUG-1261,Vimsopaka 不再把落陷取消当作尊贵分;D9 标签本身仍是 NEECHA_BHANGA
assert jupiter_navamsa["dignity"] in {
"Exalted", "Moolatrikona", "Own Sign", "Great Friend", "Friend", "Neutral", "Enemy", "Great Enemy",
}
assert jupiter_navamsa["virupas"] in {20.0, 18.0, 15.0, 10.0, 7.0, 5.0}
assert "不是功能吉凶" in result["modules"]["vimsopaka"]["Jupiter"]["interpretation"]
def test_varga_cli_outputs_d9_and_d10() -> None:
+31 -5
View File
@@ -134,19 +134,45 @@ class TestDignityLevel(unittest.TestCase):
calculator = VimsopakaBalaCalculator(mode="shodasavarga")
results = calculator.calculate_vimsopaka_bala({
'Jupiter': {
VargaType.D9: DignityLevel.NEECHA_BHANGA,
# 原值: D9 = NEECHA_BHANGA,virupas 9.0
# 新值: D9 = FRIEND,virupas 15.0
# 原因: BUG-1261,Varga Viswa 只收星主关系,不收落陷取消
VargaType.D9: DignityLevel.FRIEND,
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
# 原值: Neecha Bhanga / 9.0;Great Friend 12.5;Great Enemy 3.5
# 新值: Friend / 15.0;Great Friend 18.0;Great Enemy 5.0
# 原因: BUG-1261,尊贵分改为入旺自宫 20、极友 18、友 15、中 10、敌 7、极敌 5
assert jupiter['varga_scores']['Navamsa']['dignity'] == 'Friend'
assert jupiter['varga_scores']['Navamsa']['virupas'] == 15.0
assert jupiter['varga_scores']['Rashi']['dignity'] == 'Great Friend'
assert jupiter['varga_scores']['Rashi']['virupas'] == 12.5
assert jupiter['varga_scores']['Rashi']['virupas'] == 18.0
assert jupiter['varga_scores']['Dasamsa']['dignity'] == 'Great Enemy'
assert jupiter['varga_scores']['Dasamsa']['virupas'] == 3.5
assert jupiter['varga_scores']['Dasamsa']['virupas'] == 5.0
with self.assertRaises(ValueError):
calculator.calculate_vimsopaka_bala({'Jupiter': {VargaType.D9: DignityLevel.NEECHA_BHANGA}})
with self.assertRaises(ValueError):
calculator.calculate_vimsopaka_bala({'Jupiter': {VargaType.D1: DignityLevel.DEBILITATED}})
def test_all_own_sign_shodasavarga_scores_twenty(self):
from vimsopaka_calculator import DignityLevel, VimsopakaBalaCalculator
calculator = VimsopakaBalaCalculator(mode="shodasavarga")
own = {varga: DignityLevel.OWN_SIGN for varga in calculator.SHODASAVARGA_WEIGHTS}
result = calculator.calculate_vimsopaka_bala({'Sun': own})['Sun']
self.assertEqual(sum(calculator.SHODASAVARGA_WEIGHTS.values()), 20)
self.assertEqual(sum(VimsopakaBalaCalculator.DASAVARGA_WEIGHTS.values()), 20)
self.assertEqual(result['total_score'], 20)
self.assertEqual(result['category'], 'High')
self.assertTrue(result['complete'])
self.assertEqual(result['missing_vargas'], [])
self.assertEqual(result['calculation_profile'], 'bphs_7_21_27_varga_viswa_compound_relationships')
self.assertIn('不是功能吉凶', result['interpretation'])
self.assertNotIn('成功', result['interpretation'])
class TestDashaCalculation(unittest.TestCase):