Prepare for Github,
[pylit.git] / doc / examples / iterqueue_speed_test.py.txt
blob4cb86b2c4e24141f7138819968921cf1be2d1aae
1 iterqueue_speed_test.py
2 =======================
3 Profiling the iterqueue extended iterator classes
4 -------------------------------------------------
6 ::
8   import sys, os, itertools
9   from timeit import Timer
10   import iterqueue
11   from iterqueue_test import wrappers, peekables, pushables, \
12        state_reporters, iqueues
15   def print_iterator_lists():
16       print "Wrappers"
17       print " ","\n  ".join(wrapper.__name__ for wrapper in wrappers)
18       print "Peekables"
19       print " ","\n  ".join(peekable.__name__ for peekable in peekables)
20       print "Pushables"
21       print " ","\n  ".join(pushable.__name__ for pushable in pushables)
22       print "State Reporters"
23       print " ","\n  ".join(state_reporter.__name__ 
24                        for state_reporter in state_reporters)
25       print "Iterator Queues"
26       print " ","\n  ".join(iqueue.__name__ for iqueue in iqueues)
29   #print_iterator_lists()
31 use cases (benchmarks)
32 ~~~~~~~~~~~~~~~~~~~~~~
36   def loop(iterator):
37       """baseline: empty `for` loop"""
38       for _ in iterator:
39           pass
41   def peek_in_loop(iterator):
42       """peek in every loop"""
43       for _ in iterator:
44           try:
45               iterator.peek()
46           except StopIteration:
47               pass
48       
49   def peek_before_loop(iterator):
50       """peek at first value once, then loop"""
51       try:
52           iterator.peek()
53       except StopIteration:
54           pass
55       for _ in iterator:
56           pass
57       
58   def bool_in_loop(iterator):
59       """test for values in every loop"""
60       for _ in iterator:
61           bool(iterator)
62           
63   def bool_before_loop(iterator):
64       """test for values once, then loop"""
65       bool(iterator)
66       for _ in iterator:
67           pass
70   def time_benchmark(fun, wrappers, iterator):
71       """profile benchmark `fun` with `iterator` wrapped in `wrappers`"""
72       
73       print fun.__doc__, "(%s)"%iterator
74       setup = "import iterqueue_speed_test\nimport iterqueue"
75       benchmark = "iterqueue_speed_test.%s(iterqueue.%s(%s))"
76       stmts = [benchmark%(fun.__name__, wrapper.__name__, iterator) 
77                for wrapper in wrappers]
78       timers = [Timer(stmt=stmt, setup=setup) for stmt in stmts]
79       
80       t_i = [min(timer.repeat(number=1, repeat=3)) for timer in timers]
81       
82       results = ["%.5f s   %s"%(t, wrapper.__name__)
83                  for t, wrapper in zip(t_i, wrappers)]
84       results.sort()
85       print "\n".join(results)
87 time_benchmark(loop, iterqueue.XIter, xrange(1000))
91   time_benchmark(loop, wrappers, xrange(1000))
92   print
93   time_benchmark(peek_before_loop, peekables, xrange(1000))
94   print
95   time_benchmark(peek_in_loop, peekables, xrange(1000))
96   print
97   time_benchmark(bool_before_loop, state_reporters, xrange(1000))
98   print
99   time_benchmark(bool_in_loop, state_reporters, xrange(1000))