v6.9.12: Shadbala 精度升级 + Ashtakoot 36点合婚 + Kuja Dosha

feat(shadbala): 六重力量精度全面升级
  - Kendra Bala: 0/15 二值 → BPHS 15/30/60 三档 (Kendra/Panapara/Apoklima)
  - Bhava Bala: 新增12宫位力量评估 (宫主星+宫内行星+相位)
  - Hora Bala: 新增 Kala Bala 子项 (出生时主星获得60 Virupas)
  - Chesta Bala: Sun 使用 Seeghrochcha 公式 (0.953-1.017°/天线性映射)
  - 方法标记更新: v6.1.10 → v6.9.12

feat(ashtakoot): 完整 36 点合婚系统 (基于 dashaflow MIT 代码)
  - 8 标准 Kuta: Varna/Vashya/Tara/Yoni/GrahaMaitri/Gana/Bhakoot/Nadi
  - 7 附加 Kuta: Mahendra/StreeDeergha/Vedha/Rajju/BadConstellations/LagnaHouse7/SexEnergy
  - Kuja Dosha: 火星凶相分析 (5 行星×5 凶宫, 尊贵度加权)
  - 例外逻辑: Nadi/Rajju/StreeDeergha Dosha 自动缓解判断
  - CLI: jyotish_engine ashtakoot --m_year/--f_year ...

验证: 102/102 run_all PASS, Obama×Michelle 合婚 25/36 (69.4%)
This commit is contained in:
732642856
2026-06-13 13:08:12 +08:00
parent b01358d694
commit ee82af5ecb
3 changed files with 764 additions and 24 deletions
+52 -1
View File
@@ -1804,6 +1804,41 @@ def cmd_ashtakavarga(args):
return calc_ashtakavarga(planets, asc_idx)
# ============================================================================
# 10c. Ashtakoot 合婚(v6.9.12新增)
# ============================================================================
def cmd_ashtakoot(args):
"""Ashtakoot 36点合婚 + Kuja Dosha"""
try:
sys.path.insert(0, SCRIPT_DIR)
from ashtakoot import calculate_ashtakoot
except ImportError as e:
return {"error": f"ashtakoot模块导入失败: {e}"}
# 男方星盘
m_chart, m_asc_idx, m_jd, m_aya = compute_chart_data(
args.m_year, args.m_month, args.m_day, args.m_hour, args.m_minute,
args.m_lat, args.m_lon, args.m_tz, getattr(args, 'node_mode', 'mean'))
if m_chart is None:
return {"error": "男方: swisseph未安装"}
# 女方星盘
f_chart, f_asc_idx, f_jd, f_aya = compute_chart_data(
args.f_year, args.f_month, args.f_day, args.f_hour, args.f_minute,
args.f_lat, args.f_lon, args.f_tz, getattr(args, 'node_mode', 'mean'))
if f_chart is None:
return {"error": "女方: swisseph未安装"}
m_moon_lon = m_chart.get("planets", {}).get("Moon", {}).get("degree", 0)
f_moon_lon = f_chart.get("planets", {}).get("Moon", {}).get("degree", 0)
# 构建 lagna 数据供附加 Kuta 使用
m_chart_full = {"lagna": m_chart.get("ascendant", {}), "planets": m_chart.get("planets", {})}
f_chart_full = {"lagna": f_chart.get("ascendant", {}), "planets": f_chart.get("planets", {})}
return calculate_ashtakoot(m_moon_lon, f_moon_lon, m_chart_full, f_chart_full)
# ============================================================================
# 10b. KP 系统(v6.9.10新增)
# ============================================================================
@@ -4149,6 +4184,21 @@ def main():
p = sub.add_parser('kp', help='KP Krishnamurti Paddhati 完整分析(Sublord+SubSub+ABCD Significator')
_add_chart_args(p)
# 10c. ashtakoot (v6.9.12新增)
p = sub.add_parser('ashtakoot', help='Ashtakoot 36点合婚 + Kuja Dosha 火星凶相分析')
# 男方参数
for prefix in ['m_', 'f_']:
label = '男方' if prefix == 'm_' else '女方'
p.add_argument(f'--{prefix}year', type=int, required=True, help=f'{label}出生年')
p.add_argument(f'--{prefix}month', type=int, required=True, help=f'{label}出生月')
p.add_argument(f'--{prefix}day', type=int, required=True, help=f'{label}出生日')
p.add_argument(f'--{prefix}hour', type=int, required=True, help=f'{label}出生时')
p.add_argument(f'--{prefix}minute', type=int, required=True, help=f'{label}出生分')
p.add_argument(f'--{prefix}lat', type=float, required=True, help=f'{label}出生纬度')
p.add_argument(f'--{prefix}lon', type=float, required=True, help=f'{label}出生经度')
p.add_argument(f'--{prefix}tz', type=float, default=0, help=f'{label}时区')
p.add_argument('--node-mode', default='mean', choices=['mean', 'true'])
# 11. memory (v3.4新增)
p = sub.add_parser('memory', help='Hermes记忆系统')
p.add_argument('--action', default='stats', choices=['store', 'search', 'context', 'stats'])
@@ -4312,7 +4362,8 @@ def main():
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, 'kp': cmd_kp, 'memory': cmd_memory,
'shadbala': cmd_shadbala, 'ashtakavarga': cmd_ashtakavarga, 'kp': cmd_kp,
'ashtakoot': cmd_ashtakoot, '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,