安星模块

按出生数据取某一组星耀的落宫。

不排整盘、只想知道「禄存落在哪一宫」或「这张盘的杂耀怎么分布」时用这一层。

from x_iztro import star

所有索引都是宫位索引:0 为寅宫,11 为丑宫。

共用参数

按出生数据安星的入口共用同一组参数:

参数类型必填默认说明
solar_datestr公历日期,格式 YYYY-M-D
time_indexint时辰索引 0–12
genderstr"male"性别,决定长生与博士十二神的顺逆
fix_leapboolTrue是否修正闰月
languagestr"zh-CN"星耀名称的输出语言
configChartConfig | NoneNone排盘配置
from_stem / from_branchstr | NoneNone起五行局的干支;两者须同时给出
birth = dict(solar_date="2000-8-16", time_index=2, gender="female")

本页示例统一用默认的 zh-CN,因此星名输出都是中文。 各入口的返回值都是具名 dataclass(不是 dict),字段用属性访问: star.get_start_index(**birth).ziwei_index

from_stem / from_branch 只影响起五行局

两者同时给出后,五行局改由该干支推算,进而改变紫微天府落点与长生十二神。 其余各组星的起法不受影响。用它可以取到中州派地盘、人盘的安星结果。 支持这两个参数的只有 get_start_indexget_major_starget_changsheng12


get_start_index

用途 求紫微、天府的起始宫位。

斗数含义 紫微是全盘的锚点:由五行局与农历生日按「起紫微星诀」定位, 其余十三颗主星再依紫微与天府的位置铺开。天府与紫微的位置互为镜像。

签名

def get_start_index(solar_date, time_index, gender="male", fix_leap=True,
                    language="zh-CN", config=None, from_stem=None, from_branch=None) -> dict[str, int]

返回值 StartIndex,字段 ziwei_indextianfu_index

示例

s = star.get_start_index(**birth)
print(s)
print(s.ziwei_index, s.tianfu_index)

输出

StartIndex(ziwei_index=4, tianfu_index=8)
4 8

各组落宫索引

以下六个入口形状一致:收出生数据,返回一个字段全是宫位索引的 dataclass。

函数返回类型字段起法依据
get_lu_yang_tuo_ma_indexLuYangTuoMaIndexlu_index yang_index tuo_index ma_index年干定禄存,禄前羊后陀;天马按年支
get_kui_yue_indexKuiYueIndexkui_index yue_index年干
get_chang_qu_indexChangQuIndexchang_index qu_index时支
get_kong_jie_indexKongJieIndexkong_index jie_index时支
get_timely_star_indexTimelyStarIndextaifu_index fenggao_index时支
get_luan_xi_indexLuanXiIndexhongluan_index tianxi_index年支

示例

print(star.get_lu_yang_tuo_ma_index(**birth))
print(star.get_chang_qu_index(**birth))
print(star.get_luan_xi_index(**birth))

输出

LuYangTuoMaIndex(lu_index=6, yang_index=7, tuo_index=5, ma_index=0)
ChangQuIndex(chang_index=6, qu_index=4)
LuanXiIndex(hongluan_index=9, tianxi_index=3)

擎羊在禄存前一格、陀罗在后一格,这是「禄前羊刃当,禄后陀罗府」的直接体现。


get_daily_star_index / get_monthly_star_index / get_yearly_star_index

用途 取按日、按月、按年起的杂耀落宫。

斗数含义 杂耀按起法分组:日系星从辅星位置起初一顺数到生日; 月系星按农历月份定位;年系星最多,按年干或年支起。

返回值

函数返回类型字段
get_daily_star_indexDailyStarIndexsantai_index bazuo_index enguang_index tiangui_index
get_monthly_star_indexMonthlyStarIndexyuejie_index(解神) tianyao_index tianxing_index yinsha_index tianyue_index tianwu_index
get_yearly_star_indexYearlyStarIndex27 项:xianchi_index huagai_index guchen_index guasu_index tiancai_index tianshou_index tianchu_index posui_index feilian_index longchi_index fengge_index tianku_index tianxu_index tianguan_index tianfu_index tiande_index yuede_index tiankong_index jielu_index kongwang_index xunkong_index tianshang_index tianshi_index jiekong_index jiesha_adj_index nianjie_index dahao_adj_index

