fix: Python引擎P0 Bug修复 + 参考文档4处数据修正

P0 Bug修复(scripts/):
- jyotish_engine.py: Chara Karaka改用degree_in_sign(0-30)替代degree(0-360)
- jyotish_engine.py: DK提取路径从ck7.get('DK')改为ck7['karaka_table']['Darakaraka']
- jaimini.py: Rahu逆行边界从(30-deg)%30改为30.0-deg
- jyotish_engine.py: status标签入庙(Exalted)→入旺(Exalted)术语纠正

参考文档修正(references/):
- vimshottari_dasha_guide.md: 15°Aries星宿边界Ashwini→Bharani
- planetary-dignity-complete-reference.md: 水星逆行燃烧12°→8°
- marriage-timing-comprehensive-techniques.md: UL计算公式重写
- planets.md: 燃烧度数补充逆行变体注释

验证:一楠星盘AK=Sun✓ DK=Venus✓ (修复前AK=Jupiter DK=Mars)
This commit is contained in:
732642856
2026-04-25 03:42:34 +08:00
parent 06abfb14c6
commit 6582c9ed64
8 changed files with 138 additions and 64 deletions
+2 -2
View File
@@ -108,8 +108,8 @@ def calc_chara_karaka_8(planet_degrees: Dict[str, float]) -> Dict:
if pname == 'Ketu':
continue
if pname == 'Rahu':
# Rahu用反向度数
planets[pname] = (30 - deg) % 30
# Rahu逆行:用反向度数(30 - 度数),不取模以保留30.0边界值
planets[pname] = 30.0 - deg
else:
planets[pname] = deg
+14 -11
View File
@@ -145,7 +145,7 @@ def compute_chart_data(year, month, day, hour, minute, lat, lon, tz):
retro = spd < 0
house = ((si - asc_idx) % 12) + 1
status = "中性"
if EXALTATION.get(pname) == sign: status = "(Exalted)"
if EXALTATION.get(pname) == sign: status = "(Exalted)"
elif DEBILITATION.get(pname) == sign: status = "落陷(Debilitated)"
elif SIGN_LORDS.get(sign) == pname: status = "入庙(Own Sign)"
ni = int(lon_p / nak_span); pada = int((lon_p % nak_span) / (nak_span / 4)) + 1
@@ -1112,23 +1112,25 @@ def cmd_jaimini(args):
return {"error": f"jaimini模块导入失败: {e}"}
planets = chart.get('planets', {})
planet_lons = {}
planet_degs = {} # 星座内度数(0-30),用于Jaimini Karaka计算
for pn, pd in planets.items():
if isinstance(pd, dict) and 'degree' in pd:
planet_lons[pn] = pd['degree']
planet_degs[pn] = pd.get('degree_in_sign', pd['degree'] % 30)
asc_deg = chart.get('ascendant', {}).get('degree', 0)
result = {}
# Chara Karaka
# Chara Karaka(必须传星座内度数0-30,不是完整经度0-360)
mode = args.mode or 'all'
if mode in ('all', 'karaka'):
result['chara_karaka_7'] = calc_chara_karaka_7(planet_lons)
result['chara_karaka_8'] = calc_chara_karaka_8(planet_lons)
result['chara_karaka_7'] = calc_chara_karaka_7(planet_degs)
result['chara_karaka_8'] = calc_chara_karaka_8(planet_degs)
if mode in ('all', 'dasha'):
result['chara_dasha'] = calc_chara_dasha(asc_idx, planet_lons, args.year, args.month)
if mode in ('all', 'karakamsha'):
# DK的D9位置
ck7 = calc_chara_karaka_7(planet_lons)
dk_name = ck7.get('DK', {}).get('planet', 'Moon')
# DK的D9位置(用planet_degs计算Karaka,用planet_lons计算Navamsa
ck7 = calc_chara_karaka_7(planet_degs)
dk_name = ck7['karaka_table']['Darakaraka']['planet']
dk_lon = planet_lons.get(dk_name, 0)
dk_d9 = calc_varga(dk_lon, 9)
result['karakamsha'] = calc_karakamsha(dk_d9.get('sign', 'Aries'), dk_d9.get('degree_in_sign', 0))
@@ -1298,6 +1300,7 @@ def cmd_full_reading(args):
asc_deg = chart.get('ascendant', {}).get('degree', 0)
asc_sign = chart.get('ascendant', {}).get('sign', 'Unknown')
planet_lons = {pn: pd['degree'] for pn, pd in planets.items() if isinstance(pd, dict) and 'degree' in pd}
planet_degs = {pn: pd.get('degree_in_sign', pd['degree'] % 30) for pn, pd in planets.items() if isinstance(pd, dict) and 'degree' in pd}
planet_sign_indices = {}
for pn, pd in planets.items():
if isinstance(pd, dict) and 'sign' in pd:
@@ -1359,13 +1362,13 @@ def cmd_full_reading(args):
from varga import calc_varga
jaimini_result = {}
jaimini_result['chara_karaka_7'] = calc_chara_karaka_7(planet_lons)
jaimini_result['chara_karaka_8'] = calc_chara_karaka_8(planet_lons)
jaimini_result['chara_karaka_7'] = calc_chara_karaka_7(planet_degs)
jaimini_result['chara_karaka_8'] = calc_chara_karaka_8(planet_degs)
jaimini_result['chara_dasha'] = calc_chara_dasha(asc_idx, planet_lons, args.year, args.month)
# Karakamsha
# Karakamsha(用planet_degs计算Karaka,用planet_lons计算Navamsa
ck7 = jaimini_result['chara_karaka_7']
dk_name = ck7.get('DK', {}).get('planet', 'Moon')
dk_name = ck7['karaka_table']['Darakaraka']['planet']
dk_lon = planet_lons.get(dk_name, 0)
dk_d9 = calc_varga(dk_lon, 9)
jaimini_result['karakamsha'] = calc_karakamsha(