1919 -p/--process: use time.process_time() (default is time.perf_counter())
2020 -v/--verbose: print raw timing results; repeat for more digits precision
2121 -u/--unit: set the output time unit (nsec, usec, msec, or sec)
22+ -t/--target_time: if number is 0 the code will run until it
23+ takes *at least* ``target_time`` seconds
2224 -h/--help: print this usage message and exit
2325 --: separate options from statement, use when statement starts with -
2426 statement: statement to be timed (default 'pass')
5961default_number = 1000000
6062default_repeat = 5
6163default_timer = time .perf_counter
62- default_time_taken = 0.2
64+ default_target_time = 0.2
6365
6466_globals = globals
6567
@@ -101,10 +103,10 @@ class Timer:
101103 """
102104
103105 def __init__ (self , stmt = "pass" , setup = "pass" , timer = default_timer ,
104- globals = None , max_time_taken = default_time_taken ):
106+ globals = None , target_time = default_target_time ):
105107 """Constructor. See class doc string."""
106108 self .timer = timer
107- self .max_time_taken = max_time_taken
109+ self .target_time = target_time
108110 local_ns = {}
109111 global_ns = _globals () if globals is None else globals
110112 init = ''
@@ -211,9 +213,9 @@ def repeat(self, repeat=default_repeat, number=default_number):
211213 r .append (t )
212214 return r
213215
214- def autorange (self , callback = None ):
215- """Return the number of loops and time taken so that total time >= max_time_taken
216- (default is 0.2 seconds).
216+ def autorange (self , callback = None , target_time = None ):
217+ """Return the number of loops and time taken so that
218+ total time >= target_time (default is 0.2 seconds).
217219
218220 Calls the timeit method with increasing numbers from the sequence
219221 1, 2, 5, 10, 20, 50, ... until the max_time_taken is reached.
@@ -222,28 +224,32 @@ def autorange(self, callback=None):
222224 If *callback* is given and is not None, it will be called after
223225 each trial with two arguments: ``callback(number, time_taken)``.
224226 """
227+ if target_time is None :
228+ target_time = self .target_time
225229 i = 1
226230 while True :
227231 for j in 1 , 2 , 5 :
228232 number = i * j
229233 time_taken = self .timeit (number )
230234 if callback :
231235 callback (number , time_taken )
232- if time_taken >= self . max_time_taken :
236+ if time_taken >= target_time :
233237 return (number , time_taken )
234238 i *= 10
235239
236240
237241def timeit (stmt = "pass" , setup = "pass" , timer = default_timer ,
238- number = default_number , globals = None , max_time_taken = default_time_taken ):
242+ number = default_number , globals = None ,
243+ target_time = default_target_time ):
239244 """Convenience function to create Timer object and call timeit method."""
240- return Timer (stmt , setup , timer , globals , max_time_taken ).timeit (number )
245+ return Timer (stmt , setup , timer , globals , target_time ).timeit (number )
241246
242247
243248def repeat (stmt = "pass" , setup = "pass" , timer = default_timer ,
244- repeat = default_repeat , number = default_number , globals = None , max_time_taken = default_time_taken ):
249+ repeat = default_repeat , number = default_number ,
250+ globals = None , target_time = default_target_time ):
245251 """Convenience function to create Timer object and call repeat method."""
246- return Timer (stmt , setup , timer , globals , max_time_taken ).repeat (repeat , number )
252+ return Timer (stmt , setup , timer , globals , target_time ).repeat (repeat , number )
247253
248254
249255def main (args = None , * , _wrap_timer = None ):
@@ -279,7 +285,7 @@ def main(args=None, *, _wrap_timer=None):
279285 timer = default_timer
280286 stmt = "\n " .join (args ) or "pass"
281287 number = 0 # auto-determine
282- max_time_taken = default_time_taken
288+ target_time = default_target_time
283289 setup = []
284290 repeat = default_repeat
285291 verbose = 0
@@ -304,8 +310,8 @@ def main(args=None, *, _wrap_timer=None):
304310 repeat = 1
305311 if o in ("-p" , "--process" ):
306312 timer = time .process_time
307- if o in ("-m " , "--max_time_taken " ):
308- max_time_taken = a
313+ if o in ("-t " , "--target_time " ):
314+ target_time = a
309315 if o in ("-v" , "--verbose" ):
310316 if verbose :
311317 precision += 1
@@ -323,7 +329,7 @@ def main(args=None, *, _wrap_timer=None):
323329 if _wrap_timer is not None :
324330 timer = _wrap_timer (timer )
325331
326- t = Timer (stmt , setup , timer , max_time_taken = max_time_taken )
332+ t = Timer (stmt , setup , timer , target_time = target_time )
327333 if number == 0 :
328334 # determine number so that 0.2 <= total time < 2.0
329335 callback = None
@@ -334,7 +340,7 @@ def callback(number, time_taken):
334340 print (msg .format (num = number , s = 's' if plural else '' ,
335341 secs = time_taken , prec = precision ))
336342 try :
337- number , _ = t .autorange (callback )
343+ number , _ = t .autorange (callback , target_time )
338344 except :
339345 t .print_exc ()
340346 return 1
0 commit comments