v6.2.0: 全面技法宝库升级 — 16个新模块 + 12个文件优化

## 新增模块 (16个)
### P0 精度修复
- ashtakavarga: calc_prastara_av() + calc_sodhita_av()
- kakshya.py: Kakshya评分系统 (8区间×3.75°)
- shadbala.py: Sputa Drishti + Yuddha Bala

### P1 核心升级
- bhava_bala.py: 宫位三元力量 (jyotishganit MIT)
- pancha_mahapurusha.py: PMC完整检测含4层失效条件
- sade_sati.py: Sade Sati+Kantaka Shani
- sudarshana_chakra.py: 三参考点盘+收敛分析
- tajika.py: Sahams 7→36 + Tajika Yogas 10种
- birth_time_rectifier.py: 生时矫正

### P2 覆盖扩展
- kp_system.py: KP Sublord+ABCD Significator (diliprk/VedicAstro MIT)
- synastry.py: 16因子合盘36分制 (dashaflow MIT)
- muhurtha_election.py: 6活动选举 (dashaflow MIT)
- career_analysis.py: 结构化事业引擎
- relationship_analysis.py: 结构化感情引擎
- conditional_dashas.py: Dwisaptati+Shattrimsa+Dwadashottari
- divisional_charts_extended: D81/D108/D144
- remedies.py: 5类补救系统

## 修改文件
jaimini/dasha_calculator/shadbala/SKILL.md/COVERAGE_AUDIT等12个

