Spaces:
Running
Running
File size: 8,404 Bytes
e4efb8a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | class HuangJiPlanner:
"""
皇极经世时辰规划模块
基于邵雍《皇极经世》元会运世体系,计算年、月、日、时卦象,并整合决策策略
"""
# 皇极经世 60 卦序列 (剔除乾坤坎离四正卦)
SEQUENCE = [
"复", "颐", "屯", "益", "震", "噬嗑", "随", "无妄", "明夷", "贲",
"既济", "家人", "丰", "革", "同人", "临", "损", "节", "中孚", "归妹",
"睽", "兑", "履", "泰", "大畜", "需", "小畜", "大壮", "大有", "夬",
"姤", "大过", "鼎", "恒", "巽", "井", "蛊", "升", "讼", "困",
"未济", "解", "涣", "蒙", "师", "遁", "咸", "旅", "小过", "渐",
"蹇", "艮", "谦", "否", "萃", "晋", "豫", "观", "比", "剥"
]
# 卦象属性映射:(类型, 建议方向, 吉凶程度)
# 类型: 1:进取, 2:守成, 3:变动, 4:阻碍
HEX_PROPS = {
"复": (1, "万物复苏,宜制定新计划", "吉"),
"颐": (2, "关注养生与口实,宜守静", "中"),
"屯": (4, "创业维艰,宜寻求导师指引", "凶"),
"益": (1, "利涉大川,宜积极开拓", "大吉"),
"震": (3, "声震百里,宜迅速行动,防惊恐", "中"),
"噬嗑": (1, "排除障碍,宜强力执行", "中"),
"随": (3, "顺应自然,宜跟随智者", "吉"),
"无妄": (2, "不期而获,宜守正不阿", "吉"),
"明夷": (4, "黑暗降临,宜韬光养晦", "凶"),
"贲": (2, "装饰文饰,宜小事,不宜大作", "吉"),
"既济": (2, "功成名就,宜守成防衰", "吉"),
"家人": (2, "齐家有道,宜处理内部事务", "吉"),
"丰": (1, "盛大之时,宜果断决策", "大吉"),
"革": (3, "改革创新,宜去旧布新", "吉"),
"同人": (1, "志同道合,宜社交与合伙", "吉"),
"临": (1, "上亲下顺,宜视察与统筹", "吉"),
"损": (2, "减损求益,宜诚信节俭", "中"),
"节": (2, "适当节制,宜量力而行", "中"),
"中孚": (2, "诚信感应,宜签约与谈判", "吉"),
"归妹": (4, "不得其位,宜谨慎防错", "凶"),
"睽": (4, "背离异见,宜求大同存小异", "凶"),
"兑": (3, "喜悦交流,宜公关与表达", "吉"),
"履": (2, "步履维艰,宜如履薄冰", "中"),
"泰": (1, "阴阳交泰,万事亨通", "大吉"),
"大畜": (2, "积蓄德行,宜学习研究", "吉"),
"需": (2, "需待时机,宜饮食宴乐", "吉"),
"小畜": (2, "力量尚微,宜积蓄实力", "中"),
"大壮": (1, "声势壮大,宜积极进取", "吉"),
"大有": (1, "阳光普照,宜收获与扩张", "大吉"),
"夬": (1, "决断刚行,宜清除隐患", "中"),
"姤": (3, "不期而遇,防小人暗长", "中"),
"大过": (4, "负担过重,宜寻求出路", "凶"),
"鼎": (1, "革故鼎新,宜稳重创业", "吉"),
"恒": (2, "持之以恒,宜保持现状", "吉"),
"巽": (3, "柔顺随风,宜小步快走", "吉"),
"井": (2, "安分守己,宜共享资源", "中"),
"蛊": (4, "整顿内部,宜大刀阔斧", "凶"),
"升": (1, "顺势攀升,宜步步高升", "大吉"),
"讼": (4, "口舌争讼,宜讲和避争", "凶"),
"困": (4, "处境艰难,宜坚定信念", "凶"),
"未济": (3, "事业未成,宜重新出发", "中"),
"解": (3, "解危脱困,宜宽赦与行动", "吉"),
"涣": (3, "涣散疏通,宜化解矛盾", "中"),
"蒙": (2, "启蒙教育,宜寻师访友", "吉"),
"师": (1, "兴师动众,宜严格管理", "中"),
"遁": (2, "退避守静,宜隐退避害", "中"),
"咸": (1, "相互感应,宜情感交流", "吉"),
"旅": (3, "羁旅在外,宜守正防失", "中"),
"小过": (2, "过犹不及,宜小事不宜大", "中"),
"漸": (1, "循序渐进,宜长线投资", "吉"),
"蹇": (4, "前有高山,宜回身避难", "凶"),
"艮": (2, "静止止步,宜安分守己", "中"),
"谦": (2, "谦谦君子,万事大吉", "大吉"),
"否": (4, "天地不通,宜退守不出", "大凶"),
"萃": (1, "精英荟萃,宜团队建设", "吉"),
"晋": (1, "加官进爵,宜展示才华", "大吉"),
"豫": (1, "悦豫顺动,宜旅游庆贺", "吉"),
"观": (2, "观摩考察,宜深思熟虑", "中"),
"比": (2, "亲近依附,宜寻找靠山", "吉"),
"剥": (4, "剥落衰颓,宜谨慎防守", "大凶")
}
BASE_YEAR = 2024
BASE_YEAR_HEX_IDX = 30
def __init__(self, lunar_data):
self.lunar = lunar_data
self.year = int(lunar_data['date'].split('-')[0])
self.month = lunar_data['lunar_month_num']
self.day = lunar_data['lunar_day_num']
def get_year_hex(self):
offset = self.year - self.BASE_YEAR
idx = (self.BASE_YEAR_HEX_IDX + offset) % 60
return self.SEQUENCE[idx]
def get_month_hex(self):
year_hex = self.get_year_hex()
# 12个月,每个月5个卦
start_idx = (self.SEQUENCE.index(year_hex) + (self.month - 1) * 5) % 60
return self.SEQUENCE[start_idx]
def get_day_hex(self):
month_hex = self.get_month_hex()
# 月卦之后顺序排列
start_idx = self.SEQUENCE.index(month_hex)
day_offset = (self.day - 1) // 5
idx = (start_idx + day_offset) % 60
return self.SEQUENCE[idx]
def get_shichen_hex_advice(self, day_hex, shichen_idx):
"""
根据日卦和时辰序号(0-11)计算当前时段的卦象和建议
皇极经世中,日卦管 12 时辰,每爻管 2 个时辰
"""
day_idx = self.SEQUENCE.index(day_hex)
line_idx = shichen_idx // 2
# 实际上可以通过复杂的爻变逻辑,这里采用映射 SEQUENCE 以获得更丰富的动态感
# 模拟变卦:每两个时辰卦象顺延一位
shichen_hex_idx = (day_idx + shichen_idx) % 60
shichen_hex = self.SEQUENCE[shichen_hex_idx]
prop_type, prop_advice, prop_luck = self.HEX_PROPS.get(shichen_hex, (2, "宜稳重", "中"))
# 结合爻位的微调建议
line_advices = ["初爻:萌芽阶段,宜谨慎及早准备",
"二爻:渐入佳境,宜守正获益",
"三爻:过激倾向,宜适可而止",
"四爻:寻找契合,宜向上突破",
"五爻:极盛之位,宜中庸决策",
"上爻:物极必反,宜居安思危"]
return {
"hex": shichen_hex,
"luck": prop_luck,
"type": prop_type,
"advice": prop_advice,
"line_note": line_advices[line_idx]
}
def generate_schedule(self):
day_hex = self.get_day_hex()
shichens = [
("子", "23:00 - 01:00"), ("丑", "01:00 - 03:00"), ("寅", "03:00 - 05:00"),
("卯", "05:00 - 07:00"), ("辰", "07:00 - 09:00"), ("巳", "09:00 - 11:00"),
("午", "11:00 - 13:00"), ("未", "13:00 - 15:00"), ("申", "15:00 - 17:00"),
("酉", "17:00 - 19:00"), ("戌", "19:00 - 21:00"), ("亥", "21:00 - 23:00")
]
schedule = []
for i, (name, time_range) in enumerate(shichens):
advice_data = self.get_shichen_hex_advice(day_hex, i)
schedule.append({
"shichen": name,
"time": time_range,
"hex": advice_data["hex"],
"luck": advice_data["luck"],
"type": advice_data["type"],
"advice": advice_data["advice"],
"line_note": advice_data["line_note"]
})
return {
"year_hex": self.get_year_hex(),
"month_hex": self.get_month_hex(),
"day_hex": day_hex,
"schedule": schedule
}
|