-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcodex.py
More file actions
265 lines (239 loc) · 12.1 KB
/
Copy pathcodex.py
File metadata and controls
265 lines (239 loc) · 12.1 KB
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# -*- coding: utf-8 -*-
"""
《易道动态世界引擎》v4.0 — 万物爻谱 (YaoCodex)
64卦完整字典,先天八卦二进制编码,卦德与协议定义。
编码规则:
初爻 = bit0(最低位),上爻 = bit5(最高位)
下卦 = bits[0:3],上卦 = bits[3:6]
value = (upper << 3) | lower
八纯卦基准(先天伏羲序):
坤0(000), 震1(001), 坎2(010), 巽3(011),
艮4(100), 离5(101), 兑6(110), 乾7(111)
"""
# ───────────────────────────────────────────
# 0. 八纯卦基础定义(核心锚点与协议源)
# ───────────────────────────────────────────
_BASE_PRIMITIVES = {
0: {"name": "坤", "binary": "000000", "wuxing": "土", "nature": "柔顺承载",
"protocol": "承载", "semantic": "包容、孕育、万物归宿、沉静、吸收差异"},
9: {"name": "震", "binary": "001001", "wuxing": "木", "nature": "动起激发",
"protocol": "激变", "semantic": "突发唤醒、革命、惊醒、系统裂变"},
18: {"name": "坎", "binary": "010010", "wuxing": "水", "nature": "陷险润下",
"protocol": "深渊", "semantic": "危险试炼、深层欲望、黑暗知识、未知潜藏"},
27: {"name": "巽", "binary": "011011", "wuxing": "木", "nature": "入散渗透",
"protocol": "渗透", "semantic": "无形扩散、信息传播、风俗感染、风化边界"},
36: {"name": "艮", "binary": "100100", "wuxing": "土", "nature": "止成边界",
"protocol": "止界", "semantic": "封印、禁区、静止、法律凝固、阻断流动"},
45: {"name": "离", "binary": "101101", "wuxing": "火", "nature": "丽显文明",
"protocol": "显文明", "semantic": "认知、照明、网络化、可见化、意义外显"},
54: {"name": "兑", "binary": "110110", "wuxing": "金", "nature": "悦说毁折",
"protocol": "交换", "semantic": "欲望、契约、贸易、社交、差异交易"},
63: {"name": "乾", "binary": "111111", "wuxing": "金", "nature": "刚健创生",
"protocol": "创序", "semantic": "主动创造秩序、征服、命名、规则扩张"},
}
# 八卦名映射(按二进制 000~111)
_BAGUA_NAMES = ["坤", "震", "坎", "巽", "艮", "离", "兑", "乾"]
# 八卦五行映射
_BAGUA_WUXING = ["土", "木", "水", "木", "土", "火", "金", "金"]
# 八卦协议映射
_BAGUA_PROTOCOL = ["承载", "激变", "深渊", "渗透", "止界", "显文明", "交换", "创序"]
# ───────────────────────────────────────────
# 1. 64卦名称矩阵(经逐条核验,先天二进制自然序)
# ───────────────────────────────────────────
# 行 = 上卦(0~7),列 = 下卦(0~7)
_64GUA_NAMES_MATRIX = [
# upper=0 坤
["坤", "复", "师", "升", "谦", "明夷", "临", "泰"],
# upper=1 震
["豫", "震", "解", "恒", "小过", "丰", "归妹", "大壮"],
# upper=2 坎
["比", "屯", "坎", "井", "蹇", "既济", "节", "需"],
# upper=3 巽
["观", "益", "涣", "巽", "渐", "家人", "中孚", "小畜"],
# upper=4 艮
["剥", "颐", "蒙", "蛊", "艮", "贲", "损", "大畜"],
# upper=5 离
["晋", "噬嗑", "未济", "鼎", "旅", "离", "睽", "大有"],
# upper=6 兑
["萃", "随", "困", "大过", "咸", "革", "兑", "夬"],
# upper=7 乾
["否", "无妄", "讼", "姤", "遁", "同人", "履", "乾"],
]
# ───────────────────────────────────────────
# 2. 构建完整64卦字典
# ───────────────────────────────────────────
def _build_codex():
codex = {}
for v in range(64):
lower = v & 0b111
upper = (v >> 3) & 0b111
name = _64GUA_NAMES_MATRIX[upper][lower]
b = format(v, '06b')
if v in _BASE_PRIMITIVES:
info = dict(_BASE_PRIMITIVES[v])
else:
# 复合卦:基于上下卦推导基础信息
uw, lw = _BAGUA_WUXING[upper], _BAGUA_WUXING[lower]
up, lp = _BAGUA_PROTOCOL[upper], _BAGUA_PROTOCOL[lower]
info = {
"name": name,
"binary": b,
"wuxing": f"{uw}/{lw}",
"nature": "复合态势",
"protocol": up, # 以上卦协议为主导(天覆于上)
"semantic": f"上{_BAGUA_NAMES[upper]}下{_BAGUA_NAMES[lower]},"
f"{up}与{lp}交织之复合场"
}
codex[v] = info
return codex
GUA_DICT = _build_codex()
# ───────────────────────────────────────────
# 3. 便利函数
# ───────────────────────────────────────────
def get_gua(value: int) -> dict:
"""根据卦值(0-63)获取卦信息"""
return GUA_DICT.get(int(value) & 0b111111,
{"name": "?", "binary": "??????", "protocol": "未知",
"nature": "未知", "semantic": "未知", "wuxing": "?"})
def encode_name(name: str) -> int:
"""根据卦名反查卦值"""
for v, info in GUA_DICT.items():
if info["name"] == name:
return v
return 0
def get_trigram(value: int) -> tuple:
"""分离上下卦索引 (upper, lower)"""
v = int(value) & 0b111111
return (v >> 3) & 0b111, v & 0b111
def get_wuxing(value: int) -> str:
"""获取卦的五行属性"""
return get_gua(value).get("wuxing", "?")
def get_protocol(value: int) -> str:
"""获取卦的行为协议"""
return get_gua(value).get("protocol", "复合")
def gua_to_color(value: int) -> tuple:
"""将卦值映射为RGB颜色(用于可视化)"""
v = int(value) & 0b111111
yang_cnt = bin(v).count('1')
ratio = yang_cnt / 6.0
# 用高位三爻映射基础色调,亮度由阳爻比例决定
r = int(255 * ((v >> 5) & 1))
g = int(255 * ((v >> 3) & 1))
b = int(255 * ((v >> 1) & 1))
base = int(255 * ratio)
return (
int(base * 0.65 + r * 0.35),
int(base * 0.65 + g * 0.35),
int(base * 0.65 + b * 0.35)
)
# 协议→颜色映射(供 renderer 使用)
PROTOCOL_COLOR_RGB = {
"承载": (139, 90, 43), # 棕 — 坤土
"激变": (0, 255, 127), # 春绿 — 震雷
"深渊": (0, 100, 200), # 深蓝 — 坎水
"渗透": (144, 238, 144), # 淡绿 — 巽风
"止界": (128, 128, 128), # 灰 — 艮山
"显文明": (255, 69, 0), # 红橙 — 离火
"交换": (255, 215, 0), # 金 — 兑泽
"创序": (240, 240, 255), # 白蓝 — 乾天
"复合": (180, 160, 200), # 淡紫 — 复合
"未知": (80, 80, 80),
}
# ───────────────────────────────────────────
# 4. 六爻生命周期语义解释表
# ───────────────────────────────────────────
# 用于 renderer:根据 phase (0~1) 返回该卦在当前生命阶段的含义
YAO_PHASE_MEANING = {
"承载": [
(0.00, 0.17, "初爻:万物萌生于地下,尚未破土"),
(0.17, 0.33, "二爻:地道初成,包容之力开始凝聚"),
(0.33, 0.50, "三爻:承载过度,地裂之兆显现"),
(0.50, 0.67, "四爻:与天道相接,天地否泰之交"),
(0.67, 0.83, "五爻:承载达极,万物归藏"),
(0.83, 1.00, "上爻:地极则震,潜龙将出"),
],
"激变": [
(0.00, 0.17, "初爻:地底微震,人未觉之"),
(0.17, 0.33, "二爻:雷出地奋,惊醒万物"),
(0.33, 0.50, "三爻:震动过烈,结构松动"),
(0.50, 0.67, "四爻:雷动于野,变革之势已成"),
(0.67, 0.83, "五爻:雷霆万钧,旧序崩解"),
(0.83, 1.00, "上爻:震极而艮,动极生静"),
],
"深渊": [
(0.00, 0.17, "初爻:暗流初涌,表面如镜"),
(0.17, 0.33, "二爻:水聚成渊,深不可测"),
(0.33, 0.50, "三爻:险中求生,欲陷还浮"),
(0.50, 0.67, "四爻:深渊凝视,知识即危险"),
(0.67, 0.83, "五爻:水满则溢,坎极而离"),
(0.83, 1.00, "上爻:溺极反陆,深渊出明"),
],
"渗透": [
(0.00, 0.17, "初爻:微风起于青萍之末"),
(0.17, 0.33, "二爻:风行草偃,信息暗传"),
(0.33, 0.50, "三爻:渗透过深,边界溶解"),
(0.50, 0.67, "四爻:风满天下,同气相求"),
(0.67, 0.83, "五爻:风极成暴,同化一切"),
(0.83, 1.00, "上爻:风息而雷生,静极思动"),
],
"止界": [
(0.00, 0.17, "初爻:山始于壤,势未成峰"),
(0.17, 0.33, "二爻:艮止其道,边界初立"),
(0.33, 0.50, "三爻:止而过刚,裂痕内生"),
(0.50, 0.67, "四爻:山峙其间,万物绕行"),
(0.67, 0.83, "五爻:艮极成牢,自困于顶"),
(0.83, 1.00, "上爻:山崩地裂,止极生动"),
],
"显文明": [
(0.00, 0.17, "初爻:星火初燃,未照人前"),
(0.17, 0.33, "二爻:文明初曙,命名万物"),
(0.33, 0.50, "三爻:光照过甚,阴影愈深"),
(0.50, 0.67, "四爻:火炎于世,网络化生"),
(0.67, 0.83, "五爻:离极而虚,意义危机"),
(0.83, 1.00, "上爻:明极反晦,文明自焚"),
],
"交换": [
(0.00, 0.17, "初爻:潜约未立,心已往来"),
(0.17, 0.33, "二爻:契约初成,欲望流动"),
(0.33, 0.50, "三爻:交易过频,信任磨损"),
(0.50, 0.67, "四爻:泽被四方,贸易网络"),
(0.67, 0.83, "五爻:兑极而毁,契约崩解"),
(0.83, 1.00, "上爻:泽涸成陆,交换止息"),
],
"创序": [
(0.00, 0.17, "初爻:阳气潜藏,龙德而隐"),
(0.17, 0.33, "二爻:见龙在田,秩序初显"),
(0.33, 0.50, "三爻:终日乾乾,惕厉无咎"),
(0.50, 0.67, "四爻:或跃在渊,规则重构"),
(0.67, 0.83, "五爻:飞龙在天,秩序巅峰"),
(0.83, 1.00, "上爻:亢龙有悔,创极必变"),
],
"复合": [
(0.00, 0.17, "初爻:多重力量初交,混沌未分"),
(0.17, 0.33, "二爻:协议竞争,暂成妥协"),
(0.33, 0.50, "三爻:结构张力达界,裂痕显现"),
(0.50, 0.67, "四爻:内外碰撞,新态将生"),
(0.67, 0.83, "五爻:复合达极,极化分裂"),
(0.83, 1.00, "上爻:混沌反转,单一协议将胜出"),
],
}
def get_phase_meaning(protocol: str, phase: float) -> str:
"""根据协议与当前 phase 返回六爻生命阶段语义"""
table = YAO_PHASE_MEANING.get(protocol, YAO_PHASE_MEANING["复合"])
for lo, hi, meaning in table:
if lo <= phase < hi:
return meaning
return table[-1][2] # 默认返回上爻语义
# ───────────────────────────────────────────
# 测试
# ───────────────────────────────────────────
if __name__ == "__main__":
print("八纯卦核验:")
for i in [0, 9, 18, 27, 36, 45, 54, 63]:
g = get_gua(i)
print(f" {i:2d}: {g['binary']} {g['name']} ({g['wuxing']}) — {g['protocol']}: {g['semantic']}")
print("\n64卦名称抽样核验:")
samples = [2, 3, 4, 5, 6, 16, 19, 20, 22, 40, 48, 51]
for i in samples:
g = get_gua(i)
print(f" {i:2d}: {g['binary']} {g['name']}")