mirror of
https://github.com/saymrwulf/QuantumLearning.git
synced 2026-05-14 20:58:00 +00:00
90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
|
|
from quantum_learning.assessment import (
|
||
|
|
evaluate_evidence_checklist,
|
||
|
|
evaluate_feedback_loop,
|
||
|
|
load_assessment_blueprint,
|
||
|
|
score_named_rubric,
|
||
|
|
)
|
||
|
|
from quantum_learning.config import project_root
|
||
|
|
|
||
|
|
|
||
|
|
def test_assessment_blueprint_loads_capstone_rubric():
|
||
|
|
blueprint = load_assessment_blueprint()
|
||
|
|
|
||
|
|
assert blueprint.title == "QuantumLearning Assessment Blueprint"
|
||
|
|
assert len(blueprint.rubrics) >= 2
|
||
|
|
assert blueprint.get_rubric("capstone_design_review").required_evidence
|
||
|
|
|
||
|
|
|
||
|
|
def test_module_self_review_rubric_distinguishes_strong_and_weak_work():
|
||
|
|
strong = score_named_rubric(
|
||
|
|
"module_self_review",
|
||
|
|
{
|
||
|
|
"claim": 4,
|
||
|
|
"evidence": 4,
|
||
|
|
"risk": 3,
|
||
|
|
"revision": 4,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
weak = score_named_rubric(
|
||
|
|
"module_self_review",
|
||
|
|
{
|
||
|
|
"claim": 1,
|
||
|
|
"evidence": 1,
|
||
|
|
"risk": 0,
|
||
|
|
"revision": 1,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
|
||
|
|
assert strong.passed
|
||
|
|
assert strong.band in {"competent", "mastery-ready"}
|
||
|
|
assert not weak.passed
|
||
|
|
assert weak.band == "revision-needed"
|
||
|
|
|
||
|
|
|
||
|
|
def test_feedback_loop_flags_missing_sections():
|
||
|
|
report = evaluate_feedback_loop(
|
||
|
|
{
|
||
|
|
"claim": "The compiled candidate is better on this topology.",
|
||
|
|
"evidence": "",
|
||
|
|
"risk": "The noise model is still local and synthetic.",
|
||
|
|
"next_step": "",
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
assert not report.ready_for_review
|
||
|
|
assert report.missing_sections == ("Evidence", "Next Step")
|
||
|
|
|
||
|
|
|
||
|
|
def test_evidence_checklist_requires_all_items():
|
||
|
|
report = evaluate_evidence_checklist(
|
||
|
|
["Brief", "Evidence", "Risk"],
|
||
|
|
{"Brief": True, "Evidence": False, "Risk": True},
|
||
|
|
)
|
||
|
|
|
||
|
|
assert not report.ready_for_review
|
||
|
|
assert report.missing_items == ("Evidence",)
|
||
|
|
|
||
|
|
|
||
|
|
def test_capstone_notebooks_reference_rubric_and_feedback_widgets():
|
||
|
|
capstone_dir = project_root() / "notebooks" / "professional" / "module_04_capstone_design_review"
|
||
|
|
lecture = (capstone_dir / "lecture.ipynb").read_text()
|
||
|
|
studio = (capstone_dir / "studio.ipynb").read_text()
|
||
|
|
|
||
|
|
assert "capstone_design_review" in studio
|
||
|
|
assert "feedback_iteration_panel(" in lecture
|
||
|
|
assert "evidence_checklist(" in studio
|
||
|
|
|
||
|
|
|
||
|
|
def test_capstone_rubric_maps_to_intended_competence_dimensions():
|
||
|
|
rubric = load_assessment_blueprint().get_rubric("capstone_design_review")
|
||
|
|
|
||
|
|
assert [criterion.identifier for criterion in rubric.criteria] == [
|
||
|
|
"brief",
|
||
|
|
"candidates",
|
||
|
|
"ideal",
|
||
|
|
"hardware",
|
||
|
|
"noise",
|
||
|
|
"recommendation",
|
||
|
|
"risk",
|
||
|
|
]
|