副本编号 LY-20261007-AC63(水印指纹已嵌入) 含 README、.gitignore;排除 .DS_Store / __pycache__ / .pytest_cache
150 lines
4.5 KiB
Python
150 lines
4.5 KiB
Python
# -*- coding:utf-8 -*-
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Union, List
|
|
|
|
from tyme4py import LoopTyme, AbstractCulture
|
|
from tyme4py.culture import Direction
|
|
from tyme4py.enums import Side
|
|
|
|
if TYPE_CHECKING:
|
|
from tyme4py.lunar import LunarDay, LunarMonth
|
|
from tyme4py.sixtycycle import SixtyCycle, SixtyCycleDay
|
|
|
|
|
|
class FetusEarthBranch(LoopTyme):
|
|
"""地支六甲胎神"""
|
|
NAMES: List[str] = ['碓', '厕', '炉', '门', '栖', '床']
|
|
"""名称"""
|
|
|
|
def __init__(self, index_or_name: Union[int, str]):
|
|
super().__init__(self.NAMES, index_or_name)
|
|
|
|
@classmethod
|
|
def from_name(cls, name: str) -> FetusEarthBranch:
|
|
return cls(name)
|
|
|
|
@classmethod
|
|
def from_index(cls, index: int) -> FetusEarthBranch:
|
|
return cls(index)
|
|
|
|
def next(self, n: int):
|
|
return FetusEarthBranch(self.next_index(n))
|
|
|
|
|
|
class FetusHeavenStem(LoopTyme):
|
|
"""天干六甲胎神"""
|
|
NAMES: List[str] = ['门', '碓磨', '厨灶', '仓库', '房床']
|
|
"""名称"""
|
|
|
|
def __init__(self, index_or_name: Union[int, str]):
|
|
super().__init__(self.NAMES, index_or_name)
|
|
|
|
@classmethod
|
|
def from_name(cls, name: str) -> FetusHeavenStem:
|
|
return cls(name)
|
|
|
|
@classmethod
|
|
def from_index(cls, index: int) -> FetusHeavenStem:
|
|
return cls(index)
|
|
|
|
def next(self, n: int) -> FetusHeavenStem:
|
|
return FetusHeavenStem(self.next_index(n))
|
|
|
|
|
|
class FetusMonth(LoopTyme):
|
|
"""逐月胎神"""
|
|
NAMES: List[str] = ['占房床', '占户窗', '占门堂', '占厨灶', '占房床', '占床仓', '占碓磨', '占厕户', '占门房', '占房床', '占灶炉', '占房床']
|
|
"""名称"""
|
|
|
|
def __init__(self, index_or_name: Union[int, str]):
|
|
super().__init__(self.NAMES, index_or_name)
|
|
|
|
@classmethod
|
|
def from_name(cls, name: str) -> FetusMonth:
|
|
return cls(name)
|
|
|
|
@classmethod
|
|
def from_index(cls, index: int) -> FetusMonth:
|
|
return cls(index)
|
|
|
|
@classmethod
|
|
def from_lunar_month(cls, lunar_month: LunarMonth) -> Union[FetusMonth, None]:
|
|
"""
|
|
从农历月初始化
|
|
:param lunar_month: 农历月
|
|
:return: 逐月胎神
|
|
"""
|
|
return None if lunar_month.is_leap() else cls(lunar_month.get_month() - 1)
|
|
|
|
def next(self, n: int) -> FetusMonth:
|
|
return FetusMonth(self.next_index(n))
|
|
|
|
|
|
class FetusDay(AbstractCulture):
|
|
"""逐日胎神"""
|
|
|
|
def __init__(self, sixty_cycle: SixtyCycle):
|
|
self._fetus_heaven_stem = FetusHeavenStem(sixty_cycle.get_heaven_stem().get_index() % 5)
|
|
self._fetus_earth_branch = FetusEarthBranch(sixty_cycle.get_earth_branch().get_index() % 6)
|
|
index: int = [3, 3, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, -9, -9, -9, -9, -9, -5, -5, -1, -1, -1, -3, -7, -7, -7, -7, -5, 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3][sixty_cycle.get_index()]
|
|
self._side = Side.IN if index < 0 else Side.OUT
|
|
self._direction = Direction(index)
|
|
|
|
@classmethod
|
|
def from_lunar_day(cls, lunar_day: LunarDay) -> FetusDay:
|
|
return cls(lunar_day.get_sixty_cycle())
|
|
|
|
@classmethod
|
|
def from_sixty_cycle_day(cls, sixty_cycle_day: SixtyCycleDay) -> FetusDay:
|
|
return cls(sixty_cycle_day.get_sixty_cycle())
|
|
|
|
def get_name(self) -> str:
|
|
s: str = self._fetus_heaven_stem.get_name() + self._fetus_earth_branch.get_name()
|
|
if '门门' == s:
|
|
s = '占大门'
|
|
elif '碓磨碓' == s:
|
|
s = '占碓磨'
|
|
elif '房床床' == s:
|
|
s = '占房床'
|
|
elif s.startswith('门'):
|
|
s = '占' + s
|
|
s += ' '
|
|
if Side.IN == self._side:
|
|
s += '房内'
|
|
else:
|
|
s += '外'
|
|
direction_name: str = self._direction.get_name()
|
|
if Side.OUT == self._side and '北南西东'.find(direction_name) != -1:
|
|
s += '正'
|
|
s += direction_name
|
|
return s
|
|
|
|
def get_side(self) -> Side:
|
|
"""
|
|
内外
|
|
:return: 内外
|
|
"""
|
|
return self._side
|
|
|
|
def get_direction(self) -> Direction:
|
|
"""
|
|
方位
|
|
:return: 方位
|
|
"""
|
|
return self._direction
|
|
|
|
def get_fetus_heaven_stem(self) -> FetusHeavenStem:
|
|
"""
|
|
天干六甲胎神
|
|
:return: 天干六甲胎神
|
|
"""
|
|
return self._fetus_heaven_stem
|
|
|
|
def get_fetus_earth_branch(self) -> FetusEarthBranch:
|
|
"""
|
|
地支六甲胎神
|
|
:return: 地支六甲胎神
|
|
"""
|
|
return self._fetus_earth_branch
|