|
|
|
""" |
|
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 |
|
|
|
|
|
sys.path.append('frontend') |
|
|
|
def test_fred_api_integration(): |
|
"""Test FRED API integration and real-time data fetching""" |
|
print("=== TESTING ENHANCED FRED ML APPLICATION ===") |
|
|
|
|
|
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: |
|
|
|
from frontend.fred_api_client import FREDAPIClient, generate_real_insights, get_real_economic_data |
|
|
|
|
|
client = FREDAPIClient(fred_key) |
|
print("β
FRED API Client initialized") |
|
|
|
|
|
print("\nπ Testing Real-Time Insights Generation...") |
|
insights = generate_real_insights(fred_key) |
|
|
|
if insights: |
|
print(f"β
Generated insights for {len(insights)} indicators") |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
print("\nπ Testing Correlation Analysis...") |
|
corr_matrix = df.corr(method='spearman') |
|
print(f"β
Calculated Spearman correlations for {len(corr_matrix)} indicators") |
|
|
|
|
|
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: |
|
|
|
from frontend.fred_api_client import generate_real_insights |
|
fred_key = os.getenv('FRED_API_KEY') |
|
|
|
insights = generate_real_insights(fred_key) |
|
|
|
|
|
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) |
|
|
|
|
|
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") |
|
|
|
|
|
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) |
|
|
|
|
|
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) |
|
|
|
|
|
api_success = test_fred_api_integration() |
|
|
|
|
|
features_success = test_enhanced_features() |
|
|
|
|
|
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) |