Files
Jyotisha/scripts/cmd_solar_return.py
T
732642856 0d44b9b43f v6.0.18: Solar Return/Varshaphala 实现 + Muntha covered
变更概要:
- scripts/solar_return.py(新):太阳返照盘核心计算(二分法求精确UT时刻)
- scripts/cmd_solar_return.py(新):solar-return 子命令
- scripts/jyotish_engine.py:新增 Step 4.12 + cmd_solar_return 注册 + --target-year 参数
- references/technique_registry.json:muntha→covered,新增 solar_return(covered)
- CHANGELOG.md:新增 v6.0.18 条目
- SKILL.md:版本 6.0.18

已知限制(待修复):
- swisseph 不可用时,calc_solar_return_chart 报错导致 solar_return_full_report 提前返回,Muntha 计算被跳过。
- 修复方向:将 calc_solar_return_chart 拆为 UT 计算(近似算法可用)和 chart 计算两步,chart 失败时不中断 Muntha 计算。
2026-06-04 07:35:57 +08:00

67 lines
2.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
cmd_solar_return: Solar Return (Varshaphala) CLI 子命令
Jyotish Vedic Astrology Skill — v6.0.18
用法:
python3 jyotish_engine.py solar-return --year REDACTED_YEAR --month 4 --day 17 \
--hour 14 --minute 45 --lat 36.4667 --lon 114.2 --tz 8 --target-year 2026
"""
import sys
import os
from typing import Dict, Any
def cmd_solar_return(args: Any) -> Dict[str, Any]:
"""
solar-return 子命令:计算太阳返照盘 + 完整 Varshaphala 分析。
参数 (来自 args):
year, month, day, hour, minute: 出生时间
lat, lon, tz: 出生地点/时区
target_year: 目标年份(计算该年太阳返照)
返回:
dict: solar_return_full_report() 的结果
"""
try:
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from solar_return import solar_return_full_report
except ImportError as e:
return {"error": f"solar_return 模块导入失败: {e}"}
if not hasattr(args, 'target_year') or args.target_year is None:
return {"error": "solar-return 需要 --target-year 参数",
"hint": "指定目标年份,如 --target-year 2026"}
return solar_return_full_report(
args.year, args.month, args.day,
args.hour, args.minute,
args.lat, args.lon, args.tz,
args.target_year,
)
if __name__ == '__main__':
# 独立测试入口
import argparse
from datetime import datetime
parser = argparse.ArgumentParser(description='Solar Return 测试')
parser.add_argument('--year', type=int, required=True)
parser.add_argument('--month', type=int, required=True)
parser.add_argument('--day', type=int, required=True)
parser.add_argument('--hour', type=int, default=12)
parser.add_argument('--minute', type=int, default=0)
parser.add_argument('--lat', type=float, required=True)
parser.add_argument('--lon', type=float, required=True)
parser.add_argument('--tz', type=float, default=0.0)
parser.add_argument('--target-year', type=int, required=True)
a = parser.parse_args()
result = cmd_solar_return(a)
import json
print(json.dumps(result, ensure_ascii=False, indent=2, default=str))