从报告日期所在月起列出 36 个月的九星表。报告口径和 KP 岁差口径各一张,另有五级大运月采样。黄经仍走本系统恒星计算。
Co-Authored-By: Grok (agent loop)
This commit is contained in:
co-authored by
Grok (agent loop)
parent
4c405d2a51
commit
355946cd1a
@@ -57,6 +57,13 @@ LABELS: dict[str, tuple[str, str]] = {
|
||||
"neutral": ("Natural neutral", "天然中性"),
|
||||
"temporary_friends": ("Temporary friends", "临时友"),
|
||||
"temporary_enemies": ("Temporary enemies", "临时敌"),
|
||||
"year": ("Year", "年份"),
|
||||
"month": ("Month", "月份"),
|
||||
"mahadasha": ("Mahadasha", "大运"),
|
||||
"antardasha": ("Antardasha", "小运"),
|
||||
"pratyantardasha": ("Pratyantardasha", "次小运"),
|
||||
"sookshma": ("Sookshma", "细运"),
|
||||
"prana": ("Prana", "微运"),
|
||||
"house": ("House", "宫位"),
|
||||
"item": ("Item", "项目"),
|
||||
"karaka": ("Karaka", "卡拉卡"),
|
||||
@@ -172,6 +179,7 @@ SECTIONS: tuple[tuple[str, str], ...] = (
|
||||
("Tripataki Chakra Detail", "Tripataki 轮盘明细"),
|
||||
("Annual Tajika Strength", "年度 Tajika 力量"),
|
||||
("Annual Saham Formula Trace", "年度特殊点公式轨迹"),
|
||||
("Annual Chart Numeric Data", "年度图盘数值数据"),
|
||||
("Shadbala Subcomponent", "六维力量分项"),
|
||||
("Shadbala Result", "六维力量结果"),
|
||||
("House Components and Physical Coordinates", "宫位分量与坐标"),
|
||||
@@ -219,6 +227,7 @@ SECTIONS: tuple[tuple[str, str], ...] = (
|
||||
("Multi-Reference Transit", "多参考点行运"),
|
||||
("Double Transit PAC", "木土双重行运 PAC"),
|
||||
("Lagna / 7th Lord Transit", "上升主与七宫主行运"),
|
||||
("Three-Year Predictive Ephemeris", "三年逐月星历"),
|
||||
("Natal Calculation Conventions", "本命计算口径"),
|
||||
("KP Calculation Conventions", "KP 计算口径"),
|
||||
("D9 Dignity", "D9 尊贵"),
|
||||
@@ -229,11 +238,9 @@ SECTIONS: tuple[tuple[str, str], ...] = (
|
||||
)
|
||||
|
||||
FORBIDDEN_TITLES = (
|
||||
"Annual Chart Numeric Data",
|
||||
"Bhava Bala Relative Score Components",
|
||||
"Score Extremes",
|
||||
"独立年度方法参考",
|
||||
"三年逐月星历",
|
||||
"D81",
|
||||
"D108",
|
||||
"D144",
|
||||
@@ -933,6 +940,48 @@ def _trace_table(traces: Any, language: str) -> str:
|
||||
return _rows_from(rows, language, [("name", "text"), ("rule", "text"), ("phase", "text"), ("longitude", "text")])
|
||||
|
||||
|
||||
def _annual_numeric(packet: dict, language: str) -> str:
|
||||
rows = []
|
||||
seen = set()
|
||||
packs = []
|
||||
primary = _first(packet, ("timing_and_predictive_systems", "annual_tajika_pack")) or {}
|
||||
if isinstance(primary, dict):
|
||||
packs.append(primary)
|
||||
series = _first(packet, ("timing_and_predictive_systems", "annual_tajika_series")) or {}
|
||||
years = series.get("years") if isinstance(series, dict) else None
|
||||
if isinstance(years, dict):
|
||||
for year in sorted(years, key=str):
|
||||
pack = years.get(year)
|
||||
if isinstance(pack, dict):
|
||||
packs.append(pack)
|
||||
for pack in packs:
|
||||
pages = pack.get("annual_year_pages") if isinstance(pack.get("annual_year_pages"), list) else []
|
||||
if not pages:
|
||||
chart = pack.get("annual_chart") if isinstance(pack.get("annual_chart"), dict) else {}
|
||||
data = chart.get("data") if isinstance(chart.get("data"), dict) else chart
|
||||
longitudes = data.get("planet_longitudes") if isinstance(data.get("planet_longitudes"), dict) else {}
|
||||
profile = pack.get("profile") if isinstance(pack.get("profile"), dict) else {}
|
||||
pages = [{"target_year": profile.get("target_year"), "planet_longitudes": longitudes}] if longitudes else []
|
||||
for page in pages:
|
||||
if not isinstance(page, dict):
|
||||
continue
|
||||
longitudes = page.get("planet_longitudes") if isinstance(page.get("planet_longitudes"), dict) else {}
|
||||
for planet, longitude in longitudes.items():
|
||||
if not isinstance(longitude, (int, float)) or isinstance(longitude, bool):
|
||||
continue
|
||||
key = (page.get("target_year"), planet)
|
||||
if key in seen:
|
||||
continue
|
||||
seen.add(key)
|
||||
rows.append({
|
||||
"year": page.get("target_year"),
|
||||
"planet": planet,
|
||||
"sign": SIGNS[int(float(longitude) // 30) % 12],
|
||||
"longitude": round(float(longitude), 6),
|
||||
})
|
||||
return _rows_from(rows, language, [("year", "text"), ("planet", "planet"), ("sign", "sign"), ("longitude", "text")])
|
||||
|
||||
|
||||
def _annual_saham_trace(packet: dict, language: str) -> str:
|
||||
pack = _first(packet, ("timing_and_predictive_systems", "annual_tajika_pack")) or {}
|
||||
sahams = _pack_data(pack.get("sahams") if isinstance(pack, dict) else None)
|
||||
@@ -2500,18 +2549,61 @@ _BUILDERS = {
|
||||
"Tripataki Chakra Detail": _tripataki,
|
||||
"Annual Tajika Strength": _tajika_strength,
|
||||
"Annual Saham Formula Trace": _annual_saham_trace,
|
||||
"Annual Chart Numeric Data": _annual_numeric,
|
||||
}
|
||||
|
||||
|
||||
def _ephemeris(packet: dict, language: str) -> str:
|
||||
pack = _first(packet, ("timing_and_predictive_systems", "report_month_ephemeris")) or {}
|
||||
if not isinstance(pack, dict) or not pack.get("report_rows"):
|
||||
return _blank(language, ["month", "planet", "sign", "longitude"])
|
||||
columns = [("month", "text"), ("planet", "planet"), ("sign", "sign"), ("longitude", "text")]
|
||||
report_rows = pack.get("report_rows") or []
|
||||
kp_rows = pack.get("kp_rows") or []
|
||||
if language == "zh":
|
||||
report_note = f"报告口径,{len(report_rows)} 行。首月是报告日期所在月。"
|
||||
kp_note = f"KP 岁差口径,{len(kp_rows)} 行。黄经仍走本系统恒星计算,不用视位置。"
|
||||
else:
|
||||
report_note = f"Report frame, {len(report_rows)} rows. The first month is the report month."
|
||||
kp_note = f"KP ayanamsa frame, {len(kp_rows)} rows. Longitudes still use this system's sidereal calculation, not apparent position."
|
||||
parts = [
|
||||
report_note,
|
||||
_rows_from(report_rows, language, columns),
|
||||
kp_note,
|
||||
_rows_from(kp_rows, language, columns),
|
||||
]
|
||||
levels = pack.get("vimshottari_rows") if isinstance(pack.get("vimshottari_rows"), list) else []
|
||||
if levels:
|
||||
parts.append(_rows_from(
|
||||
levels,
|
||||
language,
|
||||
[
|
||||
("month", "text"),
|
||||
("mahadasha", "planet"),
|
||||
("antardasha", "planet"),
|
||||
("pratyantardasha", "planet"),
|
||||
("sookshma", "planet"),
|
||||
("prana", "planet"),
|
||||
],
|
||||
))
|
||||
elif pack.get("vimshottari_reason"):
|
||||
parts.append(
|
||||
"五级大运月采样没有算出。"
|
||||
if language == "zh"
|
||||
else "The five-level monthly sample was not calculated."
|
||||
)
|
||||
return "\n\n".join(part for part in parts if part)
|
||||
|
||||
|
||||
def _chapter_sections() -> list[list[str]]:
|
||||
order = [title for title, _zh in SECTIONS]
|
||||
groups = [
|
||||
order[:14],
|
||||
order[14:20],
|
||||
order[20:35],
|
||||
order[35:46],
|
||||
order[46:63],
|
||||
order[63:],
|
||||
order[14:21],
|
||||
order[21:36],
|
||||
order[36:47],
|
||||
order[47:65],
|
||||
order[65:],
|
||||
]
|
||||
return groups
|
||||
|
||||
@@ -2568,6 +2660,7 @@ def _render_named(packet: dict, language: str, title: str) -> str:
|
||||
"Multi-Reference Transit": lambda: _multi_transit(packet, language),
|
||||
"Double Transit PAC": lambda: _double_transit(packet, language),
|
||||
"Lagna / 7th Lord Transit": lambda: _lord_transit(packet, language),
|
||||
"Three-Year Predictive Ephemeris": lambda: _ephemeris(packet, language),
|
||||
"Natal Calculation Conventions": lambda: _settings(packet, language),
|
||||
"KP Calculation Conventions": lambda: _kp(packet, language),
|
||||
"D9 Dignity": lambda: _d9(packet, language),
|
||||
|
||||
Reference in New Issue
Block a user