from typing import Any, List, Tuple import numpy as np def forecast_recursive( model: Any, scaler: Any, window: np.ndarray, horizon: int, ) -> Tuple[List[float], bool]: values = np.asarray(window, dtype=float).reshape(-1, 1) scaled_window = scaler.transform(values) scaled_predictions = [] for _ in range(horizon): model_input = scaled_window.reshape(1, len(scaled_window), 1) prediction = model.predict(model_input, verbose=0) prediction_value = float(np.asarray(prediction).reshape(-1)[0]) scaled_predictions.append(prediction_value) scaled_window = np.vstack([scaled_window[1:], [[prediction_value]]]) predicted_values = scaler.inverse_transform( np.asarray(scaled_predictions, dtype=float).reshape(-1, 1) ).reshape(-1) data_min = float(np.asarray(scaler.data_min_).reshape(-1)[0]) data_max = float(np.asarray(scaler.data_max_).reshape(-1)[0]) out_of_range = bool(np.any((predicted_values < data_min) | (predicted_values > data_max))) prices = [max(0.0, float(np.round(value, 6))) for value in predicted_values] return prices, out_of_range