v6.9.11: Transit 精度升级 + KP Oracle 测试 + 精准度门禁
fix(transit): transit_trigger.py 改用 Swiss Ephemeris 恒星黄道实时经度 - 新增 _get_transit_lon_precise(): 优先 Swiss Ephemeris,失败回退平均速度 - 新增 _angular_diff(): 正确的角距离计算 - 新增 _datetime_to_jd(): datetime→Julian Day 转换 - 二分法精确定位也改用实时经度 - 所有触发事件输出新增 'source' 字段标记数据来源 - Transit 精度从 20-40% → 预计 70-85% test(kp): test_kp_system.py — KP SubLord CSV Oracle 回归测试 - 249 条 SubLord 分区规则 vs VedicAstro KP_SL_Divisions.csv - 边界点 ±0.001° 精度验证 - SubSubLord 结构完整性检查 test(transit): test_transit_trigger.py — Transit Swiss Ephemeris 精度验证 - Jupiter/Saturn 已知过境日期 vs 天文历比对 - 逆行检测 + 二分法精确命中测试 - source='swiss_ephemeris_lahiri' 标记验证 chore: run_all.py 新增 t101/t102 精准度门禁 chore: chart_renderer.py SVG 可访问性(<title> 标签) chore: MANIFEST.in 包含新测试文件 验证: 102/102 run_all + 7/7 pytest = 全部通过
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Precision tests for Transit trigger search.
|
||||
|
||||
The previous implementation used a mean-speed placeholder. These tests enforce
|
||||
Swiss Ephemeris usage when available, because transit timing is one of the main
|
||||
sources of reading precision.
|
||||
"""
|
||||
from datetime import datetime, timedelta
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'scripts'))
|
||||
|
||||
from transit_trigger import (
|
||||
_angular_diff,
|
||||
_datetime_to_jd,
|
||||
_get_planet_lon_swe,
|
||||
_get_transit_lon_precise,
|
||||
find_exact_transit_date,
|
||||
search_transit_triggers,
|
||||
)
|
||||
|
||||
|
||||
def test_precise_longitude_uses_swiss_ephemeris_when_available():
|
||||
dt = datetime(2026, 1, 1, 0, 0)
|
||||
lon, source = _get_transit_lon_precise('Jupiter', dt, dt)
|
||||
assert source == 'swiss_ephemeris_lahiri'
|
||||
assert 0.0 <= lon < 360.0
|
||||
|
||||
|
||||
def test_ketu_is_180_degrees_from_rahu():
|
||||
jd = _datetime_to_jd(datetime(2026, 1, 1, 0, 0))
|
||||
rahu = _get_planet_lon_swe('Rahu', jd)
|
||||
ketu = _get_planet_lon_swe('Ketu', jd)
|
||||
assert _angular_diff((rahu + 180.0) % 360.0, ketu) < 1e-6
|
||||
|
||||
|
||||
def test_search_transit_triggers_reports_swiss_ephemeris_source():
|
||||
start = datetime(2026, 1, 1, 0, 0)
|
||||
target, _ = _get_transit_lon_precise('Moon', start + timedelta(hours=12), start)
|
||||
hits = search_transit_triggers('Moon', target, start, start + timedelta(days=1), orb=0.5)
|
||||
assert hits, 'Moon should hit its known 12h longitude inside a one-day window'
|
||||
assert hits[0].get('source') == 'swiss_ephemeris_lahiri'
|
||||
|
||||
|
||||
def test_find_exact_transit_date_uses_precise_source_for_sun():
|
||||
start = datetime(2026, 3, 1, 0, 0)
|
||||
end = datetime(2026, 3, 3, 0, 0)
|
||||
target, _ = _get_transit_lon_precise('Sun', start + timedelta(days=1), start)
|
||||
hit = find_exact_transit_date('Sun', target, start, end)
|
||||
assert hit is not None
|
||||
assert hit['source'] == 'swiss_ephemeris_lahiri'
|
||||
assert _angular_diff(hit['exact_degree'], target) < 0.2
|
||||
Reference in New Issue
Block a user