22"""Compare benchmark results across PR, main, and tag and output a markdown table."""
33
44import json
5+ import logging
6+ import re
57import statistics
68from pathlib import Path
79from typing import Literal , NamedTuple
810
11+ _logger = logging .getLogger (__name__ )
12+
913
1014class BenchmarkResult (NamedTuple ):
1115 fullname : str
@@ -83,8 +87,8 @@ def _label(result: BenchmarkResult) -> str:
8387def build_table (
8488 pr : dict [str , BenchmarkResult ],
8589 main : dict [str , BenchmarkResult ],
86- tag : dict [str , BenchmarkResult ],
87- tag_name : str ,
90+ tag : dict [str , BenchmarkResult ] = {} ,
91+ tag_name : str | None = None ,
8892) -> str :
8993 all_keys = set (pr ) | set (main ) | set (tag )
9094 labels = [_label ((pr .get (k ) or main .get (k ) or tag .get (k ))) for k in all_keys ]
@@ -110,10 +114,10 @@ def delta_row(label: str, ref: dict[str, BenchmarkResult]) -> str:
110114 divider ,
111115 row ("PR" , pr ),
112116 row ("main" , main ),
113- row (tag_name , tag ),
117+ # row(tag_name, tag),
114118 divider .replace ("-" , "" ),
115119 delta_row ("PR vs main" , main ),
116- delta_row (f"PR vs { tag_name } " , tag ),
120+ # delta_row(f"PR vs {tag_name}", tag),
117121 "" ,
118122 "> `median (mean ± std)`" ,
119123 "> " ,
@@ -139,22 +143,27 @@ def main():
139143 args = parser .parse_args ()
140144
141145 files = sorted (Path ("." ).glob (args .pattern ))
142- assert len (files ) == 3 , f "Expected 3 files, found { len ( files ) } : { files } "
146+ assert len (files ) > 1 , "Expected more than 1 file for benchmark comparison. "
143147
144148 # Infer pr/main/tag from directory name
145149 parsed : dict [str , BenchmarkResult ] = {}
146150 tag = None
147151 for f in files :
148- stem = f .parent .name # e.g. "benchmark-pr"
149- key = stem .split ("-" )[- 1 ] # "pr", "main", tag
150- if key not in ("pr" , "main" ):
152+ stem = f .name # e.g. "benchmark-pr-PR-#"
153+ key = stem .split ("-" )[1 ] # commit-sha, "main", tag
154+
155+ # Special cases
156+ if re .match (r"^v\d+\.\d+.\d+$" , key ):
151157 tag = key
158+ elif key != "main" :
159+ key = "pr"
160+
152161 parsed [key ] = parse_file (f )
153162 if tag is None :
154- raise ValueError ( "Unknown tag " )
155- table = build_table (parsed ["pr" ], parsed ["main" ], parsed [ tag ] , tag_name = tag )
163+ _logger . warning ( "Tag not found " )
164+ table = build_table (parsed ["pr" ], parsed ["main" ], parsed . get ( tag , {}) , tag_name = tag )
156165 args .output .write_text (table )
157- print (table )
166+ _logger . info (table )
158167
159168
160169if __name__ == "__main__" :
0 commit comments