v6.9.10: Chara Dasha 尊贵状态 Bug 修复 + 多 Ayanamsa 支持

fix(chara): calc_chara_dasha 尊贵比较 Bug — lord_house==set() → lord_house in set()
  影响: dignity_adjustment 字段始终显示 'none' → 现已正确显示 exalted/debilitated
  根因: int 与 set 比较永远 False (jaimini.py:527-530)

feat(ayanamsa): 多恒星黄道系统支持 — --ayanamsa 参数
  支持: lahiri(默认), raman, kp, fagan_bradley, djwhal_khul, sassanian, true_citra
  用法: jyotish_engine chart --ayanamsa raman ...
  验证: Lahiri 23.32° / Raman 21.87° / KP 23.22° (Obama 1961)

chore: 引擎版本号 v3.7.0→v6.9.9
This commit is contained in:
732642856
2026-06-13 11:21:27 +08:00
parent 0880fd6405
commit daf4c80aa9
2 changed files with 38 additions and 4 deletions
+5 -3
View File
@@ -521,12 +521,14 @@ def calc_chara_dasha(asc_sign_idx: int,
lord_house_name = SIGNS[lord_house]
# 尊贵状态
dignities = _PLANET_DIGNITY.get(lord, {})
dignities = _PLANET_DIGNITY_KNRAO.get(lord, {})
dignity_status = 'none'
if dignities:
if lord_house == dignities.get('exalted'):
exalted_set = dignities.get('exalted', set())
debil_set = dignities.get('debilitated', set())
if lord_house in exalted_set:
dignity_status = 'exalted'
elif lord_house == dignities.get('debilitated'):
elif lord_house in debil_set:
dignity_status = 'debilitated'
dasha_sequence.append({
+33 -1
View File
@@ -57,6 +57,17 @@ TRANSIT_JSON = os.path.join(CLAW_DIR, '月运过境配置-2026-2028.json')
try:
import swisseph as swe
# 默认 Lahiri,可被 --ayanamsa 参数覆盖
AYANAMSA_MODES = {
'lahiri': swe.SIDM_LAHIRI,
'raman': swe.SIDM_RAMAN,
'kp': swe.SIDM_KRISHNAMURTI,
'krishnamurti': swe.SIDM_KRISHNAMURTI,
'fagan_bradley': swe.SIDM_FAGAN_BRADLEY,
'djwhal_khul': swe.SIDM_DJWHAL_KHUL,
'sassanian': swe.SIDM_SASSANIAN,
'true_citra': swe.SIDM_TRUE_CITRA,
}
swe.set_sid_mode(swe.SIDM_LAHIRI) # P0修复:必须设置Lahiri恒星黄道模式
HAS_SWE = True
except ImportError:
@@ -416,6 +427,16 @@ def _add_chart_args(p):
p.add_argument('--lon', type=float, required=True)
p.add_argument('--tz', type=float, default=0)
p.add_argument('--node-mode', default='mean', choices=['mean', 'true'], help='Rahu/Ketu节点口径:mean=Mean Node(默认,JHora常用/Swiss direct baseline),true=True NodePyJHora默认)')
p.add_argument('--ayanamsa', default='lahiri', choices=list(AYANAMSA_MODES.keys()),
help='恒星黄道系统(默认lahiri)。可选: raman, kp(krishnamurti), fagan_bradley, djwhal_khul, sassanian, true_citra')
def _apply_ayanamsa(ayanamsa_name):
"""应用指定的 Ayanamsa 系统到全局 swissph 设置。新增 v6.9.9"""
if not HAS_SWE or ayanamsa_name not in AYANAMSA_MODES:
return False
swe.set_sid_mode(AYANAMSA_MODES[ayanamsa_name])
return True
def _varga_chart_to_yoga_context(varga_chart):
@@ -4017,7 +4038,7 @@ def cmd_prashna(args):
# CLI入口
# ============================================================================
def main():
parser = argparse.ArgumentParser(description='印度占星统一引擎 v3.7.0', formatter_class=argparse.RawDescriptionHelpFormatter)
parser = argparse.ArgumentParser(description='印度占星统一引擎 v6.9.9', formatter_class=argparse.RawDescriptionHelpFormatter)
sub = parser.add_subparsers(dest='command', help='子命令')
# 1. chart
@@ -4037,6 +4058,8 @@ def main():
p.add_argument('--lon', type=float, required=False)
p.add_argument('--tz', type=float, default=0)
p.add_argument('--node-mode', default='mean', choices=['mean', 'true'])
p.add_argument('--ayanamsa', default='lahiri', choices=list(AYANAMSA_MODES.keys()),
help='恒星黄道系统(默认lahiri)。可选: raman, kp, fagan_bradley, djwhal_khul, sassanian, true_citra')
p.add_argument('--nakshatra', default=None); p.add_argument('--pada', type=int, default=None)
p.add_argument('--moon-lon', type=float, default=None); p.add_argument('--birthdate', default=None)
p.add_argument('--today', default=None)
@@ -4247,6 +4270,15 @@ def main():
if not args.command:
parser.print_help(); sys.exit(1)
# 应用 Ayanamsa 设置(v6.9.9 新增多系统支持)
ayanamsa_name = getattr(args, 'ayanamsa', 'lahiri')
if ayanamsa_name and ayanamsa_name != 'lahiri':
applied = _apply_ayanamsa(ayanamsa_name)
if not applied:
print(f"Warning: Ayanamsa '{ayanamsa_name}' not recognized, using default Lahiri", file=sys.stderr)
else:
print(f" [Ayanamsa] {ayanamsa_name}", file=sys.stderr)
cmds = {'chart': cmd_chart, 'dasha': cmd_dasha, 'yoga': cmd_yoga, 'predict': cmd_predict,
'varga': cmd_varga, 'celebrity': cmd_celebrity, 'db-stats': cmd_db_stats, 'transit': cmd_transit,
'shadbala': cmd_shadbala, 'ashtakavarga': cmd_ashtakavarga, 'memory': cmd_memory,