home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / timeit.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  5.6 KB  |  217 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  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 hasattr(setup, '__call__'):
  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 = None
  62.             code = compile(src, dummy_src_name, 'exec')
  63.             exec code in globals(), ns
  64.             self.inner = ns['inner']
  65.         elif hasattr(stmt, '__call__'):
  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 hasattr(setup, '__call__'):
  74.                 raise ValueError('setup is neither a string nor callable')
  75.             self.inner = _template_func(setup, stmt)
  76.         else:
  77.             raise ValueError('stmt is neither a string nor callable')
  78.         return (None, None)
  79.  
  80.     
  81.     def print_exc(self, file = None):
  82.         import linecache
  83.         import traceback
  84.         if self.src is not None:
  85.             linecache.cache[dummy_src_name] = (len(self.src), None, self.src.split('\n'), dummy_src_name)
  86.         traceback.print_exc(file = file)
  87.  
  88.     
  89.     def timeit(self, number = default_number):
  90.         if itertools:
  91.             it = itertools.repeat(None, number)
  92.         else:
  93.             it = [
  94.                 None] * number
  95.         gcold = gc.isenabled()
  96.         gc.disable()
  97.         timing = self.inner(it, self.timer)
  98.         if gcold:
  99.             gc.enable()
  100.         return timing
  101.  
  102.     
  103.     def repeat(self, repeat = default_repeat, number = default_number):
  104.         r = []
  105.         for i in range(repeat):
  106.             t = self.timeit(number)
  107.             r.append(t)
  108.         
  109.         return r
  110.  
  111.  
  112.  
  113. def timeit(stmt = 'pass', setup = 'pass', timer = default_timer, number = default_number):
  114.     return Timer(stmt, setup, timer).timeit(number)
  115.  
  116.  
  117. def repeat(stmt = 'pass', setup = 'pass', timer = default_timer, repeat = default_repeat, number = default_number):
  118.     return Timer(stmt, setup, timer).repeat(repeat, number)
  119.  
  120.  
  121. def main(args = None):
  122.     if args is None:
  123.         args = sys.argv[1:]
  124.     import getopt
  125.     
  126.     try:
  127.         (opts, args) = getopt.getopt(args, 'n:s:r:tcvh', [
  128.             'number=',
  129.             'setup=',
  130.             'repeat=',
  131.             'time',
  132.             'clock',
  133.             'verbose',
  134.             'help'])
  135.     except getopt.error:
  136.         err = None
  137.         print err
  138.         print 'use -h/--help for command line help'
  139.         return 2
  140.  
  141.     timer = default_timer
  142.     if not '\n'.join(args):
  143.         pass
  144.     stmt = 'pass'
  145.     number = 0
  146.     setup = []
  147.     repeat = default_repeat
  148.     verbose = 0
  149.     precision = 3
  150.     for o, a in opts:
  151.         if o in ('-n', '--number'):
  152.             number = int(a)
  153.         if o in ('-s', '--setup'):
  154.             setup.append(a)
  155.         if o in ('-r', '--repeat'):
  156.             repeat = int(a)
  157.             if repeat <= 0:
  158.                 repeat = 1
  159.             
  160.         if o in ('-t', '--time'):
  161.             timer = time.time
  162.         if o in ('-c', '--clock'):
  163.             timer = time.clock
  164.         if o in ('-v', '--verbose'):
  165.             if verbose:
  166.                 precision += 1
  167.             verbose += 1
  168.         if o in ('-h', '--help'):
  169.             print __doc__,
  170.             return 0
  171.     
  172.     if not '\n'.join(setup):
  173.         pass
  174.     setup = 'pass'
  175.     import os
  176.     sys.path.insert(0, os.curdir)
  177.     t = Timer(stmt, setup, timer)
  178.     if number == 0:
  179.         for i in range(1, 10):
  180.             number = 10 ** i
  181.             
  182.             try:
  183.                 x = t.timeit(number)
  184.             except:
  185.                 t.print_exc()
  186.                 return 1
  187.  
  188.             if verbose:
  189.                 print '%d loops -> %.*g secs' % (number, precision, x)
  190.             if x >= 0.2:
  191.                 break
  192.                 continue
  193.     
  194.     try:
  195.         r = t.repeat(repeat, number)
  196.     except:
  197.         t.print_exc()
  198.         return 1
  199.  
  200.     best = min(r)
  201.     if verbose:
  202.         print 'raw times:', ' '.join([ '%.*g' % (precision, x) for x in r ])
  203.     print '%d loops,' % number,
  204.     usec = best * 1e+06 / number
  205.     if usec < 1000:
  206.         print 'best of %d: %.*g usec per loop' % (repeat, precision, usec)
  207.     else:
  208.         msec = usec / 1000
  209.         if msec < 1000:
  210.             print 'best of %d: %.*g msec per loop' % (repeat, precision, msec)
  211.         else:
  212.             sec = msec / 1000
  213.             print 'best of %d: %.*g sec per loop' % (repeat, precision, sec)
  214.  
  215. if __name__ == '__main__':
  216.     sys.exit(main())
  217.