"""Tests for Markov-chain trading model."""

from __future__ import annotations

import numpy as np

from RenTech.strategy_stack.markov_chain_trading import (
    MarkovChainTradingModel,
    build_transition_matrix,
    calibrate_probability,
    discretize_states,
    kelly_fraction_yes,
    monte_carlo_probability,
)


def test_transition_matrix_rows_sum_to_one() -> None:
    states = discretize_states(np.linspace(0.1, 0.9, 50), 10)
    T = build_transition_matrix(states, 10)
    assert T.shape == (10, 10)
    np.testing.assert_allclose(T.sum(axis=1), 1.0, rtol=1e-9)


def test_monte_carlo_runs() -> None:
    rng = np.random.default_rng(0)
    states = discretize_states(rng.random(200), 10)
    T = build_transition_matrix(states, 10)
    p = monte_carlo_probability(T, 5, horizon=10, n_sims=2000, rng=rng)
    assert 0.0 <= p <= 1.0


def test_calibration_interpolates() -> None:
    assert calibrate_probability(0.10) == 0.087
    mid = calibrate_probability(0.15)
    assert 0.087 < mid < 0.181


def test_kelly_zero_without_edge() -> None:
    assert kelly_fraction_yes(0.45, 0.50) == 0.0


def test_analyze_pass_on_short_history() -> None:
    m = MarkovChainTradingModel(n_sims=100, rng_seed=1)
    sig = m.analyze(np.array([0.4, 0.5]), 0.45)
    assert sig.decision == "PASS"
