File size: 5,192 Bytes
7becc06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
"""
tests/test_baseline_comparator.py
Unit tests for the Comprehensive Baseline Comparison Engine.
"""

import pytest
import os
import json
import tempfile
from pathlib import Path

import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from src.baseline_comparator import (
    ProvenanceTag,
    MetricDirection,
    MetricSpec,
    METRIC_CATALOG,
    BaselineEvaluationRecord,
    BaselineComparator,
)


def test_metric_catalog_integrity():
    assert len(METRIC_CATALOG) >= 17
    assert "parameters_total_m" in METRIC_CATALOG
    assert "tpot_ms" in METRIC_CATALOG
    assert "tokens_per_sec" in METRIC_CATALOG
    assert "cosine_fidelity" in METRIC_CATALOG
    assert "cost_per_million_tokens_usd" in METRIC_CATALOG

    # Verify every metric has valid direction and provenance
    for key, spec in METRIC_CATALOG.items():
        assert isinstance(spec.direction, MetricDirection)
        assert isinstance(spec.default_provenance, ProvenanceTag)
        assert len(spec.display_name) > 0
        assert len(spec.unit) > 0


def test_compute_percentage_improvement():
    # Lower is better: reduction is an improvement (+)
    # Latency 10ms -> 5ms: +50%
    res = BaselineComparator.compute_percentage_improvement(10.0, 5.0, MetricDirection.LOWER_IS_BETTER)
    assert res == pytest.approx(50.0)

    # Latency 10ms -> 15ms: -50%
    res = BaselineComparator.compute_percentage_improvement(10.0, 15.0, MetricDirection.LOWER_IS_BETTER)
    assert res == pytest.approx(-50.0)

    # Higher is better: increase is an improvement (+)
    # Tokens/sec 100 -> 150: +50%
    res = BaselineComparator.compute_percentage_improvement(100.0, 150.0, MetricDirection.HIGHER_IS_BETTER)
    assert res == pytest.approx(50.0)

    # Tokens/sec 100 -> 50: -50%
    res = BaselineComparator.compute_percentage_improvement(100.0, 50.0, MetricDirection.HIGHER_IS_BETTER)
    assert res == pytest.approx(-50.0)

    # Missing values return None
    assert BaselineComparator.compute_percentage_improvement(None, 10.0, MetricDirection.LOWER_IS_BETTER) is None
    assert BaselineComparator.compute_percentage_improvement(10.0, None, MetricDirection.HIGHER_IS_BETTER) is None
    assert BaselineComparator.compute_percentage_improvement(0.0, 10.0, MetricDirection.LOWER_IS_BETTER) is None


def test_comparator_matrix_and_formatting():
    rec_dense = BaselineEvaluationRecord(
        model_id="dense",
        display_name="Dense Baseline (FP32)",
        category="dense",
        metrics={
            "parameters_total_m": 0.237,
            "tpot_ms": 2.50,
            "tokens_per_sec": 400.0,
            "peak_ram_mb": 0.94,
            "cosine_fidelity": 1.000,
        },
    )

    rec_qtf = BaselineEvaluationRecord(
        model_id="qtf_edge",
        display_name="Q-TensorFormer (Edge-SLA)",
        category="adaptive_tt",
        metrics={
            "parameters_total_m": 0.112,
            "tpot_ms": 2.78,
            "tokens_per_sec": 359.7,
            "peak_ram_mb": 0.44,
            "cosine_fidelity": 0.948,
        },
    )

    comparator = BaselineComparator([rec_dense, rec_qtf])
    matrix = comparator.compute_improvement_matrix(
        target_model_id="qtf_edge",
        baseline_model_ids=["dense"],
        metric_keys=["peak_ram_mb", "tpot_ms", "tokens_per_sec"],
    )

    # RAM: 0.94 -> 0.44 => (0.94 - 0.44)/0.94 * 100 = +53.19%
    assert matrix["dense"]["peak_ram_mb"] == pytest.approx(53.19, abs=0.1)

    # TPOT: 2.50 -> 2.78 => (2.50 - 2.78)/2.50 * 100 = -11.2%
    assert matrix["dense"]["tpot_ms"] == pytest.approx(-11.2, abs=0.1)

    # Table generation
    md_table = comparator.to_markdown_table(metric_keys=["peak_ram_mb", "tpot_ms"])
    assert "| **Dense Baseline (FP32)** |" in md_table
    assert "| **Q-TensorFormer (Edge-SLA)** |" in md_table

    # Percentage matrix markdown
    pct_md = comparator.to_percentage_matrix_markdown(
        target_model_id="qtf_edge",
        baseline_model_ids=["dense"],
        metric_keys=["peak_ram_mb", "tpot_ms"],
    )
    assert "Relative % Improvement: Q-TensorFormer (Edge-SLA) vs Baselines" in pct_md
    assert "**+53.2%**" in pct_md or "+53.2%" in pct_md


def test_regime_analyzer():
    comparator = BaselineComparator()
    regimes = comparator.identify_regimes()
    assert "best_case_regimes" in regimes
    assert "worst_case_regimes" in regimes
    assert len(regimes["best_case_regimes"]) >= 3
    assert len(regimes["worst_case_regimes"]) >= 3


def test_json_and_csv_export(tmp_path):
    rec = BaselineEvaluationRecord(
        model_id="dense",
        display_name="Dense Baseline",
        category="dense",
        metrics={"parameters_total_m": 0.237, "tpot_ms": 2.50},
    )
    comparator = BaselineComparator([rec])

    json_path = tmp_path / "baseline_out.json"
    csv_path = tmp_path / "baseline_out.csv"

    comparator.to_json(json_path)
    comparator.to_csv(csv_path)

    assert json_path.exists()
    assert csv_path.exists()

    with open(json_path, "r") as f:
        data = json.load(f)
        assert data["metadata"]["system"] == "Q-TensorFormer Baseline Comparison System"
        assert len(data["models"]) == 1