104 lines
3.5 KiB
Python
104 lines
3.5 KiB
Python
from pathlib import Path
|
|
import json
|
|
|
|
from didactopus.notebook_augmentation_experiment import compare_notebook_packs, write_notebook_comparison_report
|
|
|
|
|
|
def _write_pack(
|
|
root: Path,
|
|
*,
|
|
claim_count: int,
|
|
source_role_summary: dict,
|
|
distinction_count: int,
|
|
supporting_observation_count: int,
|
|
related_concept_count: int,
|
|
) -> None:
|
|
root.mkdir(parents=True, exist_ok=True)
|
|
(root / "pack.yaml").write_text(
|
|
"name: demo-pack\ndisplay_name: Demo Pack\ndescription: Demo\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "concepts.yaml").write_text(
|
|
"concepts:\n - id: thermo\n title: Thermodynamics and Entropy\n prerequisites: []\n",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "groundrecall_query_bundle.json").write_text(
|
|
json.dumps(
|
|
{
|
|
"bundle_kind": "groundrecall_query_bundle",
|
|
"concept": {"concept_id": "concept::thermo", "title": "Thermodynamics and Entropy"},
|
|
"relevant_claims": [{"claim_id": f"c{i+1}"} for i in range(claim_count)],
|
|
"source_role_summary": source_role_summary,
|
|
"key_distinctions": [{"distinction_type": "contrast"} for _ in range(distinction_count)],
|
|
}
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
(root / "notebook_page.json").write_text(
|
|
json.dumps(
|
|
{
|
|
"concept": {"concept_id": "concept::thermo", "title": "Thermodynamics and Entropy"},
|
|
"summary": {
|
|
"supporting_observation_count": supporting_observation_count,
|
|
"related_concept_count": related_concept_count,
|
|
},
|
|
"source_role_summary": source_role_summary,
|
|
"distinctions": [{"distinction_type": "contrast"} for _ in range(distinction_count)],
|
|
}
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
|
|
|
|
def test_compare_notebook_packs_reports_deltas(tmp_path: Path) -> None:
|
|
baseline = tmp_path / "baseline"
|
|
augmented = tmp_path / "augmented"
|
|
_write_pack(
|
|
baseline,
|
|
claim_count=3,
|
|
source_role_summary={"overview": 1},
|
|
distinction_count=0,
|
|
supporting_observation_count=3,
|
|
related_concept_count=2,
|
|
)
|
|
_write_pack(
|
|
augmented,
|
|
claim_count=7,
|
|
source_role_summary={"overview": 3, "nuance": 4},
|
|
distinction_count=5,
|
|
supporting_observation_count=7,
|
|
related_concept_count=2,
|
|
)
|
|
|
|
comparison = compare_notebook_packs(baseline, augmented)
|
|
assert comparison["delta"]["claimCount"] == 4
|
|
assert comparison["delta"]["distinctionCount"] == 5
|
|
assert comparison["delta"]["sourceRoleKeys"] == ["nuance"]
|
|
|
|
|
|
def test_write_notebook_comparison_report_emits_files(tmp_path: Path) -> None:
|
|
baseline = tmp_path / "baseline"
|
|
augmented = tmp_path / "augmented"
|
|
outdir = tmp_path / "report"
|
|
_write_pack(
|
|
baseline,
|
|
claim_count=1,
|
|
source_role_summary={"overview": 1},
|
|
distinction_count=0,
|
|
supporting_observation_count=1,
|
|
related_concept_count=1,
|
|
)
|
|
_write_pack(
|
|
augmented,
|
|
claim_count=2,
|
|
source_role_summary={"overview": 1, "nuance": 1},
|
|
distinction_count=1,
|
|
supporting_observation_count=2,
|
|
related_concept_count=1,
|
|
)
|
|
|
|
write_notebook_comparison_report(baseline, augmented, outdir, title="Demo")
|
|
assert (outdir / "comparison.json").exists()
|
|
assert (outdir / "comparison.md").exists()
|
|
assert (outdir / "frontend_pack_with_notebook.json").exists()
|