tahamajs's picture
download
raw
9.06 kB
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
from typing import List, Dict, Tuple, Any, Optional
from ..evaluation.metrics import EvaluationMetrics
class ResultsVisualizer:
def __init__(self, figsize=(12, 8)):
self.figsize = figsize
self._setup_style()
def _setup_style(self):
plt.style.use("seaborn-v0_8")
sns.set_palette("husl")
def plot_performance_overview(
self, metrics: EvaluationMetrics, save_path: Optional[str] = None
) -> plt.Figure:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=self.figsize)
difficulties = list(metrics.difficulty_breakdown.keys())
counts = list(metrics.difficulty_breakdown.values())
if difficulties:
ax1.bar(difficulties, counts, alpha=0.7)
ax1.set_title("Problems Solved by Difficulty")
ax1.set_ylabel("Number of Problems")
ax1.tick_params(axis="x", rotation=45)
strategies = list(metrics.strategy_success_rates.keys())
success_rates = [
metrics.strategy_success_rates[s].get("success_rate", 0) for s in strategies
]
if strategies:
colors = plt.cm.viridis(np.linspace(0, 1, len(strategies)))
ax2.bar(strategies, success_rates, color=colors, alpha=0.7)
ax2.set_title("Strategy Success Rates")
ax2.set_ylabel("Success Rate")
ax2.set_ylim(0, 1)
ax2.tick_params(axis="x", rotation=45)
quality_counts = {}
for score in metrics.proof_quality_scores:
quality_counts[score] = quality_counts.get(score, 0) + 1
if quality_counts:
qualities = list(quality_counts.keys())
counts = list(quality_counts.values())
ax3.pie(
counts, labels=[f"Quality {q}" for q in qualities], autopct="%1.1f%%"
)
ax3.set_title("Proof Quality Distribution")
metrics_data = {
"Success Rate": metrics.success_rate,
"Avg Confidence": metrics.average_confidence,
"Avg Proof Quality": metrics.average_proof_quality
/ 5.0,
"Time Efficiency": (
1.0 / (metrics.average_time / 60.0) if metrics.average_time > 0 else 0
),
}
metric_names = list(metrics_data.keys())
metric_values = list(metrics_data.values())
ax4.bar(metric_names, metric_values, alpha=0.7)
ax4.set_title("Performance Metrics Summary")
ax4.set_ylabel("Normalized Score")
ax4.set_ylim(0, 1)
ax4.tick_params(axis="x", rotation=45)
plt.tight_layout()
if save_path:
plt.savefig(save_path, dpi=300, bbox_inches="tight")
return fig
def plot_comparison_analysis(
self,
metrics_list: List[EvaluationMetrics],
solver_names: List[str],
save_path: Optional[str] = None,
) -> plt.Figure:
fig, axes = plt.subplots(2, 2, figsize=self.figsize)
axes = axes.flatten()
data = []
for i, (metrics, name) in enumerate(zip(metrics_list, solver_names)):
data.append(
{
"Solver": name,
"Success Rate": metrics.success_rate,
"Avg Time": metrics.average_time,
"Avg Confidence": metrics.average_confidence,
"Avg Quality": metrics.average_proof_quality,
}
)
df = pd.DataFrame(data)
axes[0].bar(df["Solver"], df["Success Rate"], alpha=0.7)
axes[0].set_title("Success Rate Comparison")
axes[0].set_ylabel("Success Rate")
axes[0].set_ylim(0, 1)
axes[0].tick_params(axis="x", rotation=45)
axes[1].bar(df["Solver"], df["Avg Time"], alpha=0.7, color="orange")
axes[1].set_title("Average Solving Time")
axes[1].set_ylabel("Time (seconds)")
axes[1].tick_params(axis="x", rotation=45)
axes[2].bar(df["Solver"], df["Avg Confidence"], alpha=0.7, color="green")
axes[2].set_title("Average Confidence")
axes[2].set_ylabel("Confidence Score")
axes[2].set_ylim(0, 1)
axes[2].tick_params(axis="x", rotation=45)
axes[3].bar(df["Solver"], df["Avg Quality"], alpha=0.7, color="purple")
axes[3].set_title("Average Proof Quality")
axes[3].set_ylabel("Quality Score (1-5)")
axes[3].set_ylim(0, 5)
axes[3].tick_params(axis="x", rotation=45)
plt.tight_layout()
if save_path:
plt.savefig(save_path, dpi=300, bbox_inches="tight")
return fig
def create_detailed_report_chart(
self, metrics: EvaluationMetrics, save_path: Optional[str] = None
) -> plt.Figure:
fig = plt.figure(figsize=(16, 12))
gs = fig.add_gridspec(3, 3, hspace=0.3, wspace=0.3)
ax_main = fig.add_subplot(gs[0, :])
metrics_summary = [
("Success Rate", metrics.success_rate, "green"),
("Avg Confidence", metrics.average_confidence, "blue"),
("Avg Quality", metrics.average_proof_quality / 5.0, "purple"),
(
"Time Efficiency",
1.0 / (metrics.average_time / 60.0) if metrics.average_time > 0 else 0,
"orange",
),
]
names, values, colors = zip(*metrics_summary)
bars = ax_main.bar(names, values, color=colors, alpha=0.7)
ax_main.set_title("Overall Performance Summary", fontsize=16, fontweight="bold")
ax_main.set_ylabel("Normalized Score")
ax_main.set_ylim(0, 1)
for bar, value in zip(bars, values):
height = bar.get_height()
ax_main.text(
bar.get_x() + bar.get_width() / 2.0,
height + 0.01,
f"{value:.2f}",
ha="center",
va="bottom",
fontweight="bold",
)
ax_strategy = fig.add_subplot(gs[1, 0])
if metrics.strategy_success_rates:
strategies = list(metrics.strategy_success_rates.keys())
attempts = [
metrics.strategy_success_rates[s]["attempts"] for s in strategies
]
successes = [
metrics.strategy_success_rates[s]["successes"] for s in strategies
]
x = np.arange(len(strategies))
width = 0.35
ax_strategy.bar(x - width / 2, attempts, width, label="Attempts", alpha=0.7)
ax_strategy.bar(
x + width / 2, successes, width, label="Successes", alpha=0.7
)
ax_strategy.set_title("Strategy Performance")
ax_strategy.set_ylabel("Count")
ax_strategy.set_xticks(x)
ax_strategy.set_xticklabels(strategies, rotation=45, ha="right")
ax_strategy.legend()
ax_difficulty = fig.add_subplot(gs[1, 1])
if metrics.difficulty_breakdown:
difficulties = list(metrics.difficulty_breakdown.keys())
counts = list(metrics.difficulty_breakdown.values())
colors = plt.cm.Set3(np.linspace(0, 1, len(difficulties)))
wedges, texts, autotexts = ax_difficulty.pie(
counts, labels=difficulties, colors=colors, autopct="%1.1f%%"
)
ax_difficulty.set_title("Problems by Difficulty")
ax_quality = fig.add_subplot(gs[1, 2])
if metrics.proof_quality_scores:
quality_counts = {}
for score in metrics.proof_quality_scores:
quality_counts[score] = quality_counts.get(score, 0) + 1
qualities = list(quality_counts.keys())
counts = list(quality_counts.values())
bars = ax_quality.bar(qualities, counts, alpha=0.7)
ax_quality.set_title("Proof Quality Distribution")
ax_quality.set_xlabel("Quality Score")
ax_quality.set_ylabel("Count")
for bar, count in zip(bars, counts):
height = bar.get_height()
ax_quality.text(
bar.get_x() + bar.get_width() / 2.0,
height + 0.1,
str(count),
ha="center",
va="bottom",
)
ax_time = fig.add_subplot(gs[2, :])
time_points = np.linspace(0, 10, 50)
performance = np.random.normal(0.7, 0.1, 50).cumsum() / np.arange(1, 51)
performance = np.clip(performance, 0, 1)
ax_time.plot(time_points, performance, "b-", linewidth=2, alpha=0.7)
ax_time.set_title("Performance Over Time (Simulated)")
ax_time.set_xlabel("Time (arbitrary units)")
ax_time.set_ylabel("Cumulative Success Rate")
ax_time.set_ylim(0, 1)
ax_time.grid(True, alpha=0.3)
if save_path:
plt.savefig(save_path, dpi=300, bbox_inches="tight")
return fig

Xet Storage Details

Size:
9.06 kB
·
Xet hash:
628a914893c3248875f94722e4a78ff5fd63d8f9de7fe6ff8f887d67e0abd53b

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.