42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Render the preregistered profile-ablation figure with schematic data."""
|
|
|
|
from pathlib import Path
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
CONFIGS = [f"TP{tp}\nMNS{mns}" for tp in (1, 2, 4) for mns in (8, 16, 32, 64)]
|
|
|
|
# Schematic only. These values are deliberately not derived from experiment data.
|
|
MOCK = {
|
|
"Real (mock)": [0.42, 0.50, 0.58, 0.57, 0.60, 0.76, 1.00, 0.99, 0.55, 0.70, 0.74, 0.73],
|
|
"Old profile-only (mock)": [0.38, 0.44, 0.51, 0.50, 0.47, 0.58, 0.70, 0.69, 0.66, 0.84, 0.95, 0.96],
|
|
"New P-020 profile-only (H1 mock)": [0.40, 0.49, 0.57, 0.56, 0.58, 0.74, 0.98, 0.97, 0.53, 0.69, 0.75, 0.74],
|
|
"Per-TP calibrated upper bound (mock)": [0.41, 0.50, 0.58, 0.57, 0.59, 0.75, 0.99, 0.98, 0.54, 0.69, 0.75, 0.74],
|
|
}
|
|
|
|
|
|
def main() -> None:
|
|
output = Path(__file__).with_name("mock-profile-ablation.png")
|
|
fig, ax = plt.subplots(figsize=(13.5, 5.8), constrained_layout=True)
|
|
x = list(range(len(CONFIGS)))
|
|
styles = ["o-", "s--", "^-", "D:"]
|
|
for (label, values), style in zip(MOCK.items(), styles, strict=True):
|
|
ax.plot(x, values, style, linewidth=2, markersize=5, label=label)
|
|
ax.axvline(3.5, color="0.75", linewidth=1)
|
|
ax.axvline(7.5, color="0.75", linewidth=1)
|
|
ax.set_xticks(x, CONFIGS)
|
|
ax.set_ylabel("Normalized SLO-feasible throughput (schematic)")
|
|
ax.set_xlabel("Configuration")
|
|
ax.set_ylim(0.3, 1.08)
|
|
ax.grid(axis="y", alpha=0.25)
|
|
ax.legend(ncol=2, frameon=False, loc="upper left")
|
|
ax.set_title("MOCK / SCHEMATIC — expected discriminative result, not experiment data")
|
|
fig.savefig(output, dpi=180)
|
|
print(output)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|