## 开源复用: 4个MIT项目
This commit is contained in:
732642856
2026-06-11 19:03:21 +08:00
parent c4c0eff67a
commit a4f8620a71
210 changed files with 49022 additions and 828 deletions
+248
View File
@@ -0,0 +1,248 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Remedies(补救措施)系统 v1.0
基于BPHSBrihat Parashara Hora Shastra)经典补救体系
五大类补救:
1. Ratna (宝石) — 行星弱点修饰
2. Mantra (咒语) — 声音振动疗愈
3. Dana (捐赠) — 因果净化
4. Vrata (斋戒) — 身体净化
5. Yantra (护符) — 几何能量图案
输入:行星力量分析结果(Shadbala/Dignity/Dasha
输出:针对性的补救建议
"""
from typing import Dict, List, Optional
PLANET_GEMS = {
'Sun': {'gem': '红宝石 (Ruby/Manikya)', 'metal': '金 (Gold)', 'finger': '无名指', 'day': '周日'},
'Moon': {'gem': '珍珠 (Pearl/Moti)', 'metal': '银 (Silver)', 'finger': '小指', 'day': '周一'},
'Mars': {'gem': '红珊瑚 (Red Coral/Moonga)', 'metal': '铜 (Copper)', 'finger': '无名指', 'day': '周二'},
'Mercury': {'gem': '祖母绿 (Emerald/Panna)', 'metal': '金 (Gold)', 'finger': '小指', 'day': '周三'},
'Jupiter': {'gem': '黄宝石 (Yellow Sapphire/Pukhraj)', 'metal': '金 (Gold)', 'finger': '食指', 'day': '周四'},
'Venus': {'gem': '钻石 (Diamond/Heera)', 'metal': '银/白金 (Silver/Platinum)', 'finger': '中指', 'day': '周五'},
'Saturn': {'gem': '蓝宝石 (Blue Sapphire/Neelam)', 'metal': '铁 (Iron)', 'finger': '中指', 'day': '周六'},
'Rahu': {'gem': '天河石 (Hessonite/Gomed)', 'metal': '混合金属 (Mixed)', 'finger': '中指', 'day': '周六'},
'Ketu': {'gem': '猫眼石 (Cat\'s Eye/Lahsuniya)', 'metal': '混合金属 (Mixed)', 'finger': '无名指', 'day': '周二'},
}
PLANET_MANTRAS = {
'Sun': 'Om Suryaya Namaha',
'Moon': 'Om Chandraya Namaha',
'Mars': 'Om Mangalaya Namaha',
'Mercury': 'Om Budhaya Namaha',
'Jupiter': 'Om Brihaspataye Namaha',
'Venus': 'Om Shukraya Namaha',
'Saturn': 'Om Shanaishcharaya Namaha',
'Rahu': 'Om Rahave Namaha',
'Ketu': 'Om Ketave Namaha',
}
PLANET_DONATIONS = {
'Sun': ['小麦(Wheat)', '红糖(Jaggery)', '红布', '铜器'],
'Moon': ['大米(Rice)', '牛奶', '银器', '白糖'],
'Mars': ['红扁豆(Masoor Dal)', '红布', '铜器', '珊瑚碎片'],
'Mercury': ['绿豆(Moong Dal)', '青色布', '文具', '书本'],
'Jupiter': ['鹰嘴豆(Chana Dal)', '黄布', '姜黄', '香蕉'],
'Venus': ['白米', '白布', '酥油(Ghee)', '银器'],
'Saturn': ['黑芝麻(Black Sesame)', '黑布', '铁器', '油灯'],
'Rahu': ['黑芥末(Black Mustard)', '蓝布', '铁器', '蓝宝石替代品'],
'Ketu': ['芝麻(Sesame)', '多色布', '灯笼', '猫眼石替代品'],
}
PLANET_FAST_DAYS = {
'Sun': '周日 (Sunday)', 'Moon': '周一 (Monday)',
'Mars': '周二 (Tuesday)', 'Mercury': '周三 (Wednesday)',
'Jupiter': '周四 (Thursday)', 'Venus': '周五 (Friday)',
'Saturn': '周六 (Saturday)', 'Rahu': '周六 (Saturday)',
'Ketu': '周二 (Tuesday)',
}
PLANET_COLORS = {
'Sun': '红/金/橙', 'Moon': '白/银/乳白', 'Mars': '红/珊瑚色',
'Mercury': '绿/浅绿', 'Jupiter': '黄/金色',
'Venus': '白/粉/彩虹', 'Saturn': '黑/深蓝/紫',
'Rahu': '深蓝/烟灰', 'Ketu': '斑点/多色',
}
STRENGTH_THRESHOLDS = {
'weak': 0.5, # Rupa < 0.5 → 极度需要补救
'moderate': 0.75, # 0.5-0.75 → 轻补救
}
def recommend_remedies(shadbala_results: Dict, planet_dignities: Dict = None,
active_dasha_lord: str = None, doshas: List[str] = None) -> Dict:
"""
基于行星力量分析推荐补救措施。
Args:
shadbala_results: Shadbala结果 {planet: {'total_rupas': float, 'strength_level': str, ...}}
planet_dignities: 行星尊严 {planet: dignity_level}
active_dasha_lord: 当前大运主星
doshas: 检测到的Dosha列表 ['Mangal Dosha', 'Kaal Sarp Dosha', ...]
Returns:
分类的补救建议
"""
doshas = doshas or []
recommendations = {
'gems': [],
'mantras': [],
'donations': [],
'fasting': [],
'lifestyle': [],
'dosha_remedies': [],
}
# 分析需要补救的行星
weak_planets = []
moderate_planets = []
for planet, data in shadbala_results.items():
rupas = data.get('total_rupas', 1.0)
if rupas < STRENGTH_THRESHOLDS['weak']:
weak_planets.append(planet)
elif rupas < STRENGTH_THRESHOLDS['moderate']:
moderate_planets.append(planet)
# 1. 宝石建议(仅对极弱行星)
for planet in weak_planets:
if planet in PLANET_GEMS:
g = PLANET_GEMS[planet]
recommendations['gems'].append({
'planet': planet,
'gem': g['gem'],
'metal': g['metal'],
'finger': g['finger'],
'day': g['day'],
'severity': 'high',
'note': f'{planet}极度虚弱,建议佩戴{g["gem"]}镶嵌于{g["metal"]},戴在{g["finger"]}上。首次佩戴应在{g["day"]}日出后。'
})
for planet in moderate_planets:
if planet in PLANET_GEMS:
g = PLANET_GEMS[planet]
recommendations['gems'].append({
'planet': planet,
'gem': g['gem'],
'metal': g['metal'],
'severity': 'medium',
'note': f'{planet}偏弱,可考虑佩戴{g["gem"]}作为辅助。'
})
# 2. 咒语建议
for planet in weak_planets + moderate_planets:
if planet in PLANET_MANTRAS:
recs = 108 if planet in weak_planets else 27
recommendations['mantras'].append({
'planet': planet,
'mantra': PLANET_MANTRAS[planet],
'repetitions': recs,
'note': f'每日念诵 {PLANET_MANTRAS[planet]} × {recs}',
})
# 3. 大运主星特别建议
if active_dasha_lord and active_dasha_lord in PLANET_MANTRAS:
recommendations['mantras'].append({
'planet': active_dasha_lord,
'mantra': PLANET_MANTRAS[active_dasha_lord],
'repetitions': 108,
'note': f'当前大运为{active_dasha_lord}期间,建议强化念诵 {PLANET_MANTRAS[active_dasha_lord]}',
'priority': 'dasha_lord',
})
# 4. 捐赠建议
for planet in weak_planets[:3]: # Top 3 weakest
if planet in PLANET_DONATIONS:
items = ', '.join(PLANET_DONATIONS[planet][:2])
recommendations['donations'].append({
'planet': planet,
'items': PLANET_DONATIONS[planet],
'note': f'捐赠{planet}相关物品:{items}等。在{PLANET_FAST_DAYS.get(planet, "适当日子")}捐赠效果最佳。',
})
# 5. 斋戒建议
for planet in weak_planets[:2]:
recommendations['fasting'].append({
'planet': planet,
'day': PLANET_FAST_DAYS.get(planet, ''),
'note': f'{PLANET_FAST_DAYS.get(planet)}进行{planet}斋戒,从日出到日落。',
})
# 6. Dosha专项补救
dosha_remedies_map = {
'Mangal Dosha': {
'actions': ['Kumbha Vivah (与无花果/香蕉树先"结婚"后再与人结婚)', 'Mangal Chandika Path', '周二火星斋戒'],
'gem': '红珊瑚 (Red Coral)',
},
'Kaal Sarp Dosha': {
'actions': ['Rahu-Ketu Shanti Puja', '那伽潘查米节祭拜蛇神', '参观12个Jyotirlinga'],
'gem': '天河石+猫眼石组合',
},
'Nadi Dosha': {
'actions': ['Nadi Shanti Puja', 'Mahamrityunjaya Mantra', '捐赠谷物'],
'gem': None,
},
'Pitra Dosha': {
'actions': ['Amavasya祖先祭拜', '捐赠黑芝麻和铁器', '供养婆罗门'],
'gem': None,
},
}
for dosha_name in doshas:
if dosha_name in dosha_remedies_map:
dr = dosha_remedies_map[dosha_name]
recommendations['dosha_remedies'].append({
'dosha': dosha_name,
'actions': dr['actions'],
'gem': dr.get('gem'),
'note': f'{dosha_name}检测到。建议进行: {"; ".join(dr["actions"][:2])}',
})
# 7. 生活建议
colors = []
for planet in weak_planets[:3]:
if planet in PLANET_COLORS:
colors.append(PLANET_COLORS[planet])
if colors:
recommendations['lifestyle'].append({
'type': '色彩疗愈',
'note': f'多使用{", ".join(colors)}色系的衣物和装饰物',
})
if 'Saturn' in weak_planets:
recommendations['lifestyle'].append({
'type': '土星平和',
'note': '周六拜访Shani寺庙,提供芥末油灯。避免穿黑色。',
})
# 建议摘要
total_recs = sum(len(v) for v in recommendations.values())
summary = f'{total_recs}条补救建议 — 重点关注: {", ".join(weak_planets[:3]) if weak_planets else "无极度虚弱行星"}'
return {
'method': 'BPHS补救系统 v1.0',
'weak_planets': weak_planets,
'moderate_planets': moderate_planets,
'recommendations': recommendations,
'summary': summary,
}
def quick_remedy(planet: str, severity: str = 'weak') -> Dict:
"""快速获取单行星补救建议"""
result = {}
if planet in PLANET_GEMS:
g = PLANET_GEMS[planet]
result['gem'] = f'{g["gem"]}{g["metal"]}{g["finger"]} ({g["day"]})'
if planet in PLANET_MANTRAS:
result['mantra'] = f'{PLANET_MANTRAS[planet]} × {"108" if severity == "weak" else "27"}'
if planet in PLANET_FAST_DAYS:
result['fast'] = f'{PLANET_FAST_DAYS[planet]} 斋戒'
if planet in PLANET_DONATIONS:
result['donate'] = ', '.join(PLANET_DONATIONS[planet][:2])
return result