fix: align combustion thresholds across engine (upstream 080c286c, adapted)

One direct / retrograde orb table (Moon included) in the shared
COMBUSTION_ORBS / is_combust, used by the full reading and the consultation
graha-drishti layer. TASK-upstream-sync5-20261002 U3.

(cherry picked from commit 080c286c, resolved onto our shared helper)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-02 23:40:15 +08:00
co-authored by Claude Opus 5.5
parent 765ff66ce5
commit cf78d4ca21
3 changed files with 38 additions and 11 deletions
+15 -6
View File
@@ -283,15 +283,24 @@ def test_obama_saturn_aspects_the_sun_and_mercury_is_combust() -> None:
assert drishti["planets"]["Mercury"]["combust"] is True
def test_combustion_rule_is_unchanged() -> None:
"""The full reading's orbs, moved into a named helper without change."""
def test_combustion_rule_follows_the_shared_orb_table() -> None:
"""Shared orbs for the full reading and the consultation layer.
原值: COMBUSTION_ORBS 只有顺行一档且不含月亮(水 12°、金 10°),月亮按 0° 只算精确合
新值: 顺行 / 逆行两档并含月亮(月 12/12、火 17/10、水 14/12、木 11/10、金 10/8、土 15/10)
原因: TASK-upstream-sync5-20261002 U3,上游 yinduzhanxing 080c286c 全引擎统一燃烧阈值
"""
engine = native._load_engine()
assert engine.COMBUSTION_ORBS == {"Mars": 17, "Mercury": 12, "Jupiter": 11, "Venus": 10, "Saturn": 15}
assert engine.is_combust("Mercury", 112.0, 100.0) is True
assert engine.is_combust("Mercury", 112.01, 100.0) is False
assert engine.COMBUSTION_ORBS["Mercury"] == {"direct": 14, "retrograde": 12}
assert engine.COMBUSTION_ORBS["Moon"] == {"direct": 12, "retrograde": 12}
assert engine.is_combust("Mercury", 114.0, 100.0) is True
assert engine.is_combust("Mercury", 114.01, 100.0) is False
assert engine.is_combust("Mercury", 113.0, 100.0, retrograde=True) is False
assert engine.is_combust("Venus", 355.0, 5.0) is True # across 0°
assert engine.is_combust("Venus", 351.0, 0.0, retrograde=True) is False
assert engine.is_combust("Sun", 100.0, 100.0) is False
assert engine.is_combust("Moon", 100.0, 100.0) is True # orb 0: only an exact conjunction
assert engine.is_combust("Moon", 111.0, 100.0) is True
assert engine.is_combust("Rahu", 100.0, 100.0) is False
def test_saturn_from_moon_house_is_whole_sign_from_the_natal_moon() -> None: