from typing import TypedDict class PathSummary(TypedDict): average_speed_m_per_s: float success_rate: float total_distance_m: float def summarize_paths(records: list[dict]) -> PathSummary: """Summarize simple path history records. Each record is expected to have: - distance_m (float) - duration_s (float) - success ("yes"/"no") """ if not records: return { "average_speed_m_per_s": 0.0, "success_rate": 0.0, "total_distance_m": 0.0, } total_distance = 0.0 total_duration = 0.0 success_count = 0 for r in records: d = float(r.get("distance_m", 0.0)) t = float(r.get("duration_s", 0.0)) total_distance += d total_duration += max(t, 0.0) if str(r.get("success", "")).lower() == "yes": success_count += 1 avg_speed = total_distance / total_duration if total_duration > 0 else 0.0 success_rate = success_count / len(records) return { "average_speed_m_per_s": round(avg_speed, 3), "success_rate": round(success_rate, 3), "total_distance_m": round(total_distance, 3), } if __name__ == "__main__": example_records = [ {"distance_m": 6.0, "duration_s": 40, "success": "yes"}, {"distance_m": 8.0, "duration_s": 50, "success": "no"}, ] print(summarize_paths(example_records))