fix(ayanamsa): keep a caller-selected mode across import and transit paths (BUG-1269, upstream 23be1807)
This commit is contained in:
@@ -26,7 +26,9 @@ def _compute_chart_from_args(args: Any) -> tuple:
|
||||
|
||||
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'))
|
||||
args.lat, args.lon, args.tz, getattr(args, 'node_mode', 'mean'),
|
||||
second=int(getattr(args, 'second', 0) or 0),
|
||||
ayanamsa_name=getattr(args, 'ayanamsa', None))
|
||||
|
||||
if chart is None:
|
||||
return None, None, None, None, {}, 0, 0, 0
|
||||
@@ -66,6 +68,14 @@ def cmd_nakshatra_adv(args: Any) -> Dict[str, Any]:
|
||||
if chart is None:
|
||||
return {"error": "swisseph未安装"}
|
||||
|
||||
applied_ayanamsa = (chart.get('birth_info') or {}).get('ayanamsa_name') if isinstance(chart, dict) else None
|
||||
|
||||
def _stamp(payload):
|
||||
if isinstance(payload, dict):
|
||||
payload['requested_ayanamsa'] = getattr(args, 'ayanamsa', None)
|
||||
payload['applied_ayanamsa'] = applied_ayanamsa
|
||||
return payload
|
||||
|
||||
try:
|
||||
from nakshatra_advanced import (
|
||||
find_nakshatra, calc_all_tara_balas, calc_sub_lord,
|
||||
@@ -85,7 +95,7 @@ def cmd_nakshatra_adv(args: Any) -> Dict[str, Any]:
|
||||
detail[pn] = find_nakshatra(lon)
|
||||
result_dict = {'planets': detail}
|
||||
if mode == 'detail':
|
||||
return result_dict
|
||||
return _stamp(result_dict)
|
||||
else:
|
||||
result_dict = {}
|
||||
|
||||
@@ -93,7 +103,7 @@ def cmd_nakshatra_adv(args: Any) -> Dict[str, Any]:
|
||||
if mode in ('all', 'tara'):
|
||||
tara = calc_all_tara_balas(moon_nak_idx, planet_lons)
|
||||
if mode == 'tara':
|
||||
return {'tara_bala': tara, 'moon_nakshatra_idx': moon_nak_idx}
|
||||
return _stamp({'tara_bala': tara, 'moon_nakshatra_idx': moon_nak_idx})
|
||||
result_dict['tara_bala'] = tara
|
||||
|
||||
# === mode: 'chandra' (v6.0.22 新增) ===
|
||||
@@ -107,7 +117,7 @@ def cmd_nakshatra_adv(args: Any) -> Dict[str, Any]:
|
||||
'chandra': calc_chandra_bala(moon_sign_idx, p_sign),
|
||||
}
|
||||
if mode == 'chandra':
|
||||
return {'chandra_bala': chandra, 'moon_sign_idx': moon_sign_idx}
|
||||
return _stamp({'chandra_bala': chandra, 'moon_sign_idx': moon_sign_idx})
|
||||
result_dict['chandra_bala'] = chandra
|
||||
|
||||
# === mode: 'combined' (v6.0.22 新增) ===
|
||||
@@ -115,14 +125,14 @@ def cmd_nakshatra_adv(args: Any) -> Dict[str, Any]:
|
||||
moon_sign_idx = int(moon_lon / 30) % 12
|
||||
combined = calc_tara_chandra_combined(moon_nak_idx, moon_sign_idx, planet_lons)
|
||||
if mode == 'combined':
|
||||
return {'tara_chandra_combined': combined}
|
||||
return _stamp({'tara_chandra_combined': combined})
|
||||
result_dict['tara_chandra_combined'] = combined
|
||||
|
||||
# === mode: 'sublord' ===
|
||||
if mode in ('all', 'sublord'):
|
||||
sublords = {pn: calc_sub_lord(lon) for pn, lon in planet_lons.items()}
|
||||
if mode == 'sublord':
|
||||
return {'sub_lords': sublords}
|
||||
return _stamp({'sub_lords': sublords})
|
||||
result_dict['sub_lords'] = sublords
|
||||
|
||||
# === mode: 'all' / 'full' — 综合报告 ===
|
||||
@@ -130,7 +140,7 @@ def cmd_nakshatra_adv(args: Any) -> Dict[str, Any]:
|
||||
full = nakshatra_full_report(chart)
|
||||
result_dict.update(full)
|
||||
|
||||
return result_dict
|
||||
return _stamp(result_dict)
|
||||
|
||||
|
||||
def cmd_nakshatra_dasha(args: Any) -> Dict[str, Any]:
|
||||
@@ -196,7 +206,8 @@ def cmd_nakshatra_dasha(args: Any) -> Dict[str, Any]:
|
||||
ty, tm, td = map(int, transit_date_str.split('-'))
|
||||
transit_jd = swe.julday(ty, tm, td, 12.0 - args.tz)
|
||||
transit_planets, transit_ayanamsa = _calc_sidereal_planets_for_jd(
|
||||
transit_jd, node_mode=getattr(args, 'node_mode', 'mean'), include_ketu=True)
|
||||
transit_jd, node_mode=getattr(args, 'node_mode', 'mean'), include_ketu=True,
|
||||
ayanamsa_name=getattr(args, 'ayanamsa', None))
|
||||
transit_lons = {}
|
||||
for pn, pd in transit_planets.items():
|
||||
if isinstance(pd, dict) and 'degree' in pd:
|
||||
@@ -217,7 +228,8 @@ def cmd_nakshatra_dasha(args: Any) -> Dict[str, Any]:
|
||||
ty, tm, td = map(int, transit_date_str.split('-'))
|
||||
transit_jd = swe.julday(ty, tm, td, 12.0 - args.tz)
|
||||
transit_planets, _ = _calc_sidereal_planets_for_jd(
|
||||
transit_jd, node_mode=getattr(args, 'node_mode', 'mean'), include_ketu=True)
|
||||
transit_jd, node_mode=getattr(args, 'node_mode', 'mean'), include_ketu=True,
|
||||
ayanamsa_name=getattr(args, 'ayanamsa', None))
|
||||
transit_lons = {}
|
||||
for pn, pd in transit_planets.items():
|
||||
if isinstance(pd, dict) and 'degree' in pd:
|
||||
|
||||
Reference in New Issue
Block a user