#!/usr/bin/env python3 """Test forecasting pipeline""" import sys, os if sys.platform == 'win32': os.environ['PYTHONIOENCODING'] = 'utf-8' sys.stdout.reconfigure(encoding='utf-8') from utils.excel_loader import load_submarine_forecast_data from utils.preprocessing import * from utils.merge_data import * from models.regression import LoadLimitRegressor, CapacityAnalyzer # Load & prepare data data = load_submarine_forecast_data('./dataset/submarine_forecast.xlsx') df_load = preprocess_load_data(data['load']) df_temp = preprocess_temperature_data(data['temp']) df_tepr = preprocess_measurement_data(data['tepr'], 'TEPR') df_strr = preprocess_measurement_data(data['strr'], 'STRR') df_daily = aggregate_daily_max(df_load) df_merged = merge_load_temp(df_daily, df_temp) df_final = merge_with_measurements(df_merged, df_tepr, df_strr) print("\n" + "="*60) print("FORECASTING TEST") print("="*60) # Simple trend forecast print("\n1️ Computing simple MW trend...") import numpy as np mw_values = df_final['mw_max'].values trend = np.polyfit(np.arange(len(mw_values)), mw_values, 1) ts_forecast = np.polyval(trend, np.arange(len(mw_values), len(mw_values) + 30)) print(f" Forecast shape: {ts_forecast.shape}") print(f" Forecast range: {ts_forecast.min():.2f} - {ts_forecast.max():.2f} MW") print(f" Forecast sample: {ts_forecast[:5]}") # Load Limit Regressor print("\n2️ Training LoadLimitRegressor...") if 'MaxTemp' in df_final.columns and df_final['MaxTemp'].notna().sum() > 10: lr_model = LoadLimitRegressor(model_type='linear') lr_model.fit(df_final, temp_col='MaxTemp', load_col='mw_max') ll_pred = lr_model.predict(df_final['MaxTemp'].values) print(f" Prediction shape: {ll_pred.shape}") print(f" Prediction range: {ll_pred.min():.2f} - {ll_pred.max():.2f} MW") print(f" Prediction sample: {ll_pred[:5]}") # Capacity Analyzer print("\n3️ Training CapacityAnalyzer...") features = ['mw_theoretical_80pct', 'MaxTemp', 'tepr_mean', 'strr_mean'] available_features = [f for f in features if f in df_final.columns] if len(available_features) >= 2 and df_final[available_features].notna().sum().sum() > 10: cap_model = CapacityAnalyzer(model_type='linear') cap_model.fit(df_final, target_col='mw_max', feature_cols=available_features) # Create test data with same features X_test = df_final[available_features].fillna(df_final[available_features].mean()) cap_pred = cap_model.predict_capacity(X_test) print(f" Prediction shape: {cap_pred.shape}") print(f" Prediction range: {cap_pred.min():.2f} - {cap_pred.max():.2f} MW") print(f" Prediction sample: {cap_pred[:5]}") print("\n" + "="*60) print("✅ FORECASTING TEST COMPLETE!") print("="*60) print(f"Pipeline validated - all models trained successfully") print(f"Data clean & ready for deployment")