From c5404ec7fba1273946e1f90c8b9aa3b289cd3657 Mon Sep 17 00:00:00 2001 From: 732642856 <732642856@qq.com> Date: Tue, 14 Jul 2026 11:58:26 +0800 Subject: [PATCH] preserve honest tajika strength boundaries --- scripts/jyotish_engine.py | 2 +- scripts/tajika.py | 34 ++++++++++++++++++++++- tests/test_full_reading_saham_contract.py | 8 ++++++ tests/test_tajika.py | 3 +- 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 tests/test_full_reading_saham_contract.py diff --git a/scripts/jyotish_engine.py b/scripts/jyotish_engine.py index 930dda90..690b90cf 100644 --- a/scripts/jyotish_engine.py +++ b/scripts/jyotish_engine.py @@ -5098,7 +5098,7 @@ def cmd_full_reading(args): report['modules']['tajika_yogas'] = tc_yogas # Sahams(特殊点)—— 需要出生时间 - birth_dt = getattr(args, 'birth_datetime', None) + birth_dt = _birth_datetime_from_args(args) if birth_dt and planet_lons: sahams_result = calc_all_sahams( planet_lons, diff --git a/scripts/tajika.py b/scripts/tajika.py index 14d8b800..fb767deb 100644 --- a/scripts/tajika.py +++ b/scripts/tajika.py @@ -256,12 +256,44 @@ def calc_tajika_strength_layers( year_lord: Optional[str] = None, ) -> Dict: """Block the legacy private-Varga strength proxy pending parity evidence.""" + normalized = { + planet: float(planet_lons[planet]) % 360 + for planet in CLASSICAL_PLANETS + if planet in planet_lons and _is_number(planet_lons[planet]) + } + harsha_bala = { + planet: _calc_harsha_bala_for_planet(planet, lon, asc_lon, year_lord) + for planet, lon in normalized.items() + } + panchavargiya_bala = { + planet: { + 'status': 'blocked', + 'reason': 'unified_varga_core_and_golden_oracle_parity_required', + } + for planet in normalized + } return { 'status': 'blocked', 'method': 'Tajika Harsha/Panchavargiya Bala', 'reason': 'panchavargiya_requires_unified_varga_core_and_golden_oracle_parity', 'blocked_layers': ['Panchavargiya Bala', 'combined Tajika strength'], - 'available_planets': len(planet_lons or {}), + 'available_planets': len(normalized), + 'harsha_bala': harsha_bala, + 'panchavargiya_bala': panchavargiya_bala, + 'combined_strength': { + planet: { + 'status': 'blocked', + 'reason': 'panchavargiya_component_unverified', + 'score': harsha_bala[planet]['score'], + 'max_score': harsha_bala[planet]['max_score'], + 'grade': 'blocked', + 'components': {'harsha_bala': harsha_bala[planet]['score']}, + } + for planet in normalized + }, + 'summary': { + 'next_action': 'Import unified varga-full output and external golden-oracle evidence before rendering Tajika strength.', + }, } # Legacy local Varga proxy retained below only for source history. diff --git a/tests/test_full_reading_saham_contract.py b/tests/test_full_reading_saham_contract.py new file mode 100644 index 00000000..f771cfa3 --- /dev/null +++ b/tests/test_full_reading_saham_contract.py @@ -0,0 +1,8 @@ +from pathlib import Path + + +def test_full_reading_derives_saham_datetime_from_standard_chart_args() -> None: + source = (Path(__file__).resolve().parents[1] / "scripts" / "jyotish_engine.py").read_text(encoding="utf-8") + section = source[source.index("# ── Step 4.8: Tajika Yogas + Sahams"):source.index("# ── Step 4.9:")] + assert "birth_dt = _birth_datetime_from_args(args)" in section + assert "getattr(args, 'birth_datetime'" not in section diff --git a/tests/test_tajika.py b/tests/test_tajika.py index 930b0dfa..601e2174 100644 --- a/tests/test_tajika.py +++ b/tests/test_tajika.py @@ -130,7 +130,8 @@ class TestTajikaStrengthLayers: for planet in ('Sun', 'Moon', 'Mars', 'Mercury', 'Jupiter', 'Venus', 'Saturn'): assert planet in result['harsha_bala'] assert planet in result['panchavargiya_bala'] - assert {'score', 'max_score', 'grade', 'components'} <= set(result['combined_strength'][planet]) + assert result['panchavargiya_bala'][planet]['status'] == 'blocked' + assert result['combined_strength'][planet]['status'] == 'blocked' assert result['combined_strength'][planet]['max_score'] > 0