feat: add yoga logic validation and varga fixes
This commit is contained in:
+7
-13
@@ -52,11 +52,15 @@ def varga_map(si, pi, div):
|
||||
"""BPHS分盘映射:星座索引si的第pi份→目标星座索引"""
|
||||
o = _odd(si)
|
||||
if div==2: return (4 if o else 3) if pi==0 else (3 if o else 4)
|
||||
if div==3: return (si+pi*4)%12 if o else (si+8+pi*4)%12
|
||||
if div==3: return (si+pi*4)%12 # Drekkana: same → +4 → +8, no odd/even distinction
|
||||
if div==4: return (si+pi)%12 if o else (si+8+pi)%12
|
||||
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
|
||||
# BPHS Navamsa: movable(0,3,6,9)=same, fixed(1,4,7,10)=+4, dual(2,5,8,11)=+8
|
||||
if si%3==0: start=si
|
||||
elif si%3==1: start=(si+4)%12
|
||||
else: start=(si+8)%12
|
||||
return (start+pi)%12
|
||||
if div==10: return (si+pi)%12 if o else (si+8+pi)%12 # D10: even signs count from 9th inclusively => +8 offset
|
||||
if div==12: return (si+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)
|
||||
@@ -72,17 +76,7 @@ def varga_map(si, pi, div):
|
||||
def calc_varga(lon, div):
|
||||
"""计算行星在指定分盘的位置(星座+精确度数+尊贵状态)"""
|
||||
si=_si(lon); d=lon-si*30; ps=30.0/div; pi=int(d/ps)
|
||||
if div == 9:
|
||||
# D9 Navamsa: retain harmonic longitude output to match existing skill/JHora-style readings.
|
||||
nav_lon = (lon * 9) % 360
|
||||
vsi = int(nav_lon / 30) % 12
|
||||
dp = nav_lon - vsi * 30
|
||||
pi = int(d / ps)
|
||||
r = {'sign': _sn(vsi), 'sign_idx': vsi, 'degree_in_sign': round(dp, 4),
|
||||
'part_index': pi, 'lord': SIGN_LORDS.get(_sn(vsi), ''), 'pada': pi + 1}
|
||||
return r
|
||||
# For non-D9 vargas, degree within divisional sign is scaled to 0-30 degrees.
|
||||
# Previous code returned only the within-part remainder (0-part_size), which made D10 degree output non-standard.
|
||||
# For all vargas, degree within divisional sign is scaled to 0-30 degrees.
|
||||
dp=(d-pi*ps)*div
|
||||
vsi=varga_map(si,pi,div)
|
||||
r={'sign':_sn(vsi),'sign_idx':vsi,'degree_in_sign':round(dp,4),
|
||||
|
||||
Reference in New Issue
Block a user