File size: 3,592 Bytes
2469150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python3
"""
Test Mathematical Fixes - Fixed Version
Verify that the corrected unit normalization factors produce accurate data values
"""

import sys
import os
sys.path.insert(0, os.path.abspath('.'))

import pandas as pd
import numpy as np
from src.analysis.mathematical_fixes import MathematicalFixes

def test_mathematical_fixes():
    """Test that mathematical fixes produce correct data values"""
    print("๐Ÿงช Testing Mathematical Fixes - Fixed Version")
    print("=" * 60)
    
    # Create sample data that matches FRED's actual values
    dates = pd.date_range('2024-01-01', periods=12, freq='M')
    
    # Sample data with realistic FRED values
    sample_data = pd.DataFrame({
        'GDPC1': [23500, 23550, 23600, 23650, 23700, 23750, 23800, 23850, 23900, 23950, 24000, 24050],  # Billions
        'CPIAUCSL': [310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321],  # Index ~320
        'INDPRO': [110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121],  # Index ~110-115
        'FEDFUNDS': [4.25, 4.30, 4.35, 4.40, 4.45, 4.50, 4.55, 4.60, 4.65, 4.70, 4.75, 4.80],  # Percent ~4.33%
        'DGS10': [3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9],  # Percent ~4.0%
        'RSAFS': [700000, 710000, 720000, 730000, 740000, 750000, 760000, 770000, 780000, 790000, 800000, 810000]  # Millions
    }, index=dates)
    
    print("๐Ÿ“Š Original Data (Realistic FRED Values):")
    print(sample_data.head())
    print()
    
    # Initialize mathematical fixes
    math_fixes = MathematicalFixes()
    
    # Apply comprehensive fixes
    print("๐Ÿ”ง Applying Mathematical Fixes...")
    fixed_data, fix_info = math_fixes.apply_comprehensive_fixes(
        sample_data,
        target_freq='Q',
        growth_method='pct_change',
        normalize_units=True
    )
    
    print("โœ… Fixes Applied:")
    for fix in fix_info['fixes_applied']:
        print(f"  - {fix}")
    print()
    
    # Test unit normalization specifically
    print("๐Ÿงฎ Testing Unit Normalization:")
    normalized_data = math_fixes.normalize_units(sample_data)
    
    print("Original vs Normalized Values:")
    for col in ['GDPC1', 'CPIAUCSL', 'INDPRO', 'FEDFUNDS', 'DGS10', 'RSAFS']:
        if col in sample_data.columns:
            original_val = sample_data[col].iloc[-1]
            normalized_val = normalized_data[col].iloc[-1]
            print(f"  {col}: {original_val:,.2f} โ†’ {normalized_val:,.2f}")
    
    print()
    
    # Verify the values are now correct
    print("โœ… Expected vs Actual Values:")
    expected_values = {
        'GDPC1': (23500, 24050),  # Should be ~$23.5T (in billions)
        'CPIAUCSL': (310, 321),   # Should be ~320
        'INDPRO': (110, 121),     # Should be ~110-115
        'FEDFUNDS': (4.25, 4.80), # Should be ~4.33%
        'DGS10': (3.8, 4.9),     # Should be ~4.0%
        'RSAFS': (700, 810)       # Should be ~$700-900B (in billions)
    }
    
    for col, (min_expected, max_expected) in expected_values.items():
        if col in normalized_data.columns:
            actual_val = normalized_data[col].iloc[-1]
            if min_expected <= actual_val <= max_expected:
                print(f"  โœ… {col}: {actual_val:,.2f} (within expected range {min_expected:,.2f}-{max_expected:,.2f})")
            else:
                print(f"  โŒ {col}: {actual_val:,.2f} (outside expected range {min_expected:,.2f}-{max_expected:,.2f})")
    
    print()
    print("๐ŸŽฏ Mathematical Fixes Test Complete!")
    
    return fixed_data, fix_info

if __name__ == "__main__":
    test_mathematical_fixes()