红鸾、天喜也属年系,但不在 YearlyStarIndex 里——它们由 get_luan_xi_index 单独给出。

示例

d = star.get_daily_star_index(**birth)
m = star.get_monthly_star_index(**birth)
y = star.get_yearly_star_index(**birth)

print(d)
print(m.yuejie_index, m.tianyao_index, m.tianxing_index)
print(y.xianchi_index, y.huagai_index, y.tianshang_index, y.tianshi_index)

输出

DailyStarIndex(santai_index=0, bazuo_index=10, enguang_index=9, tiangui_index=7)
0 5 1
7 2 9 11

边界与陷阱


get_major_star / get_minor_star / get_adjective_star

用途 取主星、辅星、杂耀在十二宫的完整分布。

签名

def get_major_star(...) -> list[list[Star]]
def get_minor_star(...) -> list[list[Star]]
def get_adjective_star(...) -> list[list[Star]]

返回值 十二项列表,按宫位索引排列。每项是该宫的 Star 列表(可能为空)。

示例

major = star.get_major_star(**birth)

for i, stars in enumerate(major[:5]):
    print(i, [s.name for s in stars])

输出

0 ['武曲', '天相']
1 ['太阳', '天梁']
2 ['七杀']
3 ['天机']
4 ['紫微']

边界与陷阱

返回的 Star 带亮度与生年四化标记,与整盘排出的完全一致—— 它们走的是同一段代码。要取整盘的话直接用 Astro().by_solar(...) 更省事。


get_changsheng12 / get_boshi12 / get_yearly12

用途 取四组十二神在十二宫的排列。

斗数含义 这四组各是十二个标记排满十二宫,每宫恰好一个: 长生十二神按五行局起、随性别与年支阴阳定顺逆; 博士十二神从禄存起、同样定顺逆; 岁前十二神从年支起顺行;将前十二神按年支三合组起。

签名

def get_changsheng12(...) -> list[str]
def get_boshi12(...) -> list[str]
def get_yearly12(...) -> dict[str, list[str]]

返回值 get_changsheng12get_boshi12 返回十二项标识列表,按宫位索引排列。 get_yearly12 返回 Yearly12,字段 suiqian12jiangqian12 各是一个十二项标识列表。

示例

print(star.get_changsheng12(**birth)[:4])
print(star.get_boshi12(**birth)[:4])

y = star.get_yearly12(**birth)
print(y.suiqian12[:4])
print(y.jiangqian12[:4])

输出

['jue', 'mu', 'si', 'bing']
['faylian', 'zhoushu', 'jiangjun', 'xiaohao']
['diaoke', 'bingfu', 'suijian', 'huiqi']
['suiyi', 'xiishen', 'huagai', 'jiesha']

返回的是标识而非译名,要展示用 i18n.translate(key)


get_changsheng12_start_index / get_jiangqian12_start_index

用途 只取两组十二神的起始宫位,不排整组。

斗数含义 长生起点由五行局定:水二局长生在申、木三局在亥、金四局在巳、 土五局在申、火六局在寅。将星起点由年支三合组定:寅午戌年在午、申子辰年在子、 巳酉丑年在酉、亥卯未年在卯。

签名

def get_changsheng12_start_index(five_elements_class: FiveElementsClass | str) -> int
def get_jiangqian12_start_index(branch: EarthlyBranch | str) -> int

返回值 int,0–11。这两个函数不需要出生数据。

示例

print(star.get_changsheng12_start_index("water2nd"), star.get_changsheng12_start_index("fire6th"))
print(star.get_jiangqian12_start_index("ziEarthly"), star.get_jiangqian12_start_index("wuEarthly"))

输出

6 0
10 4

水二局长生在申(索引 6),火六局在寅(索引 0)。


get_horoscope_star

用途 取某个运限层级的流耀分布。

斗数含义 流耀是随运限产生的十颗星:魁钺昌曲禄羊陀马鸾喜。 它们的落宫由该层级的干支决定,名字随层级变化。流年层级额外多一颗年解。

