29 lines
940 B
Python
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]
|