Edwin Salguero
Enhanced FRED ML with improved Reports & Insights page, fixed alignment analysis, and comprehensive analytics improvements
2469150
| #!/usr/bin/env python3 | |
| """ | |
| Test Enhanced FRED ML Application | |
| Verifies real-time FRED API integration and enhanced features | |
| """ | |
| import os | |
| import sys | |
| import pandas as pd | |
| from datetime import datetime, timedelta | |
| # Add frontend to path | |
| sys.path.append('frontend') | |
| def test_fred_api_integration(): | |
| """Test FRED API integration and real-time data fetching""" | |
| print("=== TESTING ENHANCED FRED ML APPLICATION ===") | |
| # Test FRED API key | |
| fred_key = os.getenv('FRED_API_KEY') | |
| if not fred_key: | |
| print("β FRED_API_KEY not found in environment") | |
| return False | |
| print(f"β FRED API Key: {fred_key[:8]}...") | |
| try: | |
| # Test FRED API client | |
| from frontend.fred_api_client import FREDAPIClient, generate_real_insights, get_real_economic_data | |
| # Test basic client functionality | |
| client = FREDAPIClient(fred_key) | |
| print("β FRED API Client initialized") | |
| # Test insights generation | |
| print("\nπ Testing Real-Time Insights Generation...") | |
| insights = generate_real_insights(fred_key) | |
| if insights: | |
| print(f"β Generated insights for {len(insights)} indicators") | |
| # Show sample insights | |
| for indicator, insight in list(insights.items())[:3]: | |
| print(f" {indicator}: {insight.get('current_value', 'N/A')} ({insight.get('growth_rate', 'N/A')})") | |
| else: | |
| print("β Failed to generate insights") | |
| return False | |
| # Test economic data fetching | |
| print("\nπ Testing Economic Data Fetching...") | |
| end_date = datetime.now().strftime('%Y-%m-%d') | |
| start_date = (datetime.now() - timedelta(days=365)).strftime('%Y-%m-%d') | |
| economic_data = get_real_economic_data(fred_key, start_date, end_date) | |
| if 'economic_data' in economic_data and not economic_data['economic_data'].empty: | |
| df = economic_data['economic_data'] | |
| print(f"β Fetched economic data: {df.shape[0]} observations, {df.shape[1]} indicators") | |
| print(f" Date range: {df.index.min()} to {df.index.max()}") | |
| print(f" Indicators: {list(df.columns)}") | |
| else: | |
| print("β Failed to fetch economic data") | |
| return False | |
| # Test correlation analysis | |
| print("\nπ Testing Correlation Analysis...") | |
| corr_matrix = df.corr(method='spearman') | |
| print(f"β Calculated Spearman correlations for {len(corr_matrix)} indicators") | |
| # Show strongest correlations | |
| corr_pairs = [] | |
| for i in range(len(corr_matrix.columns)): | |
| for j in range(i+1, len(corr_matrix.columns)): | |
| corr_value = corr_matrix.iloc[i, j] | |
| if abs(corr_value) > 0.5: | |
| corr_pairs.append((corr_matrix.columns[i], corr_matrix.columns[j], corr_value)) | |
| corr_pairs.sort(key=lambda x: abs(x[2]), reverse=True) | |
| print(f" Found {len(corr_pairs)} strong correlations (>0.5)") | |
| for pair in corr_pairs[:3]: | |
| print(f" {pair[0]} β {pair[1]}: {pair[2]:.3f}") | |
| return True | |
| except Exception as e: | |
| print(f"β Error testing FRED API integration: {e}") | |
| return False | |
| def test_enhanced_features(): | |
| """Test enhanced application features""" | |
| print("\n=== TESTING ENHANCED FEATURES ===") | |
| try: | |
| # Test insights generation with enhanced analysis | |
| from frontend.fred_api_client import generate_real_insights | |
| fred_key = os.getenv('FRED_API_KEY') | |
| insights = generate_real_insights(fred_key) | |
| # Test economic health assessment | |
| print("π₯ Testing Economic Health Assessment...") | |
| health_indicators = ['GDPC1', 'INDPRO', 'UNRATE', 'CPIAUCSL'] | |
| health_score = 0 | |
| for indicator in health_indicators: | |
| if indicator in insights: | |
| insight = insights[indicator] | |
| growth_rate = insight.get('growth_rate', 0) | |
| # Convert growth_rate to float if it's a string | |
| try: | |
| if isinstance(growth_rate, str): | |
| growth_rate = float(growth_rate.replace('%', '').replace('+', '')) | |
| else: | |
| growth_rate = float(growth_rate) | |
| except (ValueError, TypeError): | |
| growth_rate = 0 | |
| if indicator == 'GDPC1' and growth_rate > 2: | |
| health_score += 25 | |
| elif indicator == 'INDPRO' and growth_rate > 1: | |
| health_score += 25 | |
| elif indicator == 'UNRATE': | |
| current_value = insight.get('current_value', '0%').replace('%', '') | |
| try: | |
| unrate_val = float(current_value) | |
| if unrate_val < 4: | |
| health_score += 25 | |
| except: | |
| pass | |
| elif indicator == 'CPIAUCSL' and 1 < growth_rate < 3: | |
| health_score += 25 | |
| print(f"β Economic Health Score: {health_score}/100") | |
| # Test market sentiment analysis | |
| print("π Testing Market Sentiment Analysis...") | |
| sentiment_indicators = ['DGS10', 'FEDFUNDS', 'RSAFS'] | |
| sentiment_score = 0 | |
| for indicator in sentiment_indicators: | |
| if indicator in insights: | |
| insight = insights[indicator] | |
| current_value = insight.get('current_value', '0') | |
| growth_rate = insight.get('growth_rate', 0) | |
| # Convert values to float | |
| try: | |
| if isinstance(growth_rate, str): | |
| growth_rate = float(growth_rate.replace('%', '').replace('+', '')) | |
| else: | |
| growth_rate = float(growth_rate) | |
| except (ValueError, TypeError): | |
| growth_rate = 0 | |
| if indicator == 'DGS10': | |
| try: | |
| yield_val = float(current_value.replace('%', '')) | |
| if 2 < yield_val < 5: | |
| sentiment_score += 33 | |
| except: | |
| pass | |
| elif indicator == 'FEDFUNDS': | |
| try: | |
| rate_val = float(current_value.replace('%', '')) | |
| if rate_val < 3: | |
| sentiment_score += 33 | |
| except: | |
| pass | |
| elif indicator == 'RSAFS' and growth_rate > 2: | |
| sentiment_score += 34 | |
| print(f"β Market Sentiment Score: {sentiment_score}/100") | |
| return True | |
| except Exception as e: | |
| print(f"β Error testing enhanced features: {e}") | |
| return False | |
| def main(): | |
| """Run all tests""" | |
| print("π Testing Enhanced FRED ML Application") | |
| print("=" * 50) | |
| # Test FRED API integration | |
| api_success = test_fred_api_integration() | |
| # Test enhanced features | |
| features_success = test_enhanced_features() | |
| # Summary | |
| print("\n" + "=" * 50) | |
| print("π TEST SUMMARY") | |
| print("=" * 50) | |
| if api_success and features_success: | |
| print("β ALL TESTS PASSED") | |
| print("β Real-time FRED API integration working") | |
| print("β Enhanced features functioning") | |
| print("β Application ready for production use") | |
| return True | |
| else: | |
| print("β SOME TESTS FAILED") | |
| if not api_success: | |
| print("β FRED API integration issues") | |
| if not features_success: | |
| print("β Enhanced features issues") | |
| return False | |
| if __name__ == "__main__": | |
| success = main() | |
| sys.exit(0 if success else 1) |