Files
Jyotisha/tests/test_yogini_seed_profile.py
T

60 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from datetime import datetime, timedelta
import pytest
from scripts.yogini_dasha import YOGINI_SEQUENCE, calculate_yogini_dasha
def test_yogini_classical_sequence_and_balance():
# Goel Classical chapter Table I: lord and years, not the older Maya/Jaya/Rati list.
assert [(row['name'], row['planet'], row['years']) for row in YOGINI_SEQUENCE] == [
('Mangala', 'Moon', 1),
('Pingala', 'Sun', 2),
('Dhanya', 'Jupiter', 3),
('Bhramari', 'Mars', 4),
('Bhadrika', 'Mercury', 5),
('Ulka', 'Saturn', 6),
('Siddha', 'Venus', 7),
('Sankata', 'Rahu', 8),
]
birth = datetime(2000, 1, 1, 12)
# Mid-Pushya (eighth nakshatra): remainder 3 is Dhanya, half of 3 years left.
result = calculate_yogini_dasha({
'birth_datetime': birth,
'moon_longitude': 100.0,
'as_of': '2000-01-02',
'dasha_year_days': 360,
})
assert result['starting_planet'] == 'Jupiter'
assert result['starting_yogini'] == 'Dhanya'
assert result['birth_balance_years'] == pytest.approx(1.5)
assert datetime.fromisoformat(result['major'][0]['end_date']) == birth + timedelta(days=540)
assert result['major'][0]['years'] == pytest.approx(1.5)
assert result['current']['planet'] == 'Jupiter'
assert result['major'][1]['planet'] == 'Mars'
assert all(a['end_date'] == b['start_date'] for a, b in zip(result['major'], result['major'][1:]))
def test_yogini_no_invented_lagna_fallback_or_missing_balance():
# 原值: lagna-only input started at Maya via legacy_lagna_rashi_compatibility
# 新值: status blocked,major 为空
# 原因: BUG-1262,没有月亮黄经就不能编一段从出生起算的满周期
result = calculate_yogini_dasha({
'lagna_rashi_index': 0,
'moon_nakshatra_index': 0,
'birth_datetime': datetime(2000, 1, 1),
})
assert result['status'] == 'blocked'
assert result['major'] == []
def test_yogini_explicit_reference_controls_current_cycle():
args = {'birth_datetime': '2000-01-01', 'moon_longitude': 0.0, 'dasha_year_days': 360}
first = calculate_yogini_dasha(dict(args, as_of='2000-01-02'))
later = calculate_yogini_dasha(dict(args, as_of='2040-01-01'))
assert first['current']['cycle_number'] == 1
assert later['current']['cycle_number'] == 2
# Ashwini start: (0 + 3) % 8 is Bhramari / Mars, and the balance is the whole period.
assert first['starting_planet'] == 'Mars'
assert first['birth_balance_years'] == pytest.approx(4.0)