"""Base Protocol and Domain Model for Machine Learning Estimators."""
from __future__ import annotations

from dataclasses import dataclass
from typing import Any, Protocol, Sequence


@dataclass
class ModelEvaluation:
    accuracy: float
    brier_score: float
    auc_roc: float
    log_loss: float
    calibration_bins: list[dict[str, float]]


class TradingModel(Protocol):
    """Protocol for quantitative trading classifiers."""

    def fit(self, X: Sequence[Sequence[float]], y: Sequence[int]) -> None:
        ...

    def predict_proba(self, X: Sequence[Sequence[float]]) -> Sequence[float]:
        ...

    def evaluate(self, X: Sequence[Sequence[float]], y: Sequence[int]) -> ModelEvaluation:
        ...
