Files
Jyotisha/tests/test_api_chart_shadbala_precise.py
T
ClaudeandClaude Opus 5.5 1c69c1b7e2 fix(chart): chart-page Shadbala takes the precise path readings use (BUG-1548)
The chart API called calc_shadbala without a context and so used the
simplified fallback, and it rewrote `degree` as the in-sign degree, which the
precise Dig bala reads as a longitude. Readings and reports took the precise
path, so the same chart showed different strengths and a different strongest
planet (Jobs: Moon 10.61 vs 6.61 Rupa). The endpoint now builds the same
context as cmd_shadbala and passes absolute longitudes; a test locks the two
equal per planet. Also records the astrologer's ruling on waning-Moon Paksha.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbBXoyeZrYn6ryNcSe5Y2Y
2026-11-04 12:33:23 +08:00

47 lines
1.8 KiB
Python

"""BUG-1548: the chart page's Shadbala is the same precise calculation as readings.
The chart API called calc_shadbala without a context and so took the
simplified fallback (no sunrise, house midpoints or declination), while
cmd_shadbala, the full reading and reports pass build_shadbala_context. On
Steve Jobs' chart the two disagreed by up to four Rupa and on the strongest
planet.
"""
from __future__ import annotations
import sys
from pathlib import Path
from types import SimpleNamespace
import pytest
ROOT = Path(__file__).resolve().parents[1]
for path in (ROOT / "scripts", ROOT / "tests"):
if str(path) not in sys.path:
sys.path.insert(0, str(path))
import jyotish_engine # noqa: E402
from test_api_server_security import _handler # noqa: E402
# Public Rodden AA chart (Astro-Databank): Steve Jobs, San Francisco.
BODY = {
"year": 1955, "month": 2, "day": 24, "hour": 19, "minute": 15, "second": 0,
"lat": 37.7749, "lon": -122.4194, "tz": -8, "ayanamsa": "raman", "node_mode": "mean",
"transit_date": "2026-09-27", "skip_vedastro_main_entry_overview": True,
}
def test_chart_page_shadbala_equals_the_precise_engine_calculation(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("JYOTISH_API_CHART_CACHE_TTL_SECONDS", "0")
monkeypatch.setenv("VEDASTRO_ENABLE_NETWORK", "0")
chart = _handler()._compute_chart(dict(BODY))
page = chart["shadbala"]
args = SimpleNamespace(
year=1955, month=2, day=24, hour=19, minute=15, second=0, lat=37.7749, lon=-122.4194,
tz=-8.0, ayanamsa="raman", node_mode="mean",
)
engine = jyotish_engine.cmd_shadbala(args)
assert set(page) == set(engine["planets"])
for planet, row in engine["planets"].items():
assert page[planet]["rupas"] == pytest.approx(round(row["total_rupas"], 2), abs=0.011), planet