home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / timeit.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  5.7 KB  |  232 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import gc
  5. import sys
  6. import time
  7.  
  8. try:
  9.     import itertools
  10. except ImportError:
  11.     itertools = None
  12.  
  13. __all__ = [
  14.     'Timer']
  15. dummy_src_name = '<timeit-src>'
  16. default_number = 1000000
  17. default_repeat = 3
  18. if sys.platform == 'win32':
  19.     default_timer = time.clock
  20. else:
  21.     default_timer = time.time
  22. template = '\ndef inner(_it, _timer):\n    %(setup)s\n    _t0 = _timer()\n    for _i in _it:\n        %(stmt)s\n    _t1 = _timer()\n    return _t1 - _t0\n'
  23.  
  24. def reindent(src, indent):
  25.     return src.replace('\n', '\n' + ' ' * indent)
  26.  
  27.  
  28. def _template_func(setup, func):
  29.     
  30.     def inner(_it, _timer, _func = (func,)):
  31.         setup()
  32.         _t0 = _timer()
  33.         for _i in _it:
  34.             _func()
  35.         
  36.         _t1 = _timer()
  37.         return _t1 - _t0
  38.  
  39.     return inner
  40.  
  41.  
  42. class Timer:
  43.     
  44.     def __init__(self, stmt = 'pass', setup = 'pass', timer = default_timer):
  45.         self.timer = timer
  46.         ns = { }
  47.         if isinstance(stmt, basestring):
  48.             stmt = reindent(stmt, 8)
  49.             if isinstance(setup, basestring):
  50.                 setup = reindent(setup, 4)
  51.                 src = template % {
  52.                     'stmt': stmt,
  53.                     'setup': setup }
  54.             elif callable(setup):
  55.                 src = template % {
  56.                     'stmt': stmt,
  57.                     'setup': '_setup()' }
  58.                 ns['_setup'] = setup
  59.             else:
  60.                 raise ValueError('setup is neither a string nor callable')
  61.             self.src = isinstance(setup, basestring)
  62.             code = compile(src, dummy_src_name, 'exec')
  63.             exec code in globals(), ns
  64.             self.inner = ns['inner']
  65.         elif callable(stmt):
  66.             self.src = None
  67.             if isinstance(setup, basestring):
  68.                 _setup = setup
  69.                 
  70.                 def setup():
  71.                     exec _setup in globals(), ns
  72.  
  73.             elif not callable(setup):
  74.                 raise ValueError('setup is neither a string nor callable')
  75.             
  76.             self.inner = _template_func(setup, stmt)
  77.         else:
  78.             raise ValueError('stmt is neither a string nor callable')
  79.         return isinstance(stmt, basestring)
  80.  
  81.     
  82.     def print_exc(self, file = None):
  83.         import linecache
  84.         import traceback
  85.         if self.src is not None:
  86.             linecache.cache[dummy_src_name] = (len(self.src), None, self.src.split('\n'), dummy_src_name)
  87.         
  88.         traceback.print_exc(file = file)
  89.  
  90.     
  91.     def timeit(self, number = default_number):
  92.         if itertools:
  93.             it = itertools.repeat(None, number)
  94.         else:
  95.             it = [
  96.                 None] * number
  97.         gcold = gc.isenabled()
  98.         gc.disable()
  99.         timing = self.inner(it, self.timer)
  100.         if gcold:
  101.             gc.enable()
  102.         
  103.         return timing
  104.  
  105.     
  106.     def repeat(self, repeat = default_repeat, number = default_number):
  107.         r = []
  108.         for i in range(repeat):
  109.             t = self.timeit(number)
  110.             r.append(t)
  111.         
  112.         return r
  113.  
  114.  
  115.  
  116. def timeit(stmt = 'pass', setup = 'pass', timer = default_timer, number = default_number):
  117.     return Timer(stmt, setup, timer).timeit(number)
  118.  
  119.  
  120. def repeat(stmt = 'pass', setup = 'pass', timer = default_timer, repeat = default_repeat, number = default_number):
  121.     return Timer(stmt, setup, timer).repeat(repeat, number)
  122.  
  123.  
  124. def main(args = None):
  125.     if args is None:
  126.         args = sys.argv[1:]
  127.     
  128.     import getopt
  129.     
  130.     try:
  131.         (opts, args) = getopt.getopt(args, 'n:s:r:tcvh', [
  132.             'number=',
  133.             'setup=',
  134.             'repeat=',
  135.             'time',
  136.             'clock',
  137.             'verbose',
  138.             'help'])
  139.     except getopt.error:
  140.         err = None
  141.         print err
  142.         print 'use -h/--help for command line help'
  143.         return 2
  144.  
  145.     timer = default_timer
  146.     if not '\n'.join(args):
  147.         pass
  148.     stmt = 'pass'
  149.     number = 0
  150.     setup = []
  151.     repeat = default_repeat
  152.     verbose = 0
  153.     precision = 3
  154.     for o, a in opts:
  155.         if o in ('-n', '--number'):
  156.             number = int(a)
  157.         
  158.         if o in ('-s', '--setup'):
  159.             setup.append(a)
  160.         
  161.         if o in ('-r', '--repeat'):
  162.             repeat = int(a)
  163.             if repeat <= 0:
  164.                 repeat = 1
  165.             
  166.         
  167.         if o in ('-t', '--time'):
  168.             timer = time.time
  169.         
  170.         if o in ('-c', '--clock'):
  171.             timer = time.clock
  172.         
  173.         if o in ('-v', '--verbose'):
  174.             if verbose:
  175.                 precision += 1
  176.             
  177.             verbose += 1
  178.         
  179.         if o in ('-h', '--help'):
  180.             print __doc__,
  181.             return 0
  182.     
  183.     if not '\n'.join(setup):
  184.         pass
  185.     setup = 'pass'
  186.     import os
  187.     sys.path.insert(0, os.curdir)
  188.     t = Timer(stmt, setup, timer)
  189.     if number == 0:
  190.         for i in range(1, 10):
  191.             number = 10 ** i
  192.             
  193.             try:
  194.                 x = t.timeit(number)
  195.             except:
  196.                 o in ('-h', '--help')
  197.                 t.print_exc()
  198.                 return 1
  199.  
  200.             if x >= 0.2:
  201.                 break
  202.                 continue
  203.             None if verbose else o in ('-h', '--help')
  204.         
  205.     
  206.     
  207.     try:
  208.         r = t.repeat(repeat, number)
  209.     except:
  210.         t.print_exc()
  211.         return 1
  212.  
  213.     best = min(r)
  214.     if verbose:
  215.         print 'raw times:', []([ '%.*g' % (precision, x) for x in r ])
  216.     
  217.     print '%d loops,' % number,
  218.     usec = best * 1e+06 / number
  219.     if usec < 1000:
  220.         print 'best of %d: %.*g usec per loop' % (repeat, precision, usec)
  221.     else:
  222.         msec = usec / 1000
  223.         if msec < 1000:
  224.             print 'best of %d: %.*g msec per loop' % (repeat, precision, msec)
  225.         else:
  226.             sec = msec / 1000
  227.             print 'best of %d: %.*g sec per loop' % (repeat, precision, sec)
  228.  
  229. if __name__ == '__main__':
  230.     sys.exit(main())
  231.  
  232.