import numpy as np
import pandas as pd

def run_boiling_frog_test(num_sessions=100, drift_per_session=0.005, window_size=10, anomaly_threshold=0.05):
    np.random.seed(42)
    
    # Simulate true baseline (stable at 0.85 accuracy)
    true_baseline = 0.85
    observed_accuracies = []
    rolling_baselines = []
    absolute_floors = []
    
    current_rolling = true_baseline
    absolute_floor = true_baseline  # Personal best anchor
    
    for session in range(num_sessions):
        # Inject slow drift
        drift = drift_per_session * session  # cumulative
        observed = true_baseline - drift + np.random.normal(0, 0.02)
        observed = max(0.4, min(0.98, observed))  # clamp
        
        observed_accuracies.append(observed)
        
        # Rolling average
        recent = observed_accuracies[-window_size:]
        current_rolling = np.mean(recent)
        rolling_baselines.append(current_rolling)
        
        # Absolute floor (max so far)
        absolute_floor = max(absolute_floor, observed)
        absolute_floors.append(absolute_floor)
        
        # Check if drift would be detected
        drift_from_rolling = abs(observed - current_rolling)
        drift_from_floor = abs(observed - absolute_floor)
        
    df = pd.DataFrame({
        'session': range(num_sessions),
        'observed_accuracy': observed_accuracies,
        'rolling_baseline': rolling_baselines,
        'absolute_floor': absolute_floors,
        'drift_from_rolling': [abs(o - r) for o,r in zip(observed_accuracies, rolling_baselines)],
        'drift_from_floor': [abs(o - a) for o,a in zip(observed_accuracies, absolute_floors)]
    })
    
    final_rolling_drift = abs(observed_accuracies[-1] - rolling_baselines[-1])
    final_floor_drift = abs(observed_accuracies[-1] - absolute_floors[-1])
    
    print("Boiling Frog Cross-Session Drift Test Results")
    print(f"Total sessions: {num_sessions}")
    print(f"Drift per session: {drift_per_session}")
    print(f"Rolling window: {window_size}")
    print(f"Final observed accuracy: {observed_accuracies[-1]:.4f}")
    print(f"Final rolling baseline: {rolling_baselines[-1]:.4f} (drift: {final_rolling_drift:.4f})")
    print(f"Absolute floor: {absolute_floors[-1]:.4f} (drift: {final_floor_drift:.4f})")
    print(f"Max drift from rolling: {df['drift_from_rolling'].max():.4f}")
    
    if final_rolling_drift > anomaly_threshold:
        print("DETECTED: Significant drift from rolling baseline")
    else:
        print("NOT DETECTED: Silent drift below threshold")
    
    return df

if __name__ == "__main__":
    results = run_boiling_frog_test()
    results.to_csv('/home/workdir/artifacts/boiling_frog_results.csv', index=False)
    print("\nResults saved to boiling_frog_results.csv")