Files
Jyotisha/scripts/bhrigu_pada_dasha.py
T
732642856 8d0616c1b7 v6.0.17: bhrigu_pada_dasha 接入 + muntha/prashna placeholder 修正
- 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
2026-06-04 06:13:15 +08:00

216 lines
8.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Bhrigu Pada DashaBhrigu 足步 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 类似:每年推进一定度数
- 主要用于婚姻时机预测,也可用于其他人生重大事件
- 与 BCPBhrigu 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))