##// END OF EJS Templates
Merge pull request #6479 from MechCoder/timeit_warning...
Matthias Bussonnier -
r17887:3c3af1bf merge
parent child Browse files
Show More
@@ -0,0 +1,3 b''
1 Using %timeit prints warnings if there is atleast a 4x difference in timings
2 between the slowest and fastest runs, since this might meant that the multiple
3 runs are not independent of one another. No newline at end of file
@@ -1006,16 +1006,31 b' python-profiler package from non-free.""")'
1006 exec(code, self.shell.user_ns, ns)
1006 exec(code, self.shell.user_ns, ns)
1007 timer.inner = ns["inner"]
1007 timer.inner = ns["inner"]
1008
1008
1009 # This is used to check if there is a huge difference between the
1010 # best and worst timings.
1011 # Issue: https://github.com/ipython/ipython/issues/6471
1012 worst_tuning = 0
1009 if number == 0:
1013 if number == 0:
1010 # determine number so that 0.2 <= total time < 2.0
1014 # determine number so that 0.2 <= total time < 2.0
1011 number = 1
1015 number = 1
1012 for _ in range(1, 10):
1016 for _ in range(1, 10):
1013 if timer.timeit(number) >= 0.2:
1017 time_number = timer.timeit(number)
1018 worst_tuning = max(worst_tuning, time_number / number)
1019 if time_number >= 0.2:
1014 break
1020 break
1015 number *= 10
1021 number *= 10
1016 all_runs = timer.repeat(repeat, number)
1022 all_runs = timer.repeat(repeat, number)
1017 best = min(all_runs) / number
1023 best = min(all_runs) / number
1018 if not quiet :
1024 if not quiet :
1025 worst = max(all_runs) / number
1026 if worst_tuning:
1027 worst = max(worst, worst_tuning)
1028 # Check best timing is greater than zero to avoid a
1029 # ZeroDivisionError.
1030 if worst > 4 * best and best > 0:
1031 print("The slowest run took %0.2f times longer than the "
1032 "fastest. This could mean that an intermediate result "
1033 "is being cached " % (worst / best))
1019 print(u"%d loops, best of %d: %s per loop" % (number, repeat,
1034 print(u"%d loops, best of %d: %s per loop" % (number, repeat,
1020 _format_time(best, precision)))
1035 _format_time(best, precision)))
1021 if tc > tc_min:
1036 if tc > tc_min:
General Comments 0
You need to be logged in to leave comments. Login now