| from __future__ import annotations | |
| from pathlib import Path | |
| from dovla_cil.experiments.scaling import ( | |
| ScalingExperiment, | |
| parse_k_values, | |
| read_scaling_csv, | |
| run_scaling_experiment, | |
| ) | |
| from dovla_cil.utils.io import read_json | |
| def test_parse_k_values() -> None: | |
| assert parse_k_values("1,2,4") == (1, 2, 4) | |
| def test_tiny_scaling_run_writes_csv_and_plots(tmp_path: Path) -> None: | |
| summary = run_scaling_experiment( | |
| ScalingExperiment( | |
| backend="toy", | |
| tasks="builtins", | |
| output_dir=tmp_path, | |
| total_records=4, | |
| k_values=(1, 2), | |
| epochs=1, | |
| seed=0, | |
| shard_size=8, | |
| batch_groups=2, | |
| records_per_group=2, | |
| hidden_dim=32, | |
| eval_num_tasks=2, | |
| device="auto", | |
| ) | |
| ) | |
| rows = read_scaling_csv(tmp_path / "scaling_results.csv") | |
| regression = read_json(tmp_path / "scaling_regression.json") | |
| assert len(rows) == 2 | |
| assert [row["k"] for row in rows] == ["1", "2"] | |
| assert Path(summary["aggregate_csv"]).exists() | |
| assert "ranking_acc" in regression | |
| for filename in ( | |
| "success_rate_vs_k.png", | |
| "ranking_acc_vs_k.png", | |
| "instruction_switch_acc_vs_k.png", | |
| "effect_mae_vs_k.png", | |
| "regret_ece_vs_k.png", | |
| ): | |
| assert (tmp_path / filename).exists() | |
| assert (tmp_path / filename).stat().st_size > 0 | |
| assert (tmp_path / "k_0001" / "metrics.json").exists() | |
| assert (tmp_path / "k_0002" / "metrics.json").exists() | |