签名

def get_horoscope_star(
    stem: HeavenlyStem | str,
    branch: EarthlyBranch | str,
    scope: Scope | str,
    language: str = "zh-CN",
) -> list[list[Star]]

参数

参数类型必填默认说明
stemstr该层级的天干标识
branchstr该层级的地支标识
scopestr运限层级,决定星名
languagestr"zh-CN"输出语言

返回值 十二项列表,按宫位索引排列。

各层级的星名对照

本命大限流年流月流日流时
天魁运魁流魁月魁日魁时魁
天钺运钺流钺月钺日钺时钺
文昌运昌流昌月昌日昌时昌
文曲运曲流曲月曲日曲时曲
禄存运禄流禄月禄日禄时禄
擎羊运羊流羊月羊日羊时羊
陀罗运陀流陀月陀日陀时陀
天马运马流马月马日马时马
红鸾运鸾流鸾月鸾日鸾时鸾
天喜运喜流喜月喜日喜时喜

标识形如 yunlu(运禄)、liulu(流禄)、yuelu(月禄)、rilu(日禄)、shilu(时禄)。

示例

decadal = star.get_horoscope_star("jiaHeavenly", "ziEarthly", "decadal")
print([[s.name for s in p] for p in decadal[:4]])

origin = star.get_horoscope_star("jiaHeavenly", "ziEarthly", "origin")
print([[s.name for s in p] for p in origin[:2]])

输出

[['运禄', '运马'], ['运羊', '运鸾'], [], ['运昌']]
[['禄存', '天马'], ['擎羊', '红鸾']]

边界与陷阱

流年层级多一颗年解

"yearly" 的结果里额外含年解,按流年地支定位,安放在十颗流耀之前。 其余层级没有这一颗。


低层落宫

上面的函数都从出生数据起算,内部先推出年干支、命宫、修正后的农历月,再落宫。 这一组则直接收那些中间量,自建流程时可以复用。

函数
get_zuo_you_index(lunar_month)修正后的农历月 1–12ZuoYouIndex(zuo_index, you_index)
get_huo_ling_index(branch, time_index)年支、时辰HuoLingIndex(huo_index, ling_index)
get_huagai_xianchi_index(branch)年支HuagaiXianchiIndex(huagai_index, xianchi_index)
get_gu_gua_index(branch)年支GuGuaIndex(guchen_index, guasu_index)
get_jiesha_adj_index(branch)年支int,劫煞宫位索引
get_dahao_index(branch)年支int,大耗宫位索引
get_nianjie_index(branch)年支int,年解宫位索引
get_tianshi_tianshang_index(gender, branch, soul_index, config=None)性别、年支、命宫索引TianshiTianshangIndex(tianshang_index, tianshi_index)
get_chang_qu_index_by_heavenly_stem(stem)天干ChangQuIndex(chang_index, qu_index)

示例

from x_iztro import star

chart = Astro().by_solar("2000-8-16", 2, "female")
year_branch = chart.raw_dates.chinese_date.yearly_keys[1]

print(star.get_huo_ling_index(year_branch, 2))
print(star.get_gu_gua_index(year_branch))
print(star.get_chang_qu_index_by_heavenly_stem("jiaHeavenly"))

输出

HuoLingIndex(huo_index=2, ling_index=10)
GuGuaIndex(guchen_index=3, guasu_index=11)
ChangQuIndex(chang_index=3, qu_index=7)

边界与陷阱

农历月要先修正

get_zuo_you_index 收的是修正闰月之后的月份,即 fix_lunar_month_index(...) + 1, 不是农历原始月份。闰月盘直接传原始月份会落错宫。

天伤天使分派别

get_tianshi_tianshang_index 的结果随 config.algorithm 变:中州派在阴男阳女 (生年地支阴阳与性别阴阳不同)时天伤天使对调,通行派不对调。

get_chang_qu_index_by_heavenly_stem 按天干起昌曲,用于运限层级的流昌流曲; 本命盘的文昌文曲按时支走 get_chang_qu_index

本页目录