Buckets:
tahamajs/Sysmem2_in_AI / ComputerAssignments /CA5_geometric_reasoning /src /visualization /results.py
| 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.