(output_dir: Path, rows: List[Dict[str, Any]], episode_rows: List[Dict[str, Any]])
| 581 | |
| 582 | |
| 583 | def write_evaluation(output_dir: Path, rows: List[Dict[str, Any]], episode_rows: List[Dict[str, Any]]) -> Dict[str, Any]: |
| 584 | grouped = group_by_episode(rows) |
| 585 | episode_metrics = { |
| 586 | episode_id: eval_metrics.evaluate_episode(episode_group, [5, 10, 20]) |
| 587 | for episode_id, episode_group in grouped.items() |
| 588 | if episode_id |
| 589 | } |
| 590 | summary = eval_metrics.aggregate_metrics(episode_metrics, [5, 10, 20]) |
| 591 | dataset_summary = eval_metrics.build_dataset_summary(rows, episode_rows) |
| 592 | result = { |
| 593 | "summary": summary, |
| 594 | "dataset_summary": dataset_summary, |
| 595 | "episodes": episode_metrics, |
| 596 | } |
| 597 | (output_dir / "evaluation_metrics.json").write_text( |
| 598 | json.dumps(result, ensure_ascii=False, indent=2), |
| 599 | encoding="utf-8", |
| 600 | ) |
| 601 | (output_dir / "dataset_summary.json").write_text( |
| 602 | json.dumps(dataset_summary, ensure_ascii=False, indent=2), |
| 603 | encoding="utf-8", |
| 604 | ) |
| 605 | (output_dir / "dataset_summary.md").write_text( |
| 606 | eval_metrics.build_dataset_summary_markdown(dataset_summary), |
| 607 | encoding="utf-8", |
| 608 | ) |
| 609 | (output_dir / "main_experiment_table_top20.md").write_text( |
| 610 | eval_metrics.build_main_experiment_table(summary, METHOD_NAME), |
| 611 | encoding="utf-8", |
| 612 | ) |
| 613 | (output_dir / "case_metrics_table_top20.md").write_text( |
| 614 | eval_metrics.build_case_metrics_table(summary, METHOD_NAME), |
| 615 | encoding="utf-8", |
| 616 | ) |
| 617 | return result |
| 618 | |
| 619 | |
| 620 | def run_baseline( |
no test coverage detected