File size: 837 Bytes
bc5030f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

from dataclasses import dataclass, field
from typing import Dict, Iterable, List, Tuple


@dataclass(frozen=True)
class Metric:
    """Single scalar metric value (placeholder)."""

    name: str
    value: float


@dataclass
class MetricLogger:
    """Tiny metric logger stub."""

    _history: Dict[str, List[float]] = field(default_factory=dict)

    def log(self, metric: Metric) -> None:
        self._history.setdefault(metric.name, []).append(metric.value)

    def latest(self) -> Dict[str, float]:
        return {k: v[-1] for k, v in self._history.items() if v}

    def as_series(self) -> Dict[str, Tuple[float, ...]]:
        return {k: tuple(v) for k, v in self._history.items()}

    def extend(self, metrics: Iterable[Metric]) -> None:
        for m in metrics:
            self.log(m)