From 8fafdd0ad7a5b1476b25bcfc7b9cfbaa9f038396 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Sat, 13 Jun 2026 11:51:44 +0800 Subject: [PATCH] =?UTF-8?q?v6.9.10:=20KP=20=E5=AE=8C=E6=95=B4=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=20CLI=20=E9=9B=86=E6=88=90=20=E2=80=94=20kp=20?= =?UTF-8?q?=E5=AD=90=E5=91=BD=E4=BB=A4=20+=20=E5=BC=95=E6=93=8E=E8=81=94?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- scripts/jyotish_engine.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/scripts/jyotish_engine.py b/scripts/jyotish_engine.py index ecb81212..0ec3149b 100644 --- a/scripts/jyotish_engine.py +++ b/scripts/jyotish_engine.py @@ -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,