fix: support D11 in native varga map
This commit is contained in:
+4
-3
@@ -3,7 +3,7 @@
|
||||
"""
|
||||
吠陀占星分盘计算模块 v1.0
|
||||
BPHS Shodasavarga(十六分盘体系)
|
||||
支持: D2/D3/D4/D7/D9/D10/D12/D16/D20/D24/D27/D30/D40/D45/D60
|
||||
支持: D2/D3/D4/D7/D9/D10/D11/D12/D16/D20/D24/D27/D30/D40/D45/D60
|
||||
每个分盘输出精确度数,支持进一步分析。
|
||||
"""
|
||||
from typing import Dict, List, Optional
|
||||
@@ -24,7 +24,7 @@ VARGA_META = {
|
||||
2:{'name':'Hora','cn':'财富','area':'财富资源'},3:{'name':'Drekkana','cn':'兄弟','area':'兄弟姐妹'},
|
||||
4:{'name':'Turyamsa','cn':'财产','area':'财产住所'},7:{'name':'Saptamsa','cn':'子女','area':'子女后代'},
|
||||
9:{'name':'Navamsa','cn':'婚姻','area':'婚姻伴侣灵魂'},10:{'name':'Dasamsa','cn':'事业','area':'事业公众形象'},
|
||||
12:{'name':'Dwadashamsa','cn':'父母','area':'父母祖先'},16:{'name':'Shodasamsa','cn':'享受','area':'车辆物质'},
|
||||
11:{'name':'Rudramsa','cn':'收益转化','area':'收益朋友愿望'},12:{'name':'Dwadashamsa','cn':'父母','area':'父母祖先'},16:{'name':'Shodasamsa','cn':'享受','area':'车辆物质'},
|
||||
20:{'name':'Vimsamsa','cn':'修行','area':'精神修行'},24:{'name':'Siddhamsa','cn':'学识','area':'教育学识'},
|
||||
27:{'name':'Bhamsa','cn':'力量','area':'力量弱点'},30:{'name':'Trimsamsa','cn':'苦难','area':'灾难苦难'},
|
||||
40:{'name':'Khavedamsa','cn':'运势','area':'吉凶运势'},45:{'name':'Akshavedamsa','cn':'格局','area':'整体格局'},
|
||||
@@ -71,6 +71,7 @@ def varga_map(si, pi, div):
|
||||
else: start=(si+4)%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==11: return (si+pi)%12 if o else (si+8+pi)%12 # D11 Rudramsa: mirror extended calculator
|
||||
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)
|
||||
if div==20: return ((0 if o else 8)+pi)%12
|
||||
@@ -244,7 +245,7 @@ def dignity(planet, sign_idx):
|
||||
def calc_all_vargas(planet_lons, asc_lon, divisions=None, mode='classical_local'):
|
||||
"""批量计算所有指定分盘"""
|
||||
if divisions is None:
|
||||
divisions=[2,3,4,7,9,10,12,16,20,24,27,30,40,45,60]
|
||||
divisions=[2,3,4,7,9,10,11,12,16,20,24,27,30,40,45,60]
|
||||
results={}
|
||||
for div in divisions:
|
||||
m=VARGA_META.get(div,{})
|
||||
|
||||
@@ -10,6 +10,7 @@ from varga import (
|
||||
calc_22nd_drekkana,
|
||||
calc_64th_navamsa,
|
||||
calc_bhrigu_bindu,
|
||||
calc_all_vargas,
|
||||
calc_sarpa_drekkana,
|
||||
calc_varga,
|
||||
varga_map,
|
||||
@@ -95,6 +96,22 @@ def test_varga_map_boundary_examples() -> None:
|
||||
assert varga_map(0, 2, 3) == 8 # Aries third Drekkana = Sagittarius
|
||||
|
||||
|
||||
def test_rudramsa_d11_is_supported_by_native_varga_map() -> None:
|
||||
assert varga_map(0, 0, 11) == 0
|
||||
assert varga_map(0, 10, 11) == 10
|
||||
assert varga_map(1, 0, 11) == 9
|
||||
assert varga_map(1, 10, 11) == 7
|
||||
result = calc_varga(35.0, 11)
|
||||
assert result["sign"] == "Aquarius"
|
||||
assert 0 <= result["degree_in_sign"] < 30
|
||||
|
||||
|
||||
def test_default_varga_batch_includes_d11() -> None:
|
||||
charts = calc_all_vargas({"Moon": 35.0}, 10.0)
|
||||
assert "D11_Rudramsa" in charts
|
||||
assert charts["D11_Rudramsa"]["Moon"]["sign"] == "Aquarius"
|
||||
|
||||
|
||||
def test_navamsa_matches_user_jhora_pdf_reference_chart() -> None:
|
||||
"""Regression from private_chart_reference.pdf: JHora-style D9 table for public sample birth datetime San Francisco."""
|
||||
expected = {
|
||||
|
||||
Reference in New Issue
Block a user