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 |
|
|
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