From 8d0616c1b720bd412c2fb5e864b09bbe4ec97252 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Thu, 4 Jun 2026 06:13:15 +0800 Subject: [PATCH] =?UTF-8?q?v6.0.17:=20bhrigu=5Fpada=5Fdasha=20=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=20+=20muntha/prashna=20placeholder=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scripts/bhrigu_pada_dasha.py (新): Bhrigu Pada Dasha 通用近似版 - scripts/jyotish_engine.py Step 4.11: 新增 bhrigu_pada_dasha 调用,修正 muntha/prashna placeholder 文字 - references/technique_registry.json: 新增 bhrigu_pada_dasha (partial) - CHANGELOG.md: 新增 v6.0.17 条目 - SKILL.md: 版本号 6.0.16 → 6.0.17 --- CHANGELOG.md | 31 +++++ SKILL.md | 2 +- references/technique_registry.json | 32 ++++- scripts/bhrigu_pada_dasha.py | 215 +++++++++++++++++++++++++++++ scripts/jyotish_engine.py | 37 ++++- 5 files changed, 305 insertions(+), 12 deletions(-) create mode 100644 scripts/bhrigu_pada_dasha.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ff1ebc6..547a8821 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # 印度占星 Skill 更新日志 +## v6.0.17-bhrigu-pada-dasha-muntha-prashna-update(2026-06-04)—— bhrigu_pada_dasha 接入 + muntha/prashna placeholder 修正 + +> **触发原因**:用户要求继续补充印度占星 skill 缺少的技法。v6.0.16 审计发现 bhrigu_pada_dasha 未入 registry,muntha/prashna placeholder 文字不准确。 + +### 变更内容 + +- `scripts/bhrigu_pada_dasha.py`(新文件 v6.0.17):Bhrigu Pada Dasha 通用近似版 + - `calc_pada_dasha_basic(birth_moon_lon, birth_date_jd, target_date_jd, ...)`:通用近似推进计算(1°/年) + - `calc_pada_dasha_marriage_timing(...)`:婚姻时机分析框架 + - `bhrigu_pada_dasha_full_report(...)`:完整报告(含样本年龄推进) + - **限制**:精确公式因 Bhrigu 子流派而异,本实现为通用近似,实战需与 Vimshottari/Chara Dasha 交叉验证 +- `scripts/jyotish_engine.py` Step 4.11 更新: + - 新增 `bhrigu_pada_dasha` 调用(sample ages 分析) + - `muntha` placeholder 文字修正(说明需要 Varshaphala 盘数据,建议用 cmd_prashna) + - `prashna` placeholder 文字修正(说明需要问卜时间,建议用 cmd_prashna 独立命令) +- `references/technique_registry.json` 新增 `bhrigu_pada_dasha`(partial) + +### 技法状态变更 + +| 技法 | 原状态 | 新状态 | 说明 | +|------|--------|--------|------| +| bhrigu_pada_dasha | 未入 registry | partial | 通用近似版已实现,精确公式待各流派补充 | +| muntha | missing (placeholder) | missing | 仍为 placeholder(需 Varshaphala 数据) | +| prashna_integration | partial (placeholder) | partial | 仍为 placeholder(需问卜时间) | + +### 已知限制 + +- `bhrigu_pada_dasha` 精确公式因流派而异,当前为通用近似(1°/年推进) +- `muntha` 完整分析需要 Varshaphala(太阳返照)排盘数据 → 建议用 `cmd_prashna` 独立命令 +- `prashna` full-reading 接入需要问卜时间 → 建议用 `cmd_prashna` 独立命令 + ## v6.0.16-marriage-counting-d30-muntha-prashna(2026-06-04)—— 新增 Marriage Counting + D30 + Muntha(占位) + Prashna(占位) > **触发原因**:用户要求继续补充印度占星 skill 缺少的技法。审计报告显示:Marriage Counting(精确)、D30 Trimshamsa(基础)、Muntha(缺失)、Prashna(未接入full-reading)为 P0/P1 缺失项。 diff --git a/SKILL.md b/SKILL.md index 755761f1..fcaf5330 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,6 +1,6 @@ --- name: jyotish-vedic-astrology -version: 6.0.16 +version: 6.0.17 description: 印度占星(Jyotish)专业解盘与推运系统。核心能力:PDF星盘输入→严谨解盘→精确推运应期输出。触发词:印度占星、吠陀占星、Jyotish、解盘、推运、星盘分析、Dasha、Transit、Nakshatra、Yoga、出生时间矫正、PDF星盘、读取PDF、分析PDF星盘、现代解读、误判纠错、Varga分盘、综合分析、过境分析、合盘、婚姻匹配、年运盘、Prashna、Argala、Jaimini、Shadbala、Ashtakavarga、HTML报告、深度解盘。 --- diff --git a/references/technique_registry.json b/references/technique_registry.json index 5674c50e..a2db19cd 100644 --- a/references/technique_registry.json +++ b/references/technique_registry.json @@ -1,5 +1,5 @@ { - "version": "v6.0.16-marriage-counting-d30-muntha-prashna", + "version": "v6.0.17-bhrigu-pada-dasha-muntha-prashna-update", "source_inspiration": [ { "name": "jyotishyamitra", @@ -774,6 +774,27 @@ ], "audit_label": "Prashna Integration", "missing_impact": "Prashna 未接入 full-reading,问事分析不完整。" + }, + "bhrigu_pada_dasha": { + "name": "Bhrigu Pada Dasha / 足步推进法", + "domains": [ + "bhrigu", + "pada_dasha", + "progression", + "marriage_timing" + ], + "status": "partial", + "knowledge_refs": [ + "bhrigu-pada-dasha-marriage-counting.md" + ], + "commands": [ + "full-reading" + ], + "output_paths": [ + "modules.bhrigu_pada_dasha" + ], + "audit_label": "Bhrigu Pada Dasha", + "missing_impact": "Bhrigu 足步推进法缺失,婚姻时机精确预测受限(通用近似版已实现)。" } }, "routes": { @@ -821,7 +842,8 @@ "marriage_counting", "trimshamsa_d30", "muntha", - "prashna_integration" + "prashna_integration", + "bhrigu_pada_dasha" ], "optional_techniques": [ "bhava_chalit", @@ -865,7 +887,8 @@ "marriage_counting", "trimshamsa_d30", "muntha", - "prashna_integration" + "prashna_integration", + "bhrigu_pada_dasha" ], "optional_techniques": [ "d9_navamsa", @@ -915,7 +938,8 @@ "marriage_counting", "trimshamsa_d30", "muntha", - "prashna_integration" + "prashna_integration", + "bhrigu_pada_dasha" ], "optional_techniques": [ "bhava_chalit", diff --git a/scripts/bhrigu_pada_dasha.py b/scripts/bhrigu_pada_dasha.py new file mode 100644 index 00000000..fd7051c1 --- /dev/null +++ b/scripts/bhrigu_pada_dasha.py @@ -0,0 +1,215 @@ +""" +Bhrigu Pada Dasha(Bhrigu 足步 Dasha)计算引擎 v1.0 +Jyotish Vedic Astrology Skill - Bhrigu Pada Dasha Module + +来源:公众号文章「4印度占星」,Bhrigu 体系下的行星推进法 +重要:Pada Dasha 精确公式因 Bhrigu 子流派而异,本实现为通用近似版。 + 实战中应与 Vimshottari/Chara Dasha 交叉验证。 + +核心概念: +- Bhrigu Pada Dasha 是基于行星推进(Progression)的 Dasha 系统 +- 与西方占星的 Secondary Progression 类似:每年推进一定度数 +- 主要用于婚姻时机预测,也可用于其他人生重大事件 +- 与 BCP(Bhrigu Chakra Paddhati 自然周期法)互补 + +计算要点(因流派而异,以下为通用近似): +1. 起始点:基于命盘中特定行星的 Pada(足迹/投射点) +2. 推进速率:每年推进一定度数(通用近似:1°/年,类似 Secondary Progression) +3. 星座序列:按特定顺序(近似:从起始星座开始,按正常星座顺序) +4. D9 验证:Pada Dasha 的结果需在 D9 中验证 + +本实现提供: +- 通用近似推进计算(用于婚姻时机粗略定位) +- 与婚姻计数法(Marriage Counting Method)的整合接口 +- D9 验证框架(需 D9 数据) + +限制: +- 精确推进速率因 Bhrigu 子流派而异,本实现使用 1°/年近似 +- 起始点确定规则因流派而异,本实现使用 Moon 作为默认起始点 +- 实战中必须用 Vimshottari/Chara Dasha 交叉验证 +""" + +import math + +# ── 基础常量 ── +SIGN_NAMES = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo', + 'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces'] +SIGN_CN = ['白羊座','金牛座','双子座','巨蟹座','狮子座','处女座', + '天秤座','天蝎座','射手座','摩羯座','水瓶座','双鱼座'] +SIGN_LORDS = ['Mars','Venus','Mercury','Moon','Sun','Mercury', + 'Venus','Mars','Jupiter','Saturn','Saturn','Jupiter'] + +def sign_of(lon): + """经度 -> 星座序号 (0-11)""" + return int((lon % 360) / 30) + +def norm(lon): + """归一化到 0-360""" + return lon % 360 + +def lon_cn(lon): + """经度 -> 中文星座名+度数""" + s = sign_of(lon) + d = lon % 30 + return f"{SIGN_CN[s]} {int(d)}°{int((d%1)*60)}'" + +# ── Bhrigu Pada Dasha 核心计算 ── + +def calc_pada_dasha_basic(birth_moon_lon, birth_date_jd, target_date_jd, + progression_rate=1.0, start_planet='Moon'): + """ + 通用近似 Bhrigu Pada Dasha 计算 + + Parameters: + - birth_moon_lon: 出生月亮经度(Sidereal) + - birth_date_jd: 出生 Julian Day + - target_date_jd: 目标时间 Julian Day + - progression_rate: 推进速率(度/年),默认 1.0(近似 Secondary Progression) + - start_planet: 起始行星,默认 'Moon'(通用近似) + + Returns: + - dict: {progressed_lon, progressed_sign, years_elapsed, interpretation} + """ + # 计算经过年数 + days_elapsed = target_date_jd - birth_date_jd + years_elapsed = days_elapsed / 365.25 + + # 推进经度 = 起始经度 + 年数 × 推进速率 + progressed_lon = norm(birth_moon_lon + years_elapsed * progression_rate) + progressed_sign = sign_of(progressed_lon) + + return { + 'progressed_longitude': round(progressed_lon, 4), + 'progressed_sign': SIGN_NAMES[progressed_sign], + 'progressed_sign_cn': SIGN_CN[progressed_sign], + 'years_elapsed': round(years_elapsed, 2), + 'progression_rate': progression_rate, + 'note': '通用近似版,精确公式因 Bhrigu 子流派而异' + } + +def calc_pada_dasha_marriage_timing(birth_moon_lon, birth_date_jd, + target_date_jd, d9_7lord_sign=None): + """ + Bhrigu Pada Dasha 婚姻时机计算(通用近似) + + 逻辑: + 1. 计算目标时间的推进月亮位置 + 2. 检查推进月亮是否与 D1/D9 的婚姻相关点形成联系 + 3. D9 验证:推进月亮在 D9 中的位置 + + Parameters: + - birth_moon_lon: 出生月亮 Sidereal 经度 + - birth_date_jd: 出生 JD + - target_date_jd: 目标时间 JD + - d9_7lord_sign: D9 中 7 宫主的星座 (0-11),用于验证 + + Returns: + - dict: 婚姻时机分析 + """ + # 推进月亮 + prog = calc_pada_dasha_basic(birth_moon_lon, birth_date_jd, target_date_jd) + prog_sign = sign_of(prog['progressed_longitude']) + + # 婚姻相关点(通用近似) + # 1. 推进月亮与 D1 7 宫主的联系 + # 2. 推进月亮与 Venus 的联系 + # 3. 推进月亮进入 D9 7 宫主星座 + + analysis = { + 'progressed_moon': prog, + 'marriage_indicators': {} + } + + # 指示词 1:推进月亮在 D9 7 宫主星座 + if d9_7lord_sign is not None: + analysis['marriage_indicators']['d9_7lord_sign'] = SIGN_NAMES[d9_7lord_sign] + analysis['marriage_indicators']['progressed_moon_in_d9_7lord_sign'] = (prog_sign == d9_7lord_sign) + + # 指示词 2:推进月亮在 Venus 星座(通用近似) + # Venus 星座需要从外部传入,这里只提供框架 + + return analysis + +def bhrigu_pada_dasha_full_report(birth_moon_lon, birth_date_jd, + d9_7lord_sign=None, d9_planets=None): + """ + Bhrigu Pada Dasha 完整报告(通用近似版) + + Parameters: + - birth_moon_lon: 出生月亮经度 + - birth_date_jd: 出生 JD + - d9_7lord_sign: D9 7 宫主星座 (0-11) + - d9_planets: D9 行星数据 {name: longitude} + + Returns: + - dict: 完整报告 + """ + report = { + 'method': 'Bhrigu Pada Dasha (通用近似版)', + 'source': '公众号文章「4印度占星」', + 'note': '精确公式因 Bhrigu 子流派而异,本实现为通用近似。实战需与 Vimshottari/Chara Dasha 交叉验证。', + 'birth_moon': { + 'longitude': round(birth_moon_lon, 4), + 'sign': SIGN_NAMES[sign_of(birth_moon_lon)], + 'sign_cn': SIGN_CN[sign_of(birth_moon_lon)] + } + } + + # 示例:计算几个关键年龄的推进月亮位置 + sample_ages = [20, 24, 25, 26, 28, 30, 32] + progressions = {} + for age in sample_ages: + target_jd = birth_date_jd + age * 365.25 + prog = calc_pada_dasha_basic(birth_moon_lon, birth_date_jd, target_jd) + progressions[f'age_{age}'] = prog + report['sample_progressions'] = progressions + + # D9 验证框架 + if d9_7lord_sign is not None: + report['d9_verification'] = { + 'd9_7lord_sign': SIGN_NAMES[d9_7lord_sign], + 'note': 'D9 验证:Pada Dasha 推进结果需在 D9 中确认' + } + + # 检查样本年龄中哪些的推进月亮在 D9 7 宫主星座 + marriage_windows = [] + for age_str, prog_data in progressions.items(): + if sign_of(prog_data['progressed_longitude']) == d9_7lord_sign: + age = int(age_str.split('_')[1]) + marriage_windows.append(age) + report['d9_verification']['marriage_windows'] = marriage_windows + + return report + +# ── CLI 入口 ── +if __name__ == '__main__': + import argparse, datetime + + parser = argparse.ArgumentParser(description='Bhrigu Pada Dasha Calculator (Approximate)') + parser.add_argument('--moon', type=float, help='Birth Moon longitude (sidereal)') + parser.add_argument('--jd', type=float, help='Birth Julian Day') + parser.add_argument('--d9-7lord-sign', type=int, help='D9 7th lord sign (0-11)') + parser.add_argument('--test', action='store_true', help='Run test') + + args = parser.parse_args() + + if args.test or (args.moon is None): + # 测试用例:月亮 120°(巨蟹座 0°),出生 JD 2449080.5 + test_moon = 120.0 + test_jd = 2449080.5 + result = bhrigu_pada_dasha_full_report(test_moon, test_jd, d9_7lord_sign=3) + print(json.dumps(result, indent=2, ensure_ascii=False) if False else None) + + print("=== Bhrigu Pada Dasha 测试报告 ===") + print(f"出生月亮: {lon_cn(test_moon)}") + print(f"\n样本推进(1°/年近似):") + for age_str, prog in result['sample_progressions'].items(): + age = age_str.split('_')[1] + print(f" {age}岁: {lon_cn(prog['progressed_longitude'])}") + if result.get('d9_verification'): + print(f"\nD9 验证: 7宫主在 {result['d9_verification']['d9_7lord_sign']}") + print(f"婚姻窗口: {result['d9_verification']['marriage_windows']}") + else: + result = bhrigu_pada_dasha_full_report(args.moon, args.jd, args.d9_7lord_sign) + import json + print(json.dumps(result, indent=2, ensure_ascii=False)) diff --git a/scripts/jyotish_engine.py b/scripts/jyotish_engine.py index 7ae3fe24..aad9d607 100644 --- a/scripts/jyotish_engine.py +++ b/scripts/jyotish_engine.py @@ -3567,10 +3567,27 @@ def cmd_full_reading(args): report['errors'].append(f"marriage-counting: {e}") try: - # Muntha (Tajika Varshaphala) - needs Varshaphala chart data - # For now, only calculate if Varshaphala data is available - # Placeholder: will be filled when Varshaphala casting is implemented - report['modules']['muntha'] = {'note': 'Muntha calculation requires Varshaphala chart data (solar return). Placeholder for v6.0.17.'} + # Bhrigu Pada Dasha(通用近似版,精确公式因流派而异) + from bhrigu_pada_dasha import bhrigu_pada_dasha_full_report + moon_lon = planet_lons.get('Moon', 0) + birth_jd = report.get('metadata', {}).get('birth_jd', 0) or 0 + if moon_lon and birth_jd: + bpd_result = bhrigu_pada_dasha_full_report( + moon_lon, birth_jd, + d9_7lord_sign=None # 将在 D9 数据可用时补充 + ) + report['modules']['bhrigu_pada_dasha'] = bpd_result + except Exception as e: + report['errors'].append(f"bhrigu-pada-dasha: {e}") + + try: + # Muntha (Tajika Varshaphala) — 需要 Varshaphala 盘数据 + # Varshaphala 盘需另外排盘(太阳返照时刻),full-reading 中暂不可用 + # 如需 Varshaphala 分析,请使用 cmd_prashna(独立命令支持 Varshaphala 排盘) + report['modules']['muntha'] = { + 'note': 'Muntha 需要 Varshaphala(太阳返照)盘数据。请使用 cmd_prashna 独立命令获取 Varshaphala 分析。', + 'varshaphala_available': False + } except Exception as e: report['errors'].append(f"muntha: {e}") @@ -3583,9 +3600,15 @@ def cmd_full_reading(args): report['errors'].append(f"trimshamsa-d30: {e}") try: - # Prashna integration (limited - only if prashna data is available) - # Prashna is mainly a standalone command; full integration in v6.0.17 - report['modules']['prashna'] = {'note': 'Prashna is available via cmd_prashna standalone command. Full integration pending v6.0.17.'} + # Prashna(问事占星)—— full-reading 中暂不接入 + # 原因:Prashna 需要问卜时刻(用户提问时间)排盘,full-reading 只有出生数据 + # 如需 Prashna 分析:使用 cmd_prashna 独立命令 + # 该命令接受问卜时间 + 地点,排 Prashna 盘并做分析 + report['modules']['prashna'] = { + 'note': 'Prashna 需要问卜时间排盘,请使用 cmd_prashna 独立命令。', + 'cmd': 'cmd_prashna', + 'available': True + } except Exception as e: report['errors'].append(f"prashna: {e}")