diff --git a/scripts/jyotish_engine.py b/scripts/jyotish_engine.py index 857ad5dc..378558ed 100644 --- a/scripts/jyotish_engine.py +++ b/scripts/jyotish_engine.py @@ -502,6 +502,37 @@ def output_table(command, data): ) print(tabulate(rows, headers=['Kuta', 'Score'], tablefmt='github')) return + if command == 'ashtakavarga': + sav = data.get('sav', {}) if isinstance(data, dict) else {} + assessment = sav.get('assessment', []) if isinstance(sav, dict) else [] + bav_validation = data.get('bav_validation', []) if isinstance(data, dict) else [] + sign_rows = [] + for item in assessment: + sign_rows.append([ + item.get('sign', ''), + item.get('score', ''), + item.get('level', ''), + ]) + validation_rows = [] + for item in bav_validation: + validation_rows.append([ + item.get('planet', ''), + item.get('actual', ''), + item.get('expected', ''), + item.get('status', ''), + ]) + print(f"Ashtakavarga Method: {data.get('method', '')}") + print( + f"SAV Total: {sav.get('total', '')}/{sav.get('expected_total', '')} | " + f"Valid: {sav.get('valid', '')} | " + f"Strongest Signs: {', '.join(data.get('strongest_signs', []))}" + ) + print(tabulate(sign_rows, headers=['Sign', 'Score', 'Level'], tablefmt='github')) + if validation_rows: + print() + print("BAV Validation:") + print(tabulate(validation_rows, headers=['Planet', 'Actual', 'Expected', 'Status'], tablefmt='github')) + return output_json(data) @@ -4589,6 +4620,7 @@ def main(): # 10. ashtakavarga (v3.4新增) p = sub.add_parser('ashtakavarga', help='Ashtakavarga八分法计算') _add_chart_args(p) + p.add_argument('--table', action='store_true', help='以 ASCII 表格输出 SAV 总表与 BAV 校验') # 10b. kp (v6.9.10新增) p = sub.add_parser('kp', help='KP Krishnamurti Paddhati 完整分析(Sublord+SubSub+ABCD Significator)') diff --git a/tests/test_cli_smoke.py b/tests/test_cli_smoke.py index 0b1d66ed..d9c5fbc0 100644 --- a/tests/test_cli_smoke.py +++ b/tests/test_cli_smoke.py @@ -292,6 +292,19 @@ def test_ashtakavarga_cli_keeps_sav_invariant() -> None: assert result["all_bav_valid"] is True +def test_ashtakavarga_table_mode_prints_readable_ascii_table() -> None: + output = run_engine_text("ashtakavarga", *BASE_BIRTH_ARGS, "--table") + + assert "Ashtakavarga Method" in output + assert "SAV Total" in output + assert "Strongest Signs" in output + assert "Sign" in output + assert "Score" in output + assert "Level" in output + assert "Sagittarius" in output + assert "Aquarius" in output + + def test_audit_capabilities_cli_validates_registry() -> None: result = run_engine("audit-capabilities", "--mode", "validate") assert result.get("valid") is True