a4f8620a71
## 新增模块 (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项目
181 lines
6.8 KiB
Python
181 lines
6.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Love & Relationship Analysis(感情分析)引擎 v1.0
|
|
超越 vedic-astro-skills 的 AI prompt,实现结构化引擎级分析
|
|
|
|
核心分析链:
|
|
7宫+Venus → Navamsa(D9) → Upapada(UL) → Darakaraka → Synastry
|
|
"""
|
|
|
|
from typing import Dict, List, Any
|
|
|
|
SIGNS = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo',
|
|
'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces']
|
|
|
|
VENUS_SIGN_EXPRESSIONS = {
|
|
'Aries': '热情主动,追求挑战型伴侣,偏好独立自主的关系',
|
|
'Taurus': '重视感官和稳定,寻求可靠持久的伴侣关系',
|
|
'Gemini': '注重沟通和智力匹配,偏好灵活多变的关系',
|
|
'Cancer': '情感细腻,重视家庭安全感,寻求呵护型关系',
|
|
'Leo': '浪漫大方,需要欣赏和赞美,偏好光芒四射的伴侣',
|
|
'Virgo': '谨慎务实,注重细节服务,偏好可靠稳重的伴侣',
|
|
'Libra': '和谐至上,重视平等尊重,偏好优雅得体的伴侣',
|
|
'Scorpio': '深刻激烈,追求灵魂共鸣,偏好深度连接的关系',
|
|
'Sagittarius': '自由奔放,注重精神成长,偏好开阔视野的伴侣',
|
|
'Capricorn': '务实理性,重视责任担当,偏好成熟稳重的伴侣',
|
|
'Aquarius': '独特自由,重视友谊基础,偏好不拘一格的伴侣',
|
|
'Pisces': '浪漫梦幻,追求灵魂伴侣,偏好温柔体贴的伴侣',
|
|
}
|
|
|
|
RELATIONSHIP_TIMING = {
|
|
1: '年少时感情萌芽(15-22岁)',
|
|
2: '通过家庭/社交圈认识(20-25岁)',
|
|
3: '通过朋友/同事介绍(22-28岁)',
|
|
4: '通过工作/事业认识(25-30岁)',
|
|
5: '通过浪漫邂逅(20-28岁)',
|
|
6: '通过挑战/竞争环境认识(25-32岁)',
|
|
7: '通过公开社交/相亲(24-30岁)',
|
|
8: '通过深层经历/转变认识(28-35岁)',
|
|
9: '通过高等教育/旅行认识(22-30岁)',
|
|
10: '通过事业成就期认识(28-35岁)',
|
|
11: '通过社交网络/大型活动认识(22-32岁)',
|
|
12: '通过隐秘/远程方式认识(25-35岁)',
|
|
}
|
|
|
|
|
|
def analyze_relationship(planets: Dict, asc_sign: str = 'Aries',
|
|
d9_positions: Dict = None, ul_sign: str = None,
|
|
darakaraka: str = None, dasha_info: Dict = None) -> Dict:
|
|
"""
|
|
完整感情分析引擎。
|
|
|
|
Args:
|
|
planets: D1行星位置
|
|
asc_sign: 上升星座
|
|
d9_positions: D9分盘位置(可选)
|
|
ul_sign: Upapada Lagna星座(可选)
|
|
darakaraka: DK配偶指示星(可选)
|
|
dasha_info: 大运信息(可选)
|
|
|
|
Returns:
|
|
结构化感情分析
|
|
"""
|
|
analysis = {
|
|
'partnership_style': [],
|
|
'attraction_pattern': [],
|
|
'timing': [],
|
|
'strength': [],
|
|
'challenges': [],
|
|
'assessment': '',
|
|
}
|
|
|
|
# 1. Venus分析(关系核心指示星)
|
|
venus = planets.get('Venus', {})
|
|
venus_sign = venus.get('sign', 'Libra')
|
|
venus_house = venus.get('house', 0)
|
|
|
|
analysis['partnership_style'].append({
|
|
'planet': 'Venus',
|
|
'sign': venus_sign,
|
|
'house': venus_house,
|
|
'expression': VENUS_SIGN_EXPRESSIONS.get(venus_sign, ''),
|
|
'note': f'Venus在{venus_house}宫 — 感情通过{RELATIONSHIP_TIMING.get(venus_house,"自然相遇")}',
|
|
})
|
|
|
|
# 2. 7宫分析
|
|
asc_idx = SIGNS.index(asc_sign) if asc_sign in SIGNS else 0
|
|
h7_sign = SIGNS[(asc_idx + 6) % 12]
|
|
h7_lord = {'Aries':'Mars','Taurus':'Venus','Gemini':'Mercury','Cancer':'Moon',
|
|
'Leo':'Sun','Virgo':'Mercury','Libra':'Venus','Scorpio':'Mars',
|
|
'Sagittarius':'Jupiter','Capricorn':'Saturn','Aquarius':'Saturn','Pisces':'Jupiter'}[h7_sign]
|
|
|
|
h7_data = planets.get(h7_lord, {})
|
|
h7_house = h7_data.get('house', 0)
|
|
|
|
analysis['strength'].append({
|
|
'indicator': '7宫主',
|
|
'lord': h7_lord,
|
|
'sign': h7_sign,
|
|
'house': h7_house,
|
|
'note': f'7宫主{h7_lord}在{h7_house}宫,关系质量与该宫主题紧密相关',
|
|
})
|
|
|
|
# 3. 7宫内行星
|
|
h7_planets = []
|
|
for pn, pd in planets.items():
|
|
if pd.get('house') == 7 and pn not in ('Rahu','Ketu'):
|
|
h7_planets.append(pn)
|
|
if h7_planets:
|
|
analysis['strength'].append({
|
|
'indicator': '7宫内行星',
|
|
'planets': h7_planets,
|
|
'note': f'7宫有{", ".join(h7_planets)},关系领域活跃,伴侣显著影响',
|
|
})
|
|
|
|
# 4. Darakaraka分析
|
|
if darakaraka:
|
|
dk_data = planets.get(darakaraka, {})
|
|
analysis['attraction_pattern'].append({
|
|
'type': 'DK配偶指示星',
|
|
'planet': darakaraka,
|
|
'note': f'DK={darakaraka},伴侣具有{darakaraka}特质 — {PLANET_PARTNER.get(darakaraka, "")}',
|
|
})
|
|
|
|
# 5. D9 Navamsa
|
|
if d9_positions:
|
|
d9_venus = d9_positions.get('Venus', {})
|
|
d9_h7 = d9_positions.get('7th_lord', {})
|
|
analysis['strength'].append({
|
|
'indicator': 'D9 Navamsa',
|
|
'venus_sign': d9_venus.get('sign', ''),
|
|
'note': f'D9 Venus在{d9_venus.get("sign","")} — 深层关系需求',
|
|
})
|
|
|
|
# 6. UL Upapada Lagna
|
|
if ul_sign:
|
|
analysis['attraction_pattern'].append({
|
|
'type': 'UL配偶镜像',
|
|
'sign': ul_sign,
|
|
'note': f'UL={ul_sign} — 社会视角下的伴侣形象和婚姻质量',
|
|
})
|
|
|
|
# 7. 时间窗口
|
|
if dasha_info:
|
|
md = dasha_info.get('maha_dasha', '')
|
|
relationship_planets = ['Venus', 'Jupiter', 'Moon']
|
|
if md in relationship_planets:
|
|
analysis['timing'].append({
|
|
'dasha': md,
|
|
'note': f'当前{md}大运期间,感情/关系相关领域活跃',
|
|
})
|
|
|
|
# 8. 综合评估
|
|
venus_strength = 0
|
|
if venus_house in (1, 4, 7, 10, 5, 9):
|
|
venus_strength += 2
|
|
if planets.get('Moon', {}).get('house') in (4, 7, 10):
|
|
venus_strength += 1
|
|
if h7_lord in planets and planets[h7_lord].get('dignity', '') in ('own','exalted','friendly'):
|
|
venus_strength += 2
|
|
|
|
if venus_strength >= 4:
|
|
analysis['assessment'] = '感情配置强,关系发展顺利,伴侣质量高'
|
|
elif venus_strength >= 2:
|
|
analysis['assessment'] = '感情基础良好,需注意关系中的沟通和理解'
|
|
else:
|
|
analysis['assessment'] = '感情需要更多耐心和策略,建议关注自我成长后再建立关系'
|
|
|
|
return analysis
|
|
|
|
|
|
PLANET_PARTNER = {
|
|
'Sun': '伴侣有领导力、自信、独立自主',
|
|
'Moon': '伴侣温柔体贴、情感丰富、关心家庭',
|
|
'Mars': '伴侣有行动力、勇敢直接、活力充沛',
|
|
'Mercury': '伴侣聪明机智、善于沟通、思维敏捷',
|
|
'Jupiter': '伴侣有智慧慷慨、教育背景好、有信仰',
|
|
'Venus': '伴侣有魅力、艺术气质、注重和谐',
|
|
'Saturn': '伴侣成熟稳重、有责任心、事业有成',
|
|
}
|