# 四化与飞星 (/zh/docs/guide/concepts/mutagen)

禄权科忌从哪来、十天干四化全表、自化与飞化怎么判断。



*适合：所有人。代码与完整方法表在页尾*

四化是紫微斗数里最重要的动态信息。同一张盘，四化把静态的星耀连成有方向的关系网。

## 四种化 [#四种化]

| 四化 | 标识          | 常见理解     |
| -- | ----------- | -------- |
| 化禄 | `sihuaLu`   | 顺遂、收获、缘起 |
| 化权 | `sihuaQuan` | 掌控、扩张、力度 |
| 化科 | `sihuaKe`   | 名声、贵人、缓和 |
| 化忌 | `sihuaJi`   | 阻滞、执着、变数 |

## 四化从天干来 [#四化从天干来]

每个天干固定指派四颗星，分别化禄、化权、化科、化忌。这是一张查表：

| 天干 | 化禄 | 化权 | 化科 | 化忌 |
| -- | -- | -- | -- | -- |
| 甲  | 廉贞 | 破军 | 武曲 | 太阳 |
| 乙  | 天机 | 天梁 | 紫微 | 太阴 |
| 丙  | 天同 | 天机 | 文昌 | 廉贞 |
| 丁  | 太阴 | 天同 | 天机 | 巨门 |
| 戊  | 贪狼 | 太阴 | 右弼 | 天机 |
| 己  | 武曲 | 贪狼 | 天梁 | 文曲 |
| 庚  | 太阳 | 武曲 | 太阴 | 天同 |
| 辛  | 巨门 | 太阳 | 文曲 | 文昌 |
| 壬  | 天梁 | 紫微 | 左辅 | 武曲 |
| 癸  | 破军 | 巨门 | 太阴 | 贪狼 |

<Callout title="庚干化科的分歧">
  庚干化科历来有太阴、天府、天同等不同说法。x-iztro 采用**太阴化科**，与 JS iztro 一致。

  `algorithm` 开关**不改四化表** —— 中州派与默认派用的是同一张表。
  要换成别的取法，走 Config 的自定义四化表：整表替换某个天干的四化，
  见 [Config 详解](/zh/docs/guide/guides/config#自定义四化表与亮度表)。
</Callout>

## 本命四化 [#本命四化]

排盘时用**出生年干**查上表，把四化标记打在对应的星上。
一张盘上的本命四化恰好四个 —— 被化的星里除了十四主星，还有文昌、文曲、左辅、右弼，
这四颗辅星一定在盘上，所以总数不会少。

## 运限四化 [#运限四化]

除了本命，每个运限层级还有自己的四化：大限用大限宫干、流年用流年干，
依次类推。它们叠加在同一张盘上，是运限解读的主要抓手。

返回的四颗星顺序固定为**禄、权、科、忌**。

## 飞星 [#飞星]

宫位也有天干（宫干）。用宫干查四化表，就得到这个宫「飞出去」的四颗星，
再看这四颗星落在哪个宫 —— 这就是**飞星**，用来描述宫与宫之间的作用关系。

## 自化 [#自化]

如果一个宫的宫干飞出的化星，正好就落在这个宫自己里面，称为**自化**。

自化在解读上意味着力量在本宫内部消耗或外泄，与飞入他宫的性质不同。

## 在代码里怎么取 [#在代码里怎么取]

### 读本命四化 [#读本命四化]

```python
for p in chart.palaces:
    for s in p.major_stars + p.minor_stars:
        if s.mutagen:
            print(f"{p.name} 的 {s.name} 化{s.mutagen}")
```

```text
财帛 的 武曲 化权
子女 的 太阳 化禄
仆役 的 太阴 化科
疾厄 的 天同 化忌
```

### 读运限四化 [#读运限四化]

```python
h = chart.horoscope("2024-10-1", 0)
print(h.decadal.mutagen)   # 大限四化的四颗星
print(h.yearly.mutagen)    # 流年四化的四颗星
```

```text
['太阳', '武曲', '太阴', '天同']
['廉贞', '破军', '武曲', '太阳']
```

判断用标识形态 `h.yearly.mutagen_star_keys`——被化四星的星耀标识，与译文无关。

### 判断某宫有没有某个四化 [#判断某宫有没有某个四化]

```python
soul.has_mutagen(Mutagen.LU)
soul.not_have_mutagen(Mutagen.JI)
```

### 飞星判断 [#飞星判断]

```rust
let wealth = astrolabe.palace(Palace::Wealth).unwrap();

// 财帛宫的宫干化忌，是否落在命宫
wealth.flies_to(Palace::Soul, &[Mutagen::Ji]);
```

```python
soul.flies_one_of_to(PalaceName.WEALTH, [Mutagen.LU, Mutagen.QUAN])
soul.not_fly_to(0, Mutagen.JI)

places = soul.mutaged_places()   # 禄权科忌各自飞入了哪个宫，长度为 4
```

### 自化判断 [#自化判断]

```rust
soul.self_mutaged(&[Mutagen::Lu]);   // 命宫是否自化禄
soul.self_mutaged_one_of(&[]);       // 是否有任意一种自化
soul.not_self_mutaged(&[]);          // 四种自化都没有
```

`self_mutaged_one_of` 与 `not_self_mutaged` 传空即检查全部四化，
也可以只检查其中几种。

### 完整方法一览 [#完整方法一览]

| 方法                            | 作用                |
| ----------------------------- | ----------------- |
| `has_mutagen(m)`              | 本宫是否有指定四化         |
| `not_have_mutagen(m)`         | 本宫是否没有指定四化        |
| `mutagen_stars(ms)`           | 本宫宫干在指定四化位上对应的星   |
| `flies_to(target, ms)`        | 指定化星是否**全部**落在目标宫 |
| `flies_one_of_to(target, ms)` | 是否有**任一颗**落在目标宫   |
| `not_fly_to(target, ms)`      | 是否**一颗都不**落在目标宫   |
| `self_mutaged(ms)`            | 本宫是否自化指定四化        |
| `self_mutaged_one_of(ms?)`    | 本宫是否有任一自化         |
| `not_self_mutaged(ms?)`       | 本宫指定自化全无          |
| `mutaged_places()`            | 禄权科忌四星各自所在的宫      |

宫上另有 `mutagen_star_keys` 字段，直接给出本宫宫干化出的四颗星的标识，
顺序为禄、权、科、忌；用了自定义四化表时它也会跟着变。

<Callout type="warn" title="空四化列表的语义不对称">
  这是复刻 iztro 的行为，三种编程语言一致：`flies_to` 在四化列表为空时返回 `false`，
  而 `flies_one_of_to` 与 `not_fly_to` 在同样情况下返回 `true`。
</Callout>

三方四正范围内的四化判断见[三方四正](/zh/docs/guide/concepts/surrounded)。
