TIF_E41253368/api/tests/test_forecaster.py

29 lines
940 B
Python

import numpy as np
from sklearn.preprocessing import MinMaxScaler
from app.services.forecaster import forecast_recursive
class IncrementModel:
def predict(self, model_input, verbose=0):
return np.asarray([[model_input[0, -1, 0] + 0.1]])
def test_recursive_forecast_uses_scaled_feedback_and_keeps_prefix():
scaler = MinMaxScaler().fit(np.asarray([[0.0], [100.0]]))
window = np.asarray([10.0, 20.0, 30.0])
prices, out_of_range = forecast_recursive(IncrementModel(), scaler, window, 5)
assert prices == [40, 50, 60, 70, 80]
assert out_of_range is False
def test_forecast_never_returns_negative_prices():
class NegativeModel:
def predict(self, model_input, verbose=0):
return np.asarray([[-2.0]])
scaler = MinMaxScaler().fit(np.asarray([[0.0], [100.0]]))
prices, _ = forecast_recursive(NegativeModel(), scaler, np.asarray([10.0, 20.0, 30.0]), 1)
assert prices == [0]