fix: v4.2.1 技法修正 + 文档整理

技法修正(Critical):
- Karakamsha: DK→AK(灵魂星),经典定义是AK在Navamsa的星座
- D10 Dasamsa: 偶数星座偏移+8→+9(从第9个星座开始)
- D16 Shodamsa: 偶数星座偏移+1→+4(从Leo开始近似)
- Shadbala Kendra Bala: 不等值→统一15 Virupas(BPHS标准)
- Shadbala Ojayugma: 添加D9修正注释(当前D1近似)
- Shadbala Nathonnatha: 添加比例计算注释(当前二值近似)

文档修正:
- SKILL.md版本号v3.12.1→v4.2.0
- SKILL.md章节编号修正(12.5→13,后续顺延)
- SKILL.md参考文献重复编号修正
- SKILL.md参考数量100→102
- SKILL.md自评6.0/5→5.0/5
- SKILL.md硬编码Python路径→python3
- README.md从v3.7.1更新到v4.2.0

清理:
- 删除 example.py 空壳文件
- 删除 __pycache__ 和 hermes_memory.db
This commit is contained in:
732642856
2026-05-03 08:35:41 +08:00
parent 85359c2f0a
commit f3459376db
7 changed files with 323 additions and 319 deletions
-19
View File
@@ -1,19 +0,0 @@
#!/usr/bin/env python3
"""
Example helper script for jyotish-vedic-astrology
This is a placeholder script that can be executed directly.
Replace with actual implementation or delete if not needed.
Example real scripts from other skills:
- pdf/scripts/fill_fillable_fields.py - Fills PDF form fields
- pdf/scripts/convert_pdf_to_images.py - Converts PDF pages to images
"""
def main():
print("This is an example script for jyotish-vedic-astrology")
# TODO: Add actual script logic here
# This could be data processing, file conversion, API calls, etc.
if __name__ == "__main__":
main()
+18 -13
View File
@@ -7,7 +7,7 @@ Parashara传承中的Jaimini子系统
支持:
- Chara Karaka: 7/8个功能指示星(按度数排序)
- Chara Dasha: 基于星座的大运系统
- Karakamsha: DK在Navamsa中的上升(灵魂方向)
- Karakamsha: AK在Navamsa中的上升(灵魂方向)
- Jaimini Sutras关键规则
"""
from typing import Dict, List, Tuple, Optional
@@ -212,25 +212,30 @@ def _chara_dasha_duration(sign_idx, planet_lons):
return max(1, 12 - count)
def calc_karakamsha(dk_sign_in_d9: str, dk_degree_in_d9: float) -> Dict:
def calc_karakamsha(ak_sign_in_d9: str, ak_degree_in_d9: float) -> Dict:
"""
Karakamsha分析:DK在D9中的位置作为"灵魂上升"
Karakamsha分析:AKAtmakaraka,灵魂星)在D9中的位置作为"灵魂上升"
这是Jaimini体系中判断人生终极方向的关键技法
参数:
dk_sign_in_d9: DK在D9中的星座
dk_degree_in_d9: DK在D9中的度数
"""
sign_idx = SIGNS.index(dk_sign_in_d9) if dk_sign_in_d9 in SIGNS else 0
lord = SIGN_LORDS.get(dk_sign_in_d9, '')
经典定义:Karakamsha = Atmakaraka在Navamsa(D9)中落入的星座
从这个星座看12宫的布局,分析灵魂方向
# Karakamsha Lagna = DK在D9中的位置
⚠️ 2026-05-03修正:此前版本错误使用DK(配偶星),现已修正为AK(灵魂星)
参数:
ak_sign_in_d9: AK(灵魂星)在D9中的星座
ak_degree_in_d9: AK在D9中的度数
"""
sign_idx = SIGNS.index(ak_sign_in_d9) if ak_sign_in_d9 in SIGNS else 0
lord = SIGN_LORDS.get(ak_sign_in_d9, '')
# Karakamsha Lagna = AK(灵魂星)在D9中的位置
# 从这个位置看12宫的布局,分析灵魂方向
interpretations = _karakamsha_interpretations(dk_sign_in_d9, lord)
interpretations = _karakamsha_interpretations(ak_sign_in_d9, lord)
return {
'karakamsha_sign': dk_sign_in_d9,
'karakamsha_degree': dk_degree_in_d9,
'karakamsha_sign': ak_sign_in_d9,
'karakamsha_degree': ak_degree_in_d9,
'karakamsha_lord': lord,
'soul_direction': interpretations,
}
+12 -10
View File
@@ -1129,12 +1129,13 @@ def cmd_jaimini(args):
if mode in ('all', 'dasha'):
result['chara_dasha'] = calc_chara_dasha(asc_idx, planet_lons, args.year, args.month)
if mode in ('all', 'karakamsha'):
# DK的D9位置(用planet_degs计算Karaka,用planet_lons计算Navamsa
# AK(灵魂星)的D9位置 — Karakamsha定义是AK在Navamsa中的星座
# ⚠️ 2026-05-03修正:此前错误使用DK,现已修正为AK
ck7 = calc_chara_karaka_7(planet_degs)
dk_name = ck7['karaka_table']['Darakaraka']['planet']
dk_lon = planet_lons.get(dk_name, 0)
dk_d9 = calc_varga(dk_lon, 9)
result['karakamsha'] = calc_karakamsha(dk_d9.get('sign', 'Aries'), dk_d9.get('degree_in_sign', 0))
ak_name = ck7['karaka_table']['Atmakaraka']['planet']
ak_lon = planet_lons.get(ak_name, 0)
ak_d9 = calc_varga(ak_lon, 9)
result['karakamsha'] = calc_karakamsha(ak_d9.get('sign', 'Aries'), ak_d9.get('degree_in_sign', 0))
return result
@@ -1449,13 +1450,14 @@ def cmd_full_reading(args):
jaimini_result['chara_karaka_8'] = calc_chara_karaka_8(planet_degs)
jaimini_result['chara_dasha'] = calc_chara_dasha(asc_idx, planet_lons, args.year, args.month)
# Karakamsha(用planet_degs计算Karaka,用planet_lons计算Navamsa
# Karakamsha(用AK灵魂星,非DK配偶星
# ⚠️ 2026-05-03修正:此前错误使用DK,现已修正为AK
ck7 = jaimini_result['chara_karaka_7']
dk_name = ck7['karaka_table']['Darakaraka']['planet']
dk_lon = planet_lons.get(dk_name, 0)
dk_d9 = calc_varga(dk_lon, 9)
ak_name = ck7['karaka_table']['Atmakaraka']['planet']
ak_lon = planet_lons.get(ak_name, 0)
ak_d9 = calc_varga(ak_lon, 9)
jaimini_result['karakamsha'] = calc_karakamsha(
dk_d9.get('sign', 'Aries'), dk_d9.get('degree_in_sign', 0))
ak_d9.get('sign', 'Aries'), ak_d9.get('degree_in_sign', 0))
report['modules']['jaimini'] = jaimini_result
except Exception as e:
report['errors'].append(f"jaimini: {e}")
+13 -2
View File
@@ -214,14 +214,20 @@ def calc_sthana_bala(pname: str, lon: float, sign: str, house: int) -> Dict:
sapta_score = 5
# C. Ojayugma Bala(奇偶宫力量)
# ⚠️ 2026-05-03修正:BPHS定义是基于Navamsa(D9)中的奇偶宫,非D1
# 水星/金星:落在D9奇数宫(1,3,5,7,9,11)获得15 Virupas
# 其他行星:落在D9偶数宫(2,4,6,8,10,12)获得15 Virupas
# 简化实现:使用D1宫位奇偶(当D9不可用时作为近似)
# TODO: 未来需传入D9宫位以精确计算
if pname in ['Mercury', 'Venus']:
ojayugma = 15 if house % 2 == 0 else 0
else:
ojayugma = 15 if house % 2 == 1 else 0
# D. Kendra Bala(角宫力量)
kendra_scores = {1: 60, 4: 40, 7: 20, 10: 30}
kendra_bala = kendra_scores.get(house, 0)
# ⚠️ 2026-05-03修正:BPHS给出角宫(Kendra 1/4/7/10)统一15 Virupas,非不等值
# 此前错误使用{1:60, 4:40, 7:20, 10:30},已修正为统一15
kendra_bala = 15 if house in (1, 4, 7, 10) else 0
# E. Drekkana Bala(三分盘力量)
deg_in_sign = lon % 30
@@ -260,6 +266,11 @@ def calc_kala_bala(pname: str, is_night: bool, sun_northern: bool,
components = {}
# A. Nathonnata Bala(昼夜力量)
# ⚠️ 2026-05-03修正:BPHS给出比例计算(0-60),非二值(0/60)
# 水星永远获得完整60;日间行星白天按出生时间到正午距离比例获得0-60
# 夜间行星夜晚按出生时间到午夜距离比例获得0-60
# 简化实现:保持水星=60,其他按昼夜分组给60/0
# TODO: 未来需传入精确出生时间计算正午/午夜距离比例
if pname == 'Mercury':
nathonnata = 60
elif is_night and pname in NOCTURNAL_STRONG:
+2 -2
View File
@@ -57,9 +57,9 @@ def varga_map(si, pi, div):
if div==7: return (si+pi)%12 if o else (si+6+pi)%12
if div==9:
el={0:0,1:9,2:6,3:3}; return (el[si%4]+pi)%12
if div==10: return (si+pi)%12 if o else (si+8+pi)%12
if div==10: return (si+pi)%12 if o else (si+9+pi)%12 # D10: even signs start from 9th (2026-05-03 fix: was +8)
if div==12: return (si+pi)%12
if div==16: return ((0 if o else 1)+pi)%12
if div==16: return ((0 if o else 4)+pi)%12 # D16: movable=+0, fixed=+4; dual needs separate (2026-05-03 fix: was +1)
if div==20: return ((0 if o else 8)+pi)%12
if div==24: return ((4 if o else 3)+pi)%12
if div==27: return ((0 if o else 6)+pi)%12