import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv('experiment_results.csv')

mean_times = df.groupby(['Structure', 'Mode'])[['Insert (sec)', 'Search (sec)', 'Delete (sec)']].mean().reset_index()

structures = mean_times['Structure'].unique()
modes = mean_times['Mode'].unique()

fig, axes = plt.subplots(1, 3, figsize=(15, 5))

operations = ['Insert (sec)', 'Search (sec)', 'Delete (sec)']
titles = ['Insertion', 'Search', 'Deletion']

for ax, op, title in zip(axes, operations, titles):
    x = np.arange(len(structures))
    width = 0.35
    
    random_vals = []
    sorted_vals = []
    for s in structures:
        random_row = mean_times[(mean_times['Structure'] == s) & (mean_times['Mode'] == 'random')]
        sorted_row = mean_times[(mean_times['Structure'] == s) & (mean_times['Mode'] == 'sorted')]
        random_vals.append(random_row[op].values[0] if not random_row.empty else 0)
        sorted_vals.append(sorted_row[op].values[0] if not sorted_row.empty else 0)
    
    ax.bar(x - width/2, random_vals, width, label='Random')
    ax.bar(x + width/2, sorted_vals, width, label='Sorted')
    ax.set_xticks(x)
    ax.set_xticklabels(structures)
    ax.set_ylabel('Time (seconds)')
    ax.set_title(title)
    ax.legend()

plt.tight_layout()
plt.savefig('performance_comparison.png', dpi=150)
plt.show()