fix: reverse Rahu degree in eight-karaka ranking

(cherry picked from commit 197672e3f1c5d06fe44f0da196d36f6cf4a856cf)
This commit is contained in:
732642856
2026-10-02 23:38:54 +08:00
committed by Jesse_Chen
parent 677d40f991
commit cb9d942b9e
2 changed files with 24 additions and 5 deletions
+13 -5
View File
@@ -132,21 +132,29 @@ def calc_chara_karaka_7(planet_degrees: Dict[str, float]) -> Dict:
def calc_chara_karaka_8(planet_degrees: Dict[str, float]) -> Dict:
"""计算8星制Chara Karaka(含Rahu,Ketu排除)。"""
"""计算8星制Chara Karaka(含Rahu,Ketu排除)。
8星制按传统规则以 ``30 - Rahu 的星座内度数`` 排序;其余行星
使用原始星座内度数。原始值和排序值都保留在结果中,便于审计。
"""
planets = {}
for pname, deg in planet_degrees.items():
if pname == 'Ketu':
continue
planets[pname] = deg
sorted_planets = sorted(planets.items(), key=lambda x: x[1], reverse=True)
raw_degree = float(deg) % 30.0
effective_degree = (30.0 - raw_degree) % 30.0 if pname == 'Rahu' else raw_degree
planets[pname] = (raw_degree, effective_degree)
sorted_planets = sorted(planets.items(), key=lambda x: x[1][1], reverse=True)
results = {}
for rank, (pname, deg) in enumerate(sorted_planets, 1):
for rank, (pname, (raw_degree, effective_degree)) in enumerate(sorted_planets, 1):
if rank > 8:
break
karaka = KARAKA_8[rank]
results[karaka] = {
'planet': pname,
'degree_in_sign': round(deg, 4),
'degree_in_sign': round(raw_degree, 4),
'effective_degree_in_sign': round(effective_degree, 4),
'rahu_reverse_applied': pname == 'Rahu',
'rank': rank,
'domain': KARAKA_DOMAINS.get(karaka, ''),
'cn_name': KARAKA_CN.get(karaka, karaka),