| from __future__ import annotations |
|
|
| import importlib.util |
| from pathlib import Path |
| import unittest |
|
|
|
|
| SCRIPT = Path(__file__).resolve().parents[1] / "scripts" / "analyze_confirmatory.py" |
| SPEC = importlib.util.spec_from_file_location("confirmatory_analysis", SCRIPT) |
| assert SPEC is not None and SPEC.loader is not None |
| analysis = importlib.util.module_from_spec(SPEC) |
| SPEC.loader.exec_module(analysis) |
|
|
|
|
| class ConfirmatoryAnalysisTests(unittest.TestCase): |
| def test_exact_sign_flip(self) -> None: |
| self.assertEqual(analysis.exact_sign_flip([0.0, 0.0]), 1.0) |
| self.assertEqual(analysis.exact_sign_flip([1.0, 1.0, 1.0]), 0.25) |
|
|
| def test_holm_is_monotone_in_sorted_order(self) -> None: |
| rows = [ |
| {"p_exact_two_sided": 0.03}, |
| {"p_exact_two_sided": 0.001}, |
| {"p_exact_two_sided": 0.04}, |
| ] |
| analysis.holm(rows) |
| ordered = sorted(rows, key=lambda row: row["p_exact_two_sided"]) |
| self.assertEqual([row["p_holm"] for row in ordered], [0.003, 0.06, 0.06]) |
|
|
| def test_iterative_usage_is_summed(self) -> None: |
| usage = { |
| "first": { |
| "prompt_tokens": 10, |
| "completion_tokens": 3, |
| "total_tokens": 13, |
| "completion_tokens_details": {"reasoning_tokens": 2}, |
| }, |
| "second": { |
| "prompt_tokens": 20, |
| "completion_tokens": 5, |
| "total_tokens": 25, |
| "completion_tokens_details": {"reasoning_tokens": 4}, |
| }, |
| } |
| self.assertEqual( |
| analysis.usage_totals(usage), |
| {"prompt_tokens": 30, "completion_tokens": 8, "total_tokens": 38, "reasoning_tokens": 6}, |
| ) |
|
|