(values: list[float])
| 410 | |
| 411 | |
| 412 | def percentile_stats(values: list[float]) -> dict[str, float | None]: |
| 413 | if not values: |
| 414 | return {"p50": None, "p95": None, "p99": None, "avg": None, "max": None} |
| 415 | ordered = sorted(values) |
| 416 | return { |
| 417 | "p50": percentile(ordered, 50), |
| 418 | "p95": percentile(ordered, 95), |
| 419 | "p99": percentile(ordered, 99), |
| 420 | "avg": sum(ordered) / len(ordered), |
| 421 | "max": ordered[-1], |
| 422 | } |
| 423 | |
| 424 | |
| 425 | def percentile(values: list[float], pct: int) -> float | None: |
no test coverage detected