feat(saju-lab): calculator/constants.py — 천간/지지/오행/지장간 상수
This commit is contained in:
66
saju-lab/app/calculator/constants.py
Normal file
66
saju-lab/app/calculator/constants.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
"""사주 계산 상수 — saju-web/lib/saju-calculator.ts 의 상수와 1:1 매핑."""
|
||||||
|
|
||||||
|
HEAVENLY_STEMS = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
|
||||||
|
HEAVENLY_STEMS_KR = ["갑", "을", "병", "정", "무", "기", "경", "신", "임", "계"]
|
||||||
|
|
||||||
|
EARTHLY_BRANCHES = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
|
||||||
|
EARTHLY_BRANCHES_KR = ["자", "축", "인", "묘", "진", "사", "오", "미", "신", "유", "술", "해"]
|
||||||
|
|
||||||
|
FIVE_ELEMENTS = {
|
||||||
|
"甲": "木", "乙": "木",
|
||||||
|
"丙": "火", "丁": "火",
|
||||||
|
"戊": "土", "己": "土",
|
||||||
|
"庚": "金", "辛": "金",
|
||||||
|
"壬": "水", "癸": "水",
|
||||||
|
"寅": "木", "卯": "木",
|
||||||
|
"巳": "火", "午": "火",
|
||||||
|
"辰": "土", "戌": "土", "丑": "土", "未": "土",
|
||||||
|
"申": "金", "酉": "金",
|
||||||
|
"子": "水", "亥": "水",
|
||||||
|
}
|
||||||
|
|
||||||
|
FIVE_ELEMENTS_KR = {
|
||||||
|
"木": "목", "火": "화", "土": "토", "金": "금", "水": "수",
|
||||||
|
}
|
||||||
|
|
||||||
|
IS_YANG_STEM = {
|
||||||
|
"甲": True, "乙": False,
|
||||||
|
"丙": True, "丁": False,
|
||||||
|
"戊": True, "己": False,
|
||||||
|
"庚": True, "辛": False,
|
||||||
|
"壬": True, "癸": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
IS_YANG_BRANCH = {
|
||||||
|
"子": True, "丑": False,
|
||||||
|
"寅": True, "卯": False,
|
||||||
|
"辰": True, "巳": False,
|
||||||
|
"午": True, "未": False,
|
||||||
|
"申": True, "酉": False,
|
||||||
|
"戌": True, "亥": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
# 지장간: { 지지: [본기, 중기, 여기] (없으면 생략) }
|
||||||
|
HIDDEN_STEMS = {
|
||||||
|
"子": ["癸"],
|
||||||
|
"丑": ["己", "癸", "辛"],
|
||||||
|
"寅": ["甲", "丙", "戊"],
|
||||||
|
"卯": ["乙"],
|
||||||
|
"辰": ["戊", "乙", "癸"],
|
||||||
|
"巳": ["丙", "庚", "戊"],
|
||||||
|
"午": ["丁", "己"],
|
||||||
|
"未": ["己", "丁", "乙"],
|
||||||
|
"申": ["庚", "壬", "戊"],
|
||||||
|
"酉": ["辛"],
|
||||||
|
"戌": ["戊", "辛", "丁"],
|
||||||
|
"亥": ["壬", "甲"],
|
||||||
|
}
|
||||||
|
|
||||||
|
# 본기, 중기, 여기 가중치
|
||||||
|
HIDDEN_STEM_WEIGHTS = [1.0, 0.5, 0.3]
|
||||||
|
|
||||||
|
# 상생 사이클 (목→화→토→금→수→목)
|
||||||
|
SHENG_CYCLE = {"木": "火", "火": "土", "土": "金", "金": "水", "水": "木"}
|
||||||
|
|
||||||
|
# 상극 사이클 (목→토→수→화→금→목)
|
||||||
|
KE_CYCLE = {"木": "土", "土": "水", "水": "火", "火": "金", "金": "木"}
|
||||||
34
saju-lab/tests/test_constants.py
Normal file
34
saju-lab/tests/test_constants.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
from app.calculator import constants
|
||||||
|
|
||||||
|
|
||||||
|
def test_heavenly_stems_10():
|
||||||
|
assert len(constants.HEAVENLY_STEMS) == 10
|
||||||
|
assert constants.HEAVENLY_STEMS[0] == "甲"
|
||||||
|
assert constants.HEAVENLY_STEMS[9] == "癸"
|
||||||
|
|
||||||
|
|
||||||
|
def test_earthly_branches_12():
|
||||||
|
assert len(constants.EARTHLY_BRANCHES) == 12
|
||||||
|
assert constants.EARTHLY_BRANCHES[0] == "子"
|
||||||
|
assert constants.EARTHLY_BRANCHES[11] == "亥"
|
||||||
|
|
||||||
|
|
||||||
|
def test_five_elements_mapping():
|
||||||
|
assert constants.FIVE_ELEMENTS["甲"] == "木"
|
||||||
|
assert constants.FIVE_ELEMENTS["丁"] == "火"
|
||||||
|
assert constants.FIVE_ELEMENTS["亥"] == "水"
|
||||||
|
assert constants.FIVE_ELEMENTS["申"] == "金"
|
||||||
|
assert constants.FIVE_ELEMENTS["未"] == "土"
|
||||||
|
|
||||||
|
|
||||||
|
def test_hidden_stems():
|
||||||
|
assert constants.HIDDEN_STEMS["子"] == ["癸"]
|
||||||
|
assert constants.HIDDEN_STEMS["丑"] == ["己", "癸", "辛"]
|
||||||
|
assert constants.HIDDEN_STEMS["寅"] == ["甲", "丙", "戊"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_yang_yin_stems():
|
||||||
|
assert constants.IS_YANG_STEM["甲"] is True
|
||||||
|
assert constants.IS_YANG_STEM["乙"] is False
|
||||||
|
assert constants.IS_YANG_STEM["庚"] is True
|
||||||
|
assert constants.IS_YANG_STEM["辛"] is False
|
||||||
Reference in New Issue
Block a user