astrology-ziwei-api / six_relations_interpreter.py
th
feat: 升级夫妻宫断语库 + 格局库扩展至60个
b4bb3fc
Raw History Blame Contribute Delete
39.8 kB
"""
六亲解读器 - Six Relations Interpreter
基于86个六亲批断技巧的专业解读引擎
Version: 1.0
Created: 2026-02-03
Author: Sisi & TH Studio
核心功能:
- 父母运批断(日月+父母宫)
- 兄弟运批断(兄弟宫+眉毛面相)
- 夫妻运批断(福德宫是真正的夫妻宫!)
- 子女运批断(子女宫+头胎判断)
关键发现:
- 福德宫化忌 → 夫妻必死别(最重要!)
- 日月反背 → 六亲不靠
- 西北厨房 → 死夫宅
- 西南厨房 → 死妻宅
"""
from typing import Dict, List, Any, Optional
from enum import Enum
from barnum_cold_reader import BarnumColdReader, BarnumTone
# ── 14颗主星在夫妻宫断语(倪海夏体系)──────────────────────────
# 来源: ziwei-doushu 开源项目 heming-knowledge.ts + 倪海夏《天纪》
STAR_IN_FUQI_GU: Dict[str, Dict[str, str]] = {
'紫微': {
'summary': '配偶高傲能干,宜晚婚,感情以尊重为基础',
'good': '三方有辅弼相夹,配偶贤能有才,婚后得贵助;三合见禄主财禄双全',
'bad': '孤君无辅,配偶强势难沟通;辰戌宫夫妻情分淡薄;会破军:婚前有诸多阻碍',
'spouse_traits': '配偶气质高傲,有主见,自尊心强,能力强但不轻易表达情感',
'timing': '宜晚婚(男30以上,女27以上),早婚多挫折',
'ni_quote': '紫微在夫妻宫,孤克,宜晚婚,感情好但沟通成本高',
},
'天机': {
'summary': '婚姻多变,宜年龄差较大的配偶',
'good': '见禄存或化禄:感情尚可维持;会太阴:增添细腻温柔',
'bad': '化忌或会煞:感情变化大,易有分离;天机善变,配偶对感情举棋不定',
'spouse_traits': '配偶聪明多变,心思细腻,宗教哲学缘深,有点神经质',
'timing': '宜年龄差异较大(差6岁以上),可降低双方变化冲突',
'ni_quote': '天机善变,不宜独坐,婚姻充满变化',
},
'太阳': {
'summary': '男命助妻,女命旺夫;落陷化忌则反主刑克',
'good': '庙旺(卯至申宫):配偶能干,男命有贤内助;女命嫁旺夫,婚姻美满',
'bad': '落陷(酉至寅宫):男命配偶病弱,女命嫁庸夫;化忌:女命"上不见父,下不见子,中不见夫",那十年丈夫有重大灾难',
'spouse_traits': '配偶开朗大方,有公众形象意识,慷慨但有时过于强势',
'timing': '感情走势始热终冷,宜保持适当距离维持新鲜感',
'ni_quote': '太阳化忌,上不见父,下不见子,中不见夫——女命那十年丈夫必有重大灾祸',
},
'武曲': {
'summary': '寡宿之星,婚姻刑克,一律宜晚婚',
'good': '武曲化禄:配偶有财能力,男命反嫌妻太能干;见禄存夹辅:婚姻稳固有财',
'bad': '化忌:孤寡,难婚,或配偶身有残疾;武曲七杀(卯酉宫):婚姻恶劣之兆;遇四煞任一:主离婚',
'spouse_traits': '配偶刚烈独立,说话直接,不善表达情感,经济能力强但性格较孤克',
'timing': '武曲系一律建议30岁以后结婚,早婚早散',
'ni_quote': '武曲化忌,为刑囚之星,武曲系婚姻宜晚',
},
'天同': {
'summary': '配偶温和享乐,宜年龄差较大,晚婚为吉',
'good': '见禄存或化禄:配偶温和带财,家庭安稳;与太阴同:感情温柔甜蜜',
'bad': '化忌:感情刚开始尚可,逐渐转淡,因协调不良引起怨怼;遇煞多:懒散变成负担',
'spouse_traits': '配偶温和善良,乐观随和,但可能懒散,享乐主义较强',
'timing': '男娶比自己小、女嫁比自己大,年龄差8年以上为最佳结发',
},
'廉贞': {
'summary': '夫妻宫最不稳定的主星,生离死别风险高',
'good': '廉贞天府(子午):配偶温和清秀,感情尚可,配偶多为薪水族',
'bad': '廉贞贪狼:非生离即死别;廉贞破军:水中做坟墓;廉贞七杀:半路埋尸体;化忌:感情骚扰不断;与火星同宫:纵有吉曜也分居',
'spouse_traits': '配偶外形出众,善于交际,情绪价值高,但不稳定;可能离多聚少',
'timing': '男命宜配年少之妻(年轻6-12岁),女命宜配年长之夫',
'ni_quote': '廉贞贪狼/廉贞破军在夫妻宫,不管男命女命,非生离即死别;廉贞七杀——半路埋尸;廉贞破军——水中做冢;廉贞贪狼——横夭',
},
'天府': {
'summary': '善曜,主生离不死别,感情平稳但平淡',
'good': '见禄存或化禄:财禄双全,感情稳定;三方无煞:夫妻平静和谐',
'bad': '辅弼单星:易有第二次婚姻;遇四煞:感情漠然,生离概率增加',
'spouse_traits': '配偶温文尔雅,兴趣广泛,守财有原则,工作能力强,但偏保守',
'timing': '男命配偶年长,女命配偶年少;感情稳定但需主动经营',
},
'太阴': {
'summary': '喜清秀温柔配偶;落陷加煞则感情多变',
'good': '庙旺(子至午)见吉:配偶秀气有成就,男命妻美;女命:自身秀美有气质',
'bad': '落陷(未至亥):感情易变,配偶健康欠佳;化忌(男命尤忌):婆媳不和,妻子与母亲必起冲突;遇火铃:感情重大变故',
'spouse_traits': '配偶温柔秀气,细腻敏感,重感情,但有时情绪化',
'timing': '无特定约束,但落陷时宜晚婚',
'ni_quote': '男人的命,最怕太阴化忌,婆媳不和,太太跟妈妈一定不和的',
},
'贪狼': {
'summary': '桃花最旺,婚姻不稳,外遇风险高',
'good': '化禄:配偶才艺佳,风情万种,感情甜蜜(但外遇风险不减);遇化科:减少外遇',
'bad': '化忌:多二次婚姻;紫微贪狼(卯酉):配偶多外出,有外遇之兆;遇四煞:必生离',
'spouse_traits': '配偶才艺超群,社交能力强,异性缘极好,但欲望旺盛,难以约束',
'timing': '早婚感情多变,宜晚婚;婚前务必了解对方异性关系',
'ni_quote': '贪狼除了指桃花星,也指酒色财气赌,统统在贪狼里面',
},
'巨门': {
'summary': '口舌是非多,夫妻易争吵,需太阳化解',
'good': '太阳庙旺相会:反主婚姻和美,口才化为沟通利器;化禄:妻子贤能,财路因妻而开',
'bad': '化忌:配偶爱唠叨,是非不断;陀罗同度:夫妻自寻烦恼;独守无吉:感情压抑,深层矛盾多',
'spouse_traits': '配偶口才好,嫉妒心强,在乎面子,有时过于挑剔,但内心深情',
'timing': '无特定约束,但需做好长期沟通磨合的心理准备',
},
'天相': {
'summary': '"亲上加亲"良缘,夫唱妇随,合作型婚姻',
'good': '见辅弼双全:感情忠诚,婚姻稳固;配偶正直踏实;天相三合见禄:财禄可期',
'bad': '辅弼单星:可能预示再婚;遇煞多:感情中压抑委屈,不善表达',
'spouse_traits': '配偶正直踏实,守信用,不喜欢冲突,善于协调,是绝佳的生活伴侣',
'timing': '多为同学、同事、街坊等熟识关系发展,宜夫妻合作共事',
},
'天梁': {
'summary': '喜责任感强或年纪较长的配偶,婚前多波折',
'good': '见禄:配偶有福德,感情踏实;三合方有吉:感情经营稳重理智',
'bad': '化忌或见煞:爱唠叨,强势说服,感情疏离;天梁配天马:夫妻因环境分散;婚前易初恋失败',
'spouse_traits': '配偶责任感强,稳重老成,善讲道理,但偶有说教倾向',
'timing': '婚前多波折是常态,一旦结婚反而稳固;无煞婚后情缘更深',
},
'七杀': {
'summary': '"鸳衾半冷"——聚少离多,宜晚婚30岁后',
'good': '庙旺(寅申宫):配偶虽刚强但忠诚,一旦投入则全力付出;化禄相助:减轻孤克',
'bad': '遇煞:感情表面和谐内心不满,男命主二娶;女命宜偏房继室;卯酉宫(武曲七杀):婚姻运最差',
'spouse_traits': '配偶刚强孤僻,一见钟情快,离开也快,恋爱冷热均快',
'timing': '一律宜晚婚,30岁后婚姻较稳固;早婚多刑克',
'ni_quote': '七杀居夫妇而鸳衾半冷;如果你娶个太太是七杀入命,那你就差不多毁了一半了,很累啊',
},
'破军': {
'summary': '婚姻破耗之星,追求无约束感情',
'good': '化禄:破而后立,感情历经波折反而能走到最后;英星入庙:配偶英挺有个性',
'bad': '化忌:破坏殆尽,多一婚或不婚;紫微破军(丑未):不加煞亦克,加煞必离;与廉贞:水中做坟墓;中年后有分床分居之象',
'spouse_traits': '配偶追求自由,不喜约束,勇于突破,但婚姻观念薄弱,一生变动大',
'timing': '婚前易一见钟情或草率结婚,宜拉长相处时间再做决定',
'ni_quote': '廉贞破军在夫妻宫,水中做坟墓;破军是婚姻破坏力最强的星',
},
}
# ── 四化在夫妻宫断语 ──────────────────────────────────────────
SIHUA_IN_FUQI_GU: Dict[str, str] = {
'化禄': '与配偶有先天缘分,配偶个性乐观,婚后感情更好,配偶越来越会赚钱,缘分深厚',
'化权': '婚姻多为主动争取而来,配偶掌握决策权,需学会放手;争取型婚姻,越强求越难得',
'化科': '能与配偶和谐相处,有贵人缘,利于恋爱结婚;科在夫妻主配偶有名声或专业技能',
'化忌': '欠下婚姻债务,早婚早离,建议晚婚或不婚;配偶对本人有怨言;化忌冲夫妻宫尤凶——生离死别之兆',
}
class RelationType(Enum):
"""六亲类型"""
PARENTS = "父母"
SIBLINGS = "兄弟"
SPOUSE = "夫妻"
CHILDREN = "子女"
class SeverityLevel(Enum):
"""严重程度"""
VERY_AUSPICIOUS = "大吉"
AUSPICIOUS = "吉"
NEUTRAL = "平"
CAUTION = "需注意"
SERIOUS = "需特别关注"
class SixRelationsInterpreter:
"""
六亲解读器
整合福德宫秘诀和86个批断技巧
"""
def __init__(self):
"""初始化六亲解读器"""
self.barnum_reader = BarnumColdReader()
# 代表儿子的星曜数量表
self.son_star_count = {
'紫微': 1, '天相': 1, '贪狼': 1, '太阳': 1,
'天府': 1, '武曲': 1, '天同': 1, '文昌': 1,
'破军': 2, '廉贞': 2, '七杀': 2
}
# 阳星(代表男性)
self.yang_stars = ['紫微', '太阳', '武曲', '七杀', '破军', '贪狼', '天梁', '天府']
# 阴星(代表女性)
self.yin_stars = ['太阴', '天机', '天同', '天相', '巨门', '廉贞']
# 凶星
self.sha_stars = ['擎羊', '陀罗', '火星', '铃星', '地空', '地劫', '天刑']
# 吉星
self.ji_stars = ['左辅', '右弼', '文昌', '文曲', '天魁', '天钺', '禄存', '天马']
# 桃花星
self.romance_stars = ['红鸾', '天喜', '天姚', '咸池', '贪狼', '廉贞']
def analyze_all_relations(
self,
palaces: List[Dict],
sihua_analysis: Dict,
gender: str = '男'
) -> Dict[str, Any]:
"""
分析所有六亲关系
Args:
palaces: 宫位数据
sihua_analysis: 四化分析结果
gender: 性别
Returns:
dict: 六亲分析结果
"""
# 提取关键宫位
palace_map = {p.get('name'): p for p in palaces}
parents_palace = palace_map.get('父母宫', {})
siblings_palace = palace_map.get('兄弟宫', {})
spouse_palace = palace_map.get('夫妻宫', {})
children_palace = palace_map.get('子女宫', {})
fude_palace = palace_map.get('福德宫', {}) # 福德宫是夫妻宫的秘诀!
ming_palace = palace_map.get('命宫', {})
# 提取年干四化
year_sihua = sihua_analysis.get('year_sihua', {})
# 分析各六亲
return {
'parents': self._analyze_parents(
parents_palace, palace_map, year_sihua, gender
),
'siblings': self._analyze_siblings(
siblings_palace, year_sihua
),
'spouse': self._analyze_spouse(
spouse_palace, fude_palace, year_sihua, gender
),
'children': self._analyze_children(
children_palace, year_sihua, gender
),
'summary': self._generate_relations_summary(
palaces, sihua_analysis, gender
),
'critical_warnings': self._check_critical_warnings(
palace_map, year_sihua, gender
)
}
def _analyze_parents(
self,
parents_palace: Dict,
palace_map: Dict,
year_sihua: Dict,
gender: str
) -> Dict[str, Any]:
"""
分析父母运
核心规则:
- 太阳代表父亲
- 太阴代表母亲
- 日月反背主六亲不靠
"""
result = {
'palace_name': '父母宫',
'father': {'status': 'normal', 'analysis': []},
'mother': {'status': 'normal', 'analysis': []},
'overall': {'level': SeverityLevel.NEUTRAL.value, 'text': ''},
'interpretation': ''
}
major_stars = self._extract_stars(parents_palace, 'major_stars')
minor_stars = self._extract_stars(parents_palace, 'minor_stars')
# 检查化忌
huaji_palace = year_sihua.get('化忌', {}).get('palace')
has_huaji = huaji_palace == '父母宫'
# 分析太阳(父亲)
sun_analysis = self._analyze_sun_for_father(palace_map, year_sihua)
result['father'] = sun_analysis
# 分析太阴(母亲)
moon_analysis = self._analyze_moon_for_mother(palace_map, year_sihua)
result['mother'] = moon_analysis
# 检查日月反背
is_sun_fallen = self._is_star_fallen('太阳', palace_map)
is_moon_fallen = self._is_star_fallen('太阴', palace_map)
if is_sun_fallen and is_moon_fallen:
result['overall']['level'] = SeverityLevel.SERIOUS.value
result['overall']['text'] = '日月反背'
result['interpretation'] = self.barnum_reader._process_sensitive_content(
"命盘呈现日月反背格局,这意味着您可能从小就比较独立,"
"与父母的相处模式不同于常人。这种配置往往培养出自立自强的性格。"
"建议平时多与父母沟通,主动表达关心。"
)
elif has_huaji:
result['overall']['level'] = SeverityLevel.CAUTION.value
result['overall']['text'] = '化忌入父母宫'
result['interpretation'] = (
"父母宫有化忌,暗示与父母的关系需要多用心经营。"
"这可能表现为聚少离多,或者沟通上的一些障碍。"
"建议主动创造与父母相处的机会,珍惜在一起的时光。"
)
else:
# 检查吉星
has_ji_stars = any(s in self.ji_stars for s in minor_stars)
if has_ji_stars or '紫微' in major_stars or '天府' in major_stars:
result['overall']['level'] = SeverityLevel.AUSPICIOUS.value
result['overall']['text'] = '父母缘佳'
result['interpretation'] = (
"您的父母宫配置良好,与父母的缘分深厚。"
"父母可能在您的成长过程中给予了很多支持和帮助。"
"这份福气是您人生的重要基础。"
)
else:
result['overall']['level'] = SeverityLevel.NEUTRAL.value
result['overall']['text'] = '父母运平稳'
result['interpretation'] = (
"您与父母的关系属于平稳类型,既没有特别的冲突,"
"也可能少了些亲密的交流。建议在日常生活中多表达关心。"
)
return result
def _analyze_siblings(
self,
siblings_palace: Dict,
year_sihua: Dict
) -> Dict[str, Any]:
"""
分析兄弟运
核心规则:
- 眉毛代表兄弟姐妹
- 左眉主兄弟,右眉主姐妹
- 化忌入兄弟宫主不和或合伙破财
"""
result = {
'palace_name': '兄弟宫',
'quantity': {'estimate': '正常', 'analysis': ''},
'relationship': {'level': SeverityLevel.NEUTRAL.value, 'analysis': ''},
'partnership': {'advice': '', 'suitable': True},
'interpretation': ''
}
major_stars = self._extract_stars(siblings_palace, 'major_stars')
minor_stars = self._extract_stars(siblings_palace, 'minor_stars')
# 检查化忌
huaji_palace = year_sihua.get('化忌', {}).get('palace')
has_huaji = huaji_palace == '兄弟宫'
# 数量判断
quantity_analysis = []
if '紫微' in major_stars:
quantity_analysis.append('紫微坐守,主兄弟3人以上')
result['quantity']['estimate'] = '3人以上'
elif '天机' in major_stars:
quantity_analysis.append('天机坐守,兄弟姐妹较少')
result['quantity']['estimate'] = '1-2人'
elif '太阳' in major_stars:
quantity_analysis.append('太阳入兄弟宫,主兄弟众多')
result['quantity']['estimate'] = '3人以上'
result['quantity']['analysis'] = ';'.join(quantity_analysis) if quantity_analysis else '正常数量'
# 关系判断
if has_huaji:
result['relationship']['level'] = SeverityLevel.CAUTION.value
result['relationship']['analysis'] = (
"兄弟宫有化忌,暗示与兄弟姐妹之间可能存在一些摩擦或误解。"
"不必过于担心,这种配置也可能是聚少离多的表现。"
"建议在合伙做生意方面谨慎,感情上多包容理解。"
)
result['partnership']['suitable'] = False
result['partnership']['advice'] = '与兄弟姐妹或朋友合伙需谨慎,建议单干或找非亲友合伙'
elif any(s in self.sha_stars for s in minor_stars):
result['relationship']['level'] = SeverityLevel.CAUTION.value
result['relationship']['analysis'] = (
"兄弟宫有煞星,暗示手足之间可能有一些竞争或冲突。"
"这种配置往往在成年后反而会改善,因为各自有了自己的空间。"
)
elif '紫微' in major_stars or '天府' in major_stars:
result['relationship']['level'] = SeverityLevel.AUSPICIOUS.value
result['relationship']['analysis'] = (
"兄弟宫有贵星,主兄弟姐妹有成就,能够相互帮助。"
"这是一份难得的助力,建议维护好手足情谊。"
)
# 综合解读
if has_huaji:
result['interpretation'] = (
"您的兄弟宫配置提示与手足的关系需要多用心。"
"无论是感情上的小摩擦还是事业上的分歧,"
"都可以通过良好的沟通来化解。"
"如果考虑合伙做事,建议选择专业领域的伙伴而非亲友。"
)
else:
result['interpretation'] = (
"您与兄弟姐妹的关系总体良好。"
"在人生的关键时刻,手足之情往往是重要的支持力量。"
"建议平时多联络感情,维护这份珍贵的缘分。"
)
return result
def _analyze_spouse(
self,
spouse_palace: Dict,
fude_palace: Dict,
year_sihua: Dict,
gender: str
) -> Dict[str, Any]:
"""
分析夫妻运
核心秘诀:
- 福德宫化忌 → 夫妻必死别(最重要!)
- 夫妻宫好福德宫差 → 夫妻不能长久
- 女命福德宫最重要,也代表夫妻宫
"""
result = {
'palace_name': '夫妻宫',
'spouse_traits': [], # 配偶特征
'marriage_quality': {'level': SeverityLevel.NEUTRAL.value, 'analysis': ''},
'timing': {'advice': ''},
'critical_warning': None, # 重大警告(福德宫秘诀)
'interpretation': ''
}
spouse_stars = self._extract_stars(spouse_palace, 'major_stars')
spouse_minor = self._extract_stars(spouse_palace, 'minor_stars')
fude_stars = self._extract_stars(fude_palace, 'major_stars')
# 检查化忌位置
huaji_palace = year_sihua.get('化忌', {}).get('palace')
fude_has_huaji = huaji_palace == '福德宫'
spouse_has_huaji = huaji_palace == '夫妻宫'
# 🔥 核心秘诀:福德宫化忌 → 夫妻死别
if fude_has_huaji:
result['critical_warning'] = {
'type': 'fude_huaji',
'level': SeverityLevel.SERIOUS.value,
'original': '福德宫化忌主夫妻死别',
'processed': (
"福德宫的配置提示婚姻方面需要特别用心经营。"
"这个配置的传统解读较为严重,但现代社会有很多化解方法。"
"建议:1)配偶健康要格外关注;2)婚前深入了解对方;"
"3)婚后多沟通、多包容;4)共同培养精神层面的连接。"
"记住,命理是提醒,不是定数。用心经营,一切皆有可能。"
)
}
result['marriage_quality']['level'] = SeverityLevel.SERIOUS.value
result['marriage_quality']['analysis'] = result['critical_warning']['processed']
# 检查廉贞破军组合(大凶)
elif '廉贞' in fude_stars and '破军' in fude_stars:
result['critical_warning'] = {
'type': 'lian_po_fude',
'level': SeverityLevel.SERIOUS.value,
'original': '廉贞破军在福德宫主夫妻死别',
'processed': (
"福德宫的星曜配置提示婚姻需要非常用心。"
"建议选择性格互补、三观一致的伴侣,"
"婚后共同面对挑战,而不是互相指责。"
"同时关注配偶的健康和安全。"
)
}
result['marriage_quality']['level'] = SeverityLevel.SERIOUS.value
# 检查夫妻宫配置(使用完整断语库)
else:
# 配偶特征
result['spouse_traits'] = self._analyze_spouse_traits(
spouse_stars, spouse_minor, gender
)
# 找到主星详细断语
main_star_data = None
for star in spouse_stars:
if star in STAR_IN_FUQI_GU:
main_star_data = STAR_IN_FUQI_GU[star]
result['main_star'] = star
break
# 四化在夫妻宫的断语
sihua_in_spouse = year_sihua.get('化忌', {})
huahu_star = year_sihua.get('化禄', {}).get('palace')
huaquan_star = year_sihua.get('化权', {}).get('palace')
huake_star = year_sihua.get('化科', {}).get('palace')
sihua_text = None
if spouse_has_huaji:
sihua_text = SIHUA_IN_FUQI_GU['化忌']
elif huahu_star == '夫妻宫':
sihua_text = SIHUA_IN_FUQI_GU['化禄']
elif huaquan_star == '夫妻宫':
sihua_text = SIHUA_IN_FUQI_GU['化权']
elif huake_star == '夫妻宫':
sihua_text = SIHUA_IN_FUQI_GU['化科']
# 婚姻质量判断
caution_stars = ['廉贞', '破军', '七杀', '武曲', '巨门']
good_stars = ['天同', '天府', '天相', '太阴', '天梁']
if main_star_data:
if any(s in caution_stars for s in spouse_stars) or spouse_has_huaji:
result['marriage_quality']['level'] = SeverityLevel.CAUTION.value
elif any(s in good_stars for s in spouse_stars):
result['marriage_quality']['level'] = SeverityLevel.AUSPICIOUS.value
else:
result['marriage_quality']['level'] = SeverityLevel.NEUTRAL.value
# 用主星断语构建分析
analysis_parts = [main_star_data['summary']]
if spouse_has_huaji:
analysis_parts.append(f"夫妻宫化忌:{main_star_data['bad']}")
else:
analysis_parts.append(f"吉象:{main_star_data['good']}")
analysis_parts.append(f"注意:{main_star_data['bad']}")
result['marriage_quality']['analysis'] = ';'.join(analysis_parts)
# 婚期建议(来自主星)
result['timing']['advice'] = main_star_data['timing']
# 倪海厦原话(如有)
if main_star_data.get('ni_quote'):
result['ni_quote'] = main_star_data['ni_quote']
# 四化补充
if sihua_text:
result['sihua_analysis'] = sihua_text
# 婚期建议(如果主星没有提供,给通用建议)
if not result['timing']['advice']:
result['timing']['advice'] = (
"建议选择红鸾、天喜相会的年份考虑婚姻大事。"
"如果流年有化忌,建议过忌成婚(化忌年份之后结婚)更为稳妥。"
)
# 综合解读
if result['critical_warning']:
result['interpretation'] = result['critical_warning']['processed']
elif result['marriage_quality']['level'] == SeverityLevel.AUSPICIOUS.value:
main_text = result['marriage_quality'].get('analysis', '')
result['interpretation'] = (
f"{main_text}\n\n"
"您的婚姻配置整体良好,在对的时间遇到对的人,"
"是命理和努力共同作用的结果。珍惜缘分,用心经营。"
)
elif result['marriage_quality']['level'] == SeverityLevel.CAUTION.value:
main_text = result['marriage_quality'].get('analysis', '')
result['interpretation'] = (
f"{main_text}\n\n"
"婚姻需要比一般人更用心经营。"
"感情路上的波折,是让您更清楚自己真正需要什么样的伴侣。"
"宜晚婚,婚前多了解对方,婚后多沟通包容。"
)
else:
result['interpretation'] = (
"您的婚姻运势属于平稳类型,需要用心去经营。"
"不必着急,对的人值得等待。婚后的幸福,取决于双方的共同努力。"
)
return result
def _analyze_children(
self,
children_palace: Dict,
year_sihua: Dict,
gender: str
) -> Dict[str, Any]:
"""
分析子女运
核心规则:
- 阳星代表儿子,阴星代表女儿
- 化忌入子女宫主无子
- 面相:左眼袋代表儿子,右眼袋代表女儿
"""
result = {
'palace_name': '子女宫',
'quantity': {'estimate': '', 'sons': 0, 'daughters': 0},
'first_child': {'gender': '', 'analysis': ''},
'quality': {'level': SeverityLevel.NEUTRAL.value, 'analysis': ''},
'timing': {'advice': ''},
'interpretation': ''
}
major_stars = self._extract_stars(children_palace, 'major_stars')
minor_stars = self._extract_stars(children_palace, 'minor_stars')
# 检查化忌
huaji_palace = year_sihua.get('化忌', {}).get('palace')
has_huaji = huaji_palace == '子女宫'
# 数量估算
sons = 0
for star in major_stars:
if star in self.son_star_count:
sons += self.son_star_count[star]
result['quantity']['sons'] = sons
result['quantity']['estimate'] = f"命理上预示可能有{sons}个孩子" if sons > 0 else "子女数量需综合判断"
# 头胎性别判断
if any(s in self.yang_stars for s in major_stars):
result['first_child']['gender'] = '男孩倾向'
result['first_child']['analysis'] = '子女宫阳星坐守,头胎可能为男孩'
elif any(s in self.yin_stars for s in major_stars):
result['first_child']['gender'] = '女孩倾向'
result['first_child']['analysis'] = '子女宫阴星坐守,头胎可能为女孩'
else:
result['first_child']['gender'] = '均可'
result['first_child']['analysis'] = '头胎性别需综合其他因素判断'
# 子女品质
if has_huaji:
result['quality']['level'] = SeverityLevel.CAUTION.value
result['quality']['analysis'] = (
"子女宫有化忌,暗示在子女方面可能需要多费心。"
"这可能表现为受孕困难、子女体质需要照顾,或者亲子关系需要经营。"
"建议提前做好准备,不必过于担忧。现代医学和教育方法都很发达。"
)
elif '紫微' in major_stars or '天府' in major_stars:
result['quality']['level'] = SeverityLevel.VERY_AUSPICIOUS.value
result['quality']['analysis'] = (
"子女宫有贵星,主子女聪明有出息。"
"虽然教养过程中可能会有挑战,但最终会成材。"
)
elif any(s in self.ji_stars for s in minor_stars):
result['quality']['level'] = SeverityLevel.AUSPICIOUS.value
result['quality']['analysis'] = (
"子女宫有吉星辅助,主子女乖巧懂事。"
"亲子关系融洽,教育过程顺利。"
)
# 受孕时机建议
result['timing']['advice'] = (
"传统命理建议选择命盘最好的宫位前一年年中受孕。"
"但现代社会更重要的是双方身体健康、经济稳定、感情和睦。"
"顺其自然,宝宝会在对的时间来到。"
)
# 综合解读
if has_huaji:
result['interpretation'] = (
"您的子女运势需要多一些关注和努力。"
"但请记住,命理只是参考,不是定数。"
"现代医学发达,良好的备孕和教育都能帮助您实现为人父母的愿望。"
"有时候,来之不易的孩子反而更加珍贵。"
)
else:
result['interpretation'] = (
"您的子女运势良好,与孩子的缘分不错。"
"作为父母,最重要的是给予孩子足够的爱和正确的引导。"
"命理上的好配置,加上您的用心养育,孩子一定会健康成长。"
)
return result
def _analyze_sun_for_father(
self,
palace_map: Dict,
year_sihua: Dict
) -> Dict[str, Any]:
"""分析太阳星判断父亲运"""
result = {
'status': 'normal',
'analysis': []
}
# 查找太阳位置
sun_palace = None
sun_brightness = None
for palace_name, palace in palace_map.items():
major_stars = self._extract_stars(palace, 'major_stars')
if '太阳' in major_stars:
sun_palace = palace_name
# 简化亮度判断
sun_brightness = '旺' if palace_name in ['卯', '辰', '巳', '午'] else '陷'
break
# 检查太阳是否化忌
huaji_star = year_sihua.get('化忌', {}).get('star')
sun_huaji = huaji_star == '太阳'
if sun_huaji:
result['status'] = 'caution'
result['analysis'].append('太阳化忌,父亲方面需要多关注')
elif sun_brightness == '陷':
result['status'] = 'caution'
result['analysis'].append('太阳落陷,与父亲关系可能较疏远')
else:
result['status'] = 'good'
result['analysis'].append('太阳状态良好,父亲运势平稳')
return result
def _analyze_moon_for_mother(
self,
palace_map: Dict,
year_sihua: Dict
) -> Dict[str, Any]:
"""分析太阴星判断母亲运"""
result = {
'status': 'normal',
'analysis': []
}
# 查找太阴位置
moon_palace = None
moon_brightness = None
for palace_name, palace in palace_map.items():
major_stars = self._extract_stars(palace, 'major_stars')
if '太阴' in major_stars:
moon_palace = palace_name
# 简化亮度判断
moon_brightness = '旺' if palace_name in ['酉', '戌', '亥', '子'] else '陷'
break
# 检查太阴是否化忌
huaji_star = year_sihua.get('化忌', {}).get('star')
moon_huaji = huaji_star == '太阴'
if moon_huaji:
result['status'] = 'caution'
result['analysis'].append('太阴化忌,母亲方面需要多关注')
elif moon_brightness == '陷':
result['status'] = 'caution'
result['analysis'].append('太阴落陷,与母亲关系可能需要多经营')
else:
result['status'] = 'good'
result['analysis'].append('太阴状态良好,母亲运势平稳')
return result
def _analyze_spouse_traits(
self,
spouse_stars: List[str],
spouse_minor: List[str],
gender: str
) -> List[str]:
"""分析配偶特征(使用14颗主星完整断语库)"""
traits = []
for star in spouse_stars:
if star in STAR_IN_FUQI_GU:
traits.append(STAR_IN_FUQI_GU[star]['spouse_traits'])
# 辅星修饰
if any(s in ['文昌', '文曲'] for s in spouse_minor):
traits.append('配偶有才华,可能从事文化艺术相关工作')
if any(s in ['天魁', '天钺'] for s in spouse_minor):
traits.append('配偶有贵人运,社会地位不错')
if any(s in ['左辅', '右弼'] for s in spouse_minor):
traits.append('配偶乐于助人,人缘极好,是可靠的伴侣')
return traits if traits else ['配偶条件中等,需综合其他因素判断']
def _is_star_fallen(self, star_name: str, palace_map: Dict) -> bool:
"""简化判断星曜是否落陷"""
# 简化逻辑:检查star是否存在且在不利位置
# 实际应该根据星曜亮度表判断
for palace_name, palace in palace_map.items():
major_stars = self._extract_stars(palace, 'major_stars')
if star_name in major_stars:
# 太阳在酉、戌、亥、子落陷
if star_name == '太阳' and palace_name in ['酉', '戌', '亥', '子']:
return True
# 太阴在卯、辰、巳、午落陷
if star_name == '太阴' and palace_name in ['卯', '辰', '巳', '午']:
return True
return False
def _extract_stars(self, palace: Dict, star_type: str) -> List[str]:
"""从宫位数据中提取星曜名称"""
stars = palace.get(star_type, [])
if not stars:
return []
# 处理星曜可能是dict或str的情况
result = []
for star in stars:
if isinstance(star, dict):
result.append(star.get('name', ''))
else:
result.append(str(star))
return result
def _generate_relations_summary(
self,
palaces: List[Dict],
sihua_analysis: Dict,
gender: str
) -> Dict[str, Any]:
"""生成六亲总结"""
return {
'overall_fortune': '六亲运势综合分析已完成',
'key_points': [
'父母运需关注日月星位置和亮度',
'兄弟运需配合面相眉毛判断',
'夫妻运关键看福德宫(比夫妻宫更重要!)',
'子女运看阳星阴星判断性别'
],
'methodology': '基于86个六亲批断技巧的专业分析',
'disclaimer': (
"六亲分析仅供参考,实际关系受个人努力影响很大。"
"命理是了解自己和家人的工具,不是定数。"
"用心经营每一份关系,才是最重要的。"
)
}
def _check_critical_warnings(
self,
palace_map: Dict,
year_sihua: Dict,
gender: str
) -> List[Dict]:
"""检查重大警告"""
warnings = []
huaji_palace = year_sihua.get('化忌', {}).get('palace')
# 福德宫化忌 → 夫妻死别
if huaji_palace == '福德宫':
warnings.append({
'type': 'fude_huaji',
'severity': 'high',
'message': '福德宫化忌,婚姻方面需要特别用心经营',
'advice': '建议关注配偶健康,多沟通理解,共同面对挑战'
})
# 日月反背
is_sun_fallen = self._is_star_fallen('太阳', palace_map)
is_moon_fallen = self._is_star_fallen('太阴', palace_map)
if is_sun_fallen and is_moon_fallen:
warnings.append({
'type': 'sun_moon_reverse',
'severity': 'medium',
'message': '日月反背格局,六亲关系需要主动经营',
'advice': '独立自主是优势,但也要主动维护家庭关系'
})
return warnings
# 单例模式
_six_relations_instance = None
def get_six_relations_interpreter() -> SixRelationsInterpreter:
"""获取六亲解读器单例"""
global _six_relations_instance
if _six_relations_instance is None:
_six_relations_instance = SixRelationsInterpreter()
return _six_relations_instance
# 导出
__all__ = ['SixRelationsInterpreter', 'RelationType', 'SeverityLevel', 'get_six_relations_interpreter']