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 计算。
This commit is contained in:
732642856
2026-06-04 07:35:57 +08:00
parent 8d0616c1b7
commit 0d44b9b43f
6 changed files with 720 additions and 6 deletions
+37 -1
View File
@@ -61,6 +61,7 @@ try:
HAS_SWE = True
except ImportError:
HAS_SWE = False
from cmd_solar_return import cmd_solar_return # v6.0.18
# ============================================================================
# 常量
@@ -3612,6 +3613,35 @@ def cmd_full_reading(args):
except Exception as e:
report['errors'].append(f"prashna: {e}")
# ── Step 4.12: Solar Return (Varshaphala) + Muntha proper (v6.0.18) ──
try:
# Solar Return(太阳返照盘)计算
if hasattr(args, 'target_year') and args.target_year:
from solar_return import solar_return_full_report
sr_result = solar_return_full_report(
args.year, args.month, args.day,
args.hour, args.minute,
args.lat, args.lon, args.tz,
args.target_year
)
report['modules']['solar_return'] = sr_result
# 更新 muntha 为正确值(来自太阳返照盘)
if 'muntha' in sr_result:
report['modules']['muntha'] = {
'source': 'solar_return_proper',
'muntha_sign': sr_result.get('muntha', {}).get('muntha_sign', '?'),
'muntha_lord': sr_result.get('muntha', {}).get('muntha_lord', '?'),
'note': '来自太阳返照盘的正确 Muntha 计算',
}
else:
report['modules']['solar_return'] = {
'note': '未提供 --target-year,跳过太阳返照盘计算',
'skipped': True,
'hint': '使用 --target-year <年份> 重新运行以获取 Varshaphala 分析'
}
except Exception as e:
report['errors'].append(f"solar-return: {e}")
# ── Step 5: 精确相位 ──
try:
from aspects import calc_all_aspects
@@ -4074,6 +4104,11 @@ def main():
p.add_argument('--age', type=int, required=True, help='当前年龄')
p.add_argument('--mode', default='all', choices=['all','muntha','yearlord','mudda','tripataka'], help='分析模式')
# 21.5 solar-return (v6.0.18新增)
p = sub.add_parser('solar-return', help='太阳返照盘 Varshaphala 年运分析')
_add_chart_args(p)
p.add_argument('--target-year', type=int, required=True, help='目标年份(计算该年太阳返照)')
# 21. synastry (v3.7新增)
p = sub.add_parser('synastry', help='合盘分析(Ashta Koota 36分制)')
p.add_argument('--moon1', type=float, required=True, help='Person1月亮黄经')
@@ -4091,6 +4126,7 @@ def main():
p.add_argument('--age', type=int, default=None, help='当前年龄(不提供则自动计算)')
p.add_argument('--today', default=None, help='Dasha/Sandhi参考日期 YYYY-MM-DD(默认今天)')
p.add_argument('--transit-date', default=None, help='Transit真实过境参考日期 YYYY-MM-DD(默认跟随--today或今天)')
p.add_argument('--target-year', type=int, default=None, help='太阳返照盘目标年份(默认不计算 Varshaphala')
# 23. prashna (v3.9新增)
p = sub.add_parser('prashna', help='Prashna问事占星(提问时刻星盘+Arudha+Sphuta+Sahams')
@@ -4137,7 +4173,7 @@ def main():
'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, 'argala': cmd_argala, 'tajika': cmd_tajika,
'synastry': cmd_synastry, 'full-reading': cmd_full_reading, 'prashna': cmd_prashna,
'synastry': cmd_synastry, 'solar-return': cmd_solar_return, 'full-reading': cmd_full_reading, 'prashna': cmd_prashna,
'double-transit-pac': cmd_double_transit_pac,
'transit-ll7l': cmd_transit_ll7l, 'planetary-congregation': cmd_planetary_congregation,
'vivah-saham': cmd_vivah_saham}