fix(avastha): mark Shayanadi blocked when there is no sunrise instead of dropping the table

Polar day or night left determine_daytime without a sunrise, so the whole
avasthas module failed after the PVR activity formula was wired in. Only
the Shayanadi cell is blocked now; the other four states still compute
(BUG-1390).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HwMNZEzdzmrbPhuRNmZe3C
This commit is contained in:
Jesse_Chen
2026-10-18 18:46:02 +08:00
co-authored by Claude Opus 5.5
parent 84967d747f
commit 982c53dd17
3 changed files with 51 additions and 11 deletions
+11 -2
View File
@@ -227,7 +227,16 @@ class AvasthaCalculator:
result["avasthas"]["Shayanadi"] = self._calculate_shayanadi_avastha(planet, sign)
for name in ('Deeptadi', 'Lajjitadi', 'Shayanadi'):
result['avasthas'][name]['method_status'] = 'simplified_heuristic'
if activity_context is not None:
if activity_context is not None and activity_context.get('unavailable_reason'):
# 极昼极夜等算不出日出时,PVR 公式缺一项。不退回元素启发式冒充,标成无法计算(BUG-1390)。
result['avasthas']['Shayanadi'] = {
'state': None,
'sign': sign,
'meaning': '当天没有可用的日出(极昼或极夜),姿态无法按 PVR 公式计算。',
'method_status': 'blocked',
'blocked_reason': activity_context['unavailable_reason'],
}
elif activity_context is not None:
result['avasthas']['Shayanadi'] = calculate_pvr_shayanadi(
planet,
SIGNS.index(sign) * 30 + degree,
@@ -540,7 +549,7 @@ class AvasthaCalculator:
# Shayanadi Avastha
shayanadi = avasthas["Shayanadi"]
interpretation += f"5. 行为模式:{shayanadi['state']}({shayanadi['sign']})\n"
interpretation += f"5. 行为模式:{shayanadi['state'] or '无法计算'}({shayanadi['sign']})\n"
interpretation += f" {shayanadi['meaning']}\n"
return interpretation
+14 -9
View File
@@ -16369,15 +16369,20 @@ def cmd_full_reading(args):
# ── Step 10.5: Avasthas 行星状态 (v4.4.0) ──
try:
from avastha_calculator import AvasthaCalculator
from saham_daynight import determine_daytime
avastha_solar_day = determine_daytime(
_birth_datetime_from_args(args), lat=args.lat, lon=args.lon, tz=args.tz, rising='hindu')
hours_since_sunrise = (avastha_solar_day['julian_day_ut'] - avastha_solar_day['sunrise_jd_ut']) * 24
avastha_activity_context = {
'moon_longitude': planet_lons['Moon'],
'asc_longitude': asc_deg,
'hours_since_sunrise': hours_since_sunrise,
}
from saham_daynight import SahamDayNightError, determine_daytime
try:
avastha_solar_day = determine_daytime(
_birth_datetime_from_args(args), lat=args.lat, lon=args.lon, tz=args.tz, rising='hindu')
except SahamDayNightError as exc:
# 极昼极夜没有日出:只让姿态一项标无法计算,其余四类照常(BUG-1390)。
avastha_activity_context = {'unavailable_reason': str(exc)}
else:
hours_since_sunrise = (avastha_solar_day['julian_day_ut'] - avastha_solar_day['sunrise_jd_ut']) * 24
avastha_activity_context = {
'moon_longitude': planet_lons['Moon'],
'asc_longitude': asc_deg,
'hours_since_sunrise': hours_since_sunrise,
}
avast_calc = AvasthaCalculator()
avast_result = {}
for pn, pd in planets.items():