"""Tests for Part XIV: differential model and stability checks.""" import numpy as np from fqbm.state import FQBMState from fqbm.system.differential_model import ( solve_trajectory, check_stability, DifferentialParams, ) def test_solve_trajectory(): x0 = FQBMState(B=100, R=50, Loans=500, Deposits=600, E_b=50, S=1.0) params = DifferentialParams(monetary_shock=1.0, credit_cycle=0.01) t, X = solve_trajectory(x0, (0, 1), params, t_eval=np.linspace(0, 1, 11)) assert t.shape[0] == 11 assert X.shape == (11, 12) assert X[-1, 0] > X[0, 0] # B increased assert X[-1, 1] > X[0, 1] # R increased assert X[-1, 3] >= X[0, 3] # Loans def test_check_stability(): x = FQBMState(R=100, Loans=1000, E_b=100) checks = check_stability(x, k=0.08, reserve_threshold=50, debt_gdp=0.5, r=0.05, g=0.02, primary_balance_gdp=0.02) assert "CR_ok" in checks assert "reserves_ok" in checks assert "debt_sustainable" in checks assert checks["CR_ok"] is True assert checks["reserves_ok"] is True