import pandas as pd
import numpy as np

def analyze_diffs(file_path):
    print(f"Loading {file_path}...")
    df = pd.read_csv(file_path)
    
    # Skip first 100 rows to avoid warmup artifacts
    warmup_rows = 100
    if len(df) > warmup_rows:
        print(f"Analyzing {len(df) - warmup_rows} rows (skipped first {warmup_rows} as warmup)...")
        df = df.iloc[warmup_rows:]
    else:
        print(f"Total rows: {len(df)}")

    indicators = [
        'DB_Stoch', 'DB_MACD_Pred', 'DB_OSC', 'DB_M3_Mom', 'DB_M2_Diff',
        'DB_RSID', 'DB_Stoch_Div', 'DB_VWAP_Div', 'DB_M3_Div',
        'DB_M2_Div_Tiny', 'DB_M2_Div_NoOff', 'DB_Bearish', 'DB_Score'
    ]
    
    print(f"{'INDICATOR':<20} | {'AVG DIFF':<10} | {'MAX DIFF':<10} | {'CORRELATION':<10}")
    print("-" * 65)
    
    for ind in indicators:
        py_col = f'PY_{ind}'
        tv_col = f'TV_{ind}'
        
        if py_col not in df.columns or tv_col not in df.columns:
            print(f"{ind:<20} | {'NO DATA':<10} | {'-':<10} | {'-':<10}")
            continue
            
        diff = (df[py_col] - df[tv_col]).abs()
        avg_diff = diff.mean()
        max_diff = diff.max()
        
        # Correlation (handle constant values)
        if df[py_col].nunique() <= 1 or df[tv_col].nunique() <= 1:
             corr = 0.0
        else:
             corr = df[py_col].corr(df[tv_col])
        
        print(f"{ind:<20} | {avg_diff:<10.4f} | {max_diff:<10.4f} | {corr:<10.4f}")
        
        if max_diff > 1.0:
            # Print worst mismatches
            worst_idx = diff.idxmax()
            print(f"  -> Worst mismatches for {ind}:")
            worst_rows = df.nlargest(3, columns=[py_col.replace('PY_', 'AbsDiff_')])
            for idx, row in worst_rows.iterrows():
                 print(f"     {row['time']}: PY={row[py_col]:.4f}, TV={row[tv_col]:.4f}, Diff={row[py_col.replace('PY_', 'AbsDiff_')]:.4f}")
            print("")

if __name__ == "__main__":
    analyze_diffs("comparison_debug.csv")
