33import sys
44from abc import ABC
55from abc import abstractmethod
6+ from collections .abc import Iterable
7+ from collections .abc import Iterator
68from datetime import datetime
7- from typing import Iterable
8- from typing import Iterator
99from typing import NamedTuple
10+ from typing import cast
1011
1112from dateutil import tz
1213from junitparser import Attr
@@ -214,43 +215,42 @@ def part_finished(
214215 ) -> None :
215216 if answer and correct :
216217 icon = colored ("✅" , "green" )
217- string = f"{ answer [:CLIListener .cutoff ]} "
218+ string = f"{ answer [: CLIListener .cutoff ]} "
218219 elif answer and not correct :
219220 if expected is None :
220221 icon = colored ("?" , "magenta" )
221222 correction = "(correct answer unknown)"
222223 else :
223224 icon = colored ("❌" , "red" )
224225 correction = f"(expected: { expected } )"
225- string = f"{ answer [:CLIListener .cutoff ]} { correction } "
226+ string = f"{ answer [: CLIListener .cutoff ]} { correction } "
226227 if time is not None :
227228 self .times .append (time )
228229 self ._update_part (sum (self .times ), part , string , icon )
229230
230231 def stop (self ) -> None :
231232 print ()
232233 print (
233- "Total run time: {:8.4f}s\n Took: {:8.4f}s" .format (
234- self .total_time / 1e9 , self .total_walltime
235- )
234+ f"Total run time: { self .total_time / 1e9 :8.4f} s\n "
235+ f"Took: { self .total_walltime :8.4f} s"
236236 )
237237
238238 def _init_line (self , time : int ) -> None :
239239 runtime = self ._format_time (time , self .timeout )
240- self .line = " " . join ([ runtime , self .progress ])
240+ self .line = f" { runtime } { self .progress } "
241241
242242 def _update_part (
243243 self , time : int , part : str , answer : str , icon : str
244244 ) -> None :
245245 if part == "a" :
246246 self ._init_line (time )
247247 answer = answer .ljust (30 )
248- self .line_a = f" { icon } part { part } : { answer } "
248+ self .line_a = f" { icon } { part } : { answer } "
249249 self .line += self .line_a
250250 else :
251251 self ._init_line (time )
252252 self .line += self .line_a
253- self .line += f" { icon } part { part } : { answer } "
253+ self .line += f" { icon } { part } : { answer } "
254254
255255 def _format_time (self , time : int , timeout : float ) -> str :
256256 t = time / 1e9
@@ -261,10 +261,10 @@ def _format_time(self, time: int, timeout: float) -> str:
261261 else :
262262 color = "red"
263263 if t < 0.001 :
264- runtime = colored ("{: 7.3f}ms". format ( t * 1000 ) , color )
264+ runtime = colored (f" { t * 1000 : 7.3f} ms" , color )
265265 else :
266- runtime = colored ("{: 8.4f}s" . format ( t ) , color )
267- return runtime
266+ runtime = colored ("{t: 8.4f}s" , color )
267+ return cast ( "str" , runtime )
268268
269269
270270class JUnitXmlListener (Listener ):
@@ -298,7 +298,7 @@ def puzzle_finished(self, time: int, walltime: float) -> None:
298298 pass
299299
300300 def puzzle_finished_with_error (
301- self , time : int , walltime : float , error : str
301+ self , _time : int , walltime : float , error : str
302302 ) -> None :
303303 case = TestCase (
304304 name = f"{ self .year } /{ self .day :02} /{ self .plugin } /{ self .user_id } "
@@ -314,9 +314,9 @@ def puzzle_finished_with_error(
314314 def part_missing (self , time : int , part : str ) -> None :
315315 pass
316316
317- def part_skipped (self , time : int , part : str ) -> None :
317+ def part_skipped (self , _time : int , part : str ) -> None :
318318 case = TestCase (
319- name = f"{ self .year } /{ self .day :02} /{ part } /{ self .plugin } /{ self .user_id } " # noqa E501
319+ name = f"{ self .year } /{ self .day :02} /{ part } /{ self .plugin } /{ self .user_id } "
320320 )
321321 case .year = self .year
322322 case .day = self .day
@@ -335,14 +335,15 @@ def part_finished(
335335 correct : bool ,
336336 ) -> None :
337337 case = TestCase (
338- name = f"{ self .year } /{ self .day :02} /{ part } /{ self .plugin } /{ self .user_id } " # noqa E501
338+ name = f"{ self .year } /{ self .day :02} /{ part } /{ self .plugin } /{ self .user_id } "
339339 )
340340 case .year = self .year
341341 case .day = self .day
342342 case .part = part
343343 case .plugin = self .plugin
344344 case .user_id = self .user_id
345- case .time = time / 1e9
345+ if time is not None :
346+ case .time = time / 1e9
346347 if not correct :
347348 case .result = [Failure (f"Expected '{ expected } ', was: '{ answer } '" )]
348349 self .suite .add_testcase (case )
@@ -366,7 +367,7 @@ def __init__(self) -> None:
366367 self .part_runs = list [BenchmarkListener .PartRun ]()
367368
368369 def puzzle_started (
369- self , year : int , day : int , title : str , plugin : str , user_id : str
370+ self , year : int , day : int , _title : str , plugin : str , user_id : str
370371 ) -> None :
371372 self .year = year
372373 self .day = day
@@ -397,9 +398,9 @@ def part_finished(
397398 self ,
398399 time : int | None ,
399400 part : str ,
400- answer : str | None ,
401- expected : str | None ,
402- correct : bool ,
401+ _answer : str | None ,
402+ _expected : str | None ,
403+ _correct : bool ,
403404 ) -> None :
404405 if time is None :
405406 return
0 commit comments