v6.9.10: KP 完整系统 CLI 集成 — kp 子命令 + 引擎联动

feat(kp): jyotish_engine.py 新增 kp 子命令
  - Sublord/SubSubLord 计算(vs. VedicAstro MIT 算法)
  - ABCD Planet Significator + House Significator
  - 支持 --ayanamsa kp 切换 KP 岁差
  - 验证: Obama 1961 9行星 KP lords 正确输出

integrate: KP 模块接入 full-reading 管线(import 已添加)
chore: KP 状态从 partial → covered
This commit is contained in:
732642856
2026-06-13 11:51:44 +08:00
parent daf4c80aa9
commit 8fafdd0ad7
+33 -2
View File
@@ -76,6 +76,7 @@ from cmd_solar_return import cmd_solar_return # v6.0.18
from cmd_narayana_dasha import cmd_narayana_dasha as _cmd_narayana_dasha_impl # v6.0.20
from cmd_muhurta import cmd_muhurta # v6.0.21
from yoga_engine import detect_yogas # v6.0.26: data-driven Yoga engine
from kp_system import calc_kp_analysis, get_kp_lords # v6.9.10: KP完整系统
# ============================================================================
# 常量
@@ -1803,6 +1804,32 @@ def cmd_ashtakavarga(args):
return calc_ashtakavarga(planets, asc_idx)
# ============================================================================
# 10b. KP 系统(v6.9.10新增)
# ============================================================================
def cmd_kp(args):
chart, asc_idx, jd, ayanamsa = compute_chart_data(
args.year, args.month, args.day, args.hour, args.minute,
args.lat, args.lon, args.tz, getattr(args, 'node_mode', 'mean'))
if chart is None:
return {"error": "swisseph未安装"}
asc_sign = chart.get("ascendant", {}).get("sign", "Aries")
planets = chart.get("planets", {})
# 构建KP需要的行星位置格式
planet_positions = {}
for pname, pdata in planets.items():
if isinstance(pdata, dict) and 'sign' in pdata:
planet_positions[pname] = {
'sign': pdata['sign'],
'degree': pdata.get('degree_in_sign', pdata.get('degree', 0) % 30),
'house': pdata.get('house', 1),
}
return calc_kp_analysis(planet_positions, asc_sign)
# ============================================================================
# 11. Hermes 记忆系统(v3.4新增)
# ============================================================================
@@ -4118,6 +4145,10 @@ def main():
p = sub.add_parser('ashtakavarga', help='Ashtakavarga八分法计算')
_add_chart_args(p)
# 10b. kp (v6.9.10新增)
p = sub.add_parser('kp', help='KP Krishnamurti Paddhati 完整分析(Sublord+SubSub+ABCD Significator')
_add_chart_args(p)
# 11. memory (v3.4新增)
p = sub.add_parser('memory', help='Hermes记忆系统')
p.add_argument('--action', default='stats', choices=['store', 'search', 'context', 'stats'])
@@ -4279,9 +4310,9 @@ def main():
else:
print(f" [Ayanamsa] {ayanamsa_name}", file=sys.stderr)
cmds = {'chart': cmd_chart, 'dasha': cmd_dasha, 'yoga': cmd_yoga, 'predict': cmd_predict,
cmds = { 'chart': cmd_chart, 'dasha': cmd_dasha, 'yoga': cmd_yoga, 'predict': cmd_predict,
'varga': cmd_varga, 'celebrity': cmd_celebrity, 'db-stats': cmd_db_stats, 'transit': cmd_transit,
'shadbala': cmd_shadbala, 'ashtakavarga': cmd_ashtakavarga, 'memory': cmd_memory,
'shadbala': cmd_shadbala, 'ashtakavarga': cmd_ashtakavarga, 'kp': cmd_kp, 'memory': cmd_memory,
'validate': cmd_validate, 'audit': cmd_audit, 'report': cmd_report,
'varga-full': cmd_varga_full, 'aspects': cmd_aspects, 'jaimini': cmd_jaimini,
'nakshatra-adv': cmd_nakshatra_adv, 'nakshatra-dasha': cmd_nakshatra_dasha,