Files
Jyotisha/tests/test_active_rectification_questions.py
T
2026-09-03 23:49:42 +08:00

80 lines
3.9 KiB
Python

from __future__ import annotations
from scripts.active_rectification_questions import build_questionnaire, score_answers
def test_active_rectification_questions_generate_choice_based_workflow() -> None:
report = build_questionnaire("2001-02-03 10:20", uncertainty_minutes=30)
assert report["scope"] == "active_birth_time_rectification_questionnaire"
assert report["candidate_scan"]["start"] == "2001-02-03 09:50"
assert report["candidate_scan"]["end"] == "2001-02-03 10:50"
assert report["candidate_scan"]["candidate_count"] == 61
assert len(report["candidate_scan"]["samples"]) == 61
assert report["candidate_scan"]["sensitivity_summary"]["method"] == "minute_feature_scan_v2"
assert "high_information_question_generation" in report["workflow"]
assert {"D9", "D10", "D24", "D30", "UL", "A10", "KP_cusp"} <= set(report["sensitivity_layers"])
assert len(report["questions"]) >= 8
assert {q["round"] for q in report["questions"]} == {1, 2, 3}
assert all({option["key"] for option in q["options"]} == {"A", "B", "C", "D"} for q in report["questions"])
assert all("scoring_map" in q for q in report["questions"])
assert report["candidate_scan"]["samples"]
assert report["candidate_scan"]["sensitivity_summary"]
assert {"D9", "D10", "D24", "D30", "UL", "A10", "KP_cusp"} <= set(
report["candidate_scan"]["sensitivity_summary"]["high_value_layers"]
)
assert report["candidate_scan"]["samples"][0]["cluster"] == "early_candidate_cluster"
assert report["candidate_scan"]["samples"][-1]["cluster"] == "late_candidate_cluster"
assert report["selection"]["selected_questions"]
assert all("factual_reliability" in question for question in report["questions"])
assert all("positive_cluster" in question and "negative_cluster" in question for question in report["questions"])
def test_active_rectification_scores_answers_and_selects_next_round() -> None:
report = build_questionnaire("2001-02-03 10:20", uncertainty_minutes=30)
scored = score_answers(
report,
{
"education_environment_shift": "A",
"residence_relocation_shift": "B",
"relationship_or_partner_entry": "D",
"career_responsibility_pressure": "A",
"research_tool_expression_shift": "C",
},
)
assert scored["scope"] == "active_birth_time_rectification_scoring"
assert scored["answered_count"] == 5
assert scored["next_round"] == 2
assert scored["next_round_questions"]
assert scored["next_round_selection"]["selected_questions"]
assert scored["candidate_cluster_rankings"][0]["score"] > scored["candidate_cluster_rankings"][-1]["score"]
assert "does not convert candidates into birth-time truth" in scored["boundary"]
def test_active_rectification_recasts_candidate_vargas_when_location_is_available() -> None:
report = build_questionnaire(
"2001-02-03 10:20",
uncertainty_minutes=1,
lat=25.04,
lon=121.56,
tz=8,
)
summary = report["candidate_scan"]["sensitivity_summary"]
assert "true_varga_recast" in summary["computed_layers"]
assert "true_arudha_recast" in summary["computed_layers"]
assert "true_kp_cusp_recast" in summary["computed_layers"]
assert "true_varga_recast" not in summary["blocked_layers"]
assert "true_kp_cusp_recast" not in summary["blocked_layers"]
sample = report["candidate_scan"]["samples"][1]
assert sample["varga_lagna"]["D2_Hora"]["sign"]
assert sample["varga_lagna"]["D4_Turyamsa"]["sign"]
assert sample["varga_lagna"]["D11_Rudramsa"]["sign"]
assert sample["varga_lagna"]["D9_Navamsa"]["sign"]
assert sample["varga_lagna"]["D10_Dasamsa"]["sign"]
assert sample["arudha"]["A7"]["sign"]
assert sample["arudha"]["A10"]["sign"]
assert sample["arudha"]["UL"]["sign"]
assert sample["kp_cusps"]["house_7"]["sub_lord"]
assert sample["kp_cusps"]["house_10"]["sub_sub_lord"]