_builtin.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. import sys
  2. try:
  3. reversed = reversed
  4. except NameError:
  5. def reversed(sequence):
  6. """reversed(sequence) -> reverse iterator over values of the sequence
  7. Return a reverse iterator
  8. """
  9. if hasattr(sequence, '__reversed__'):
  10. return sequence.__reversed__()
  11. if not hasattr(sequence, '__getitem__'):
  12. raise TypeError("argument to reversed() must be a sequence")
  13. return reversed_iterator(sequence)
  14. class reversed_iterator(object):
  15. def __init__(self, seq):
  16. self.seq = seq
  17. self.remaining = len(seq)
  18. def __iter__(self):
  19. return self
  20. def next(self):
  21. i = self.remaining
  22. if i > 0:
  23. i -= 1
  24. item = self.seq[i]
  25. self.remaining = i
  26. return item
  27. raise StopIteration
  28. def __length_hint__(self):
  29. return self.remaining
  30. try:
  31. any = any
  32. except NameError:
  33. def any(iterable):
  34. for x in iterable:
  35. if x:
  36. return True
  37. return False
  38. try:
  39. all = all
  40. except NameError:
  41. def all(iterable):
  42. for x in iterable:
  43. if not x:
  44. return False
  45. return True
  46. try:
  47. sorted = sorted
  48. except NameError:
  49. builtin_cmp = cmp # need to use cmp as keyword arg
  50. def sorted(iterable, cmp=None, key=None, reverse=0):
  51. use_cmp = None
  52. if key is not None:
  53. if cmp is None:
  54. def use_cmp(x, y):
  55. return builtin_cmp(x[0], y[0])
  56. else:
  57. def use_cmp(x, y):
  58. return cmp(x[0], y[0])
  59. l = [(key(element), element) for element in iterable]
  60. else:
  61. if cmp is not None:
  62. use_cmp = cmp
  63. l = list(iterable)
  64. if use_cmp is not None:
  65. l.sort(use_cmp)
  66. else:
  67. l.sort()
  68. if reverse:
  69. l.reverse()
  70. if key is not None:
  71. return [element for (_, element) in l]
  72. return l
  73. try:
  74. set, frozenset = set, frozenset
  75. except NameError:
  76. from sets import set, frozenset
  77. # pass through
  78. enumerate = enumerate
  79. try:
  80. BaseException = BaseException
  81. except NameError:
  82. BaseException = Exception
  83. try:
  84. GeneratorExit = GeneratorExit
  85. except NameError:
  86. class GeneratorExit(Exception):
  87. """ This exception is never raised, it is there to make it possible to
  88. write code compatible with CPython 2.5 even in lower CPython
  89. versions."""
  90. pass
  91. GeneratorExit.__module__ = 'exceptions'
  92. _sysex = (KeyboardInterrupt, SystemExit, MemoryError, GeneratorExit)
  93. try:
  94. callable = callable
  95. except NameError:
  96. def callable(obj):
  97. return hasattr(obj, "__call__")
  98. if sys.version_info >= (3, 0):
  99. exec ("print_ = print ; exec_=exec")
  100. import builtins
  101. # some backward compatibility helpers
  102. _basestring = str
  103. def _totext(obj, encoding=None, errors=None):
  104. if isinstance(obj, bytes):
  105. if errors is None:
  106. obj = obj.decode(encoding)
  107. else:
  108. obj = obj.decode(encoding, errors)
  109. elif not isinstance(obj, str):
  110. obj = str(obj)
  111. return obj
  112. def _isbytes(x):
  113. return isinstance(x, bytes)
  114. def _istext(x):
  115. return isinstance(x, str)
  116. text = str
  117. bytes = bytes
  118. def _getimself(function):
  119. return getattr(function, '__self__', None)
  120. def _getfuncdict(function):
  121. return getattr(function, "__dict__", None)
  122. def _getcode(function):
  123. return getattr(function, "__code__", None)
  124. def execfile(fn, globs=None, locs=None):
  125. if globs is None:
  126. back = sys._getframe(1)
  127. globs = back.f_globals
  128. locs = back.f_locals
  129. del back
  130. elif locs is None:
  131. locs = globs
  132. fp = open(fn, "r")
  133. try:
  134. source = fp.read()
  135. finally:
  136. fp.close()
  137. co = compile(source, fn, "exec", dont_inherit=True)
  138. exec_(co, globs, locs)
  139. else:
  140. import __builtin__ as builtins
  141. _totext = unicode
  142. _basestring = basestring
  143. text = unicode
  144. bytes = str
  145. execfile = execfile
  146. callable = callable
  147. def _isbytes(x):
  148. return isinstance(x, str)
  149. def _istext(x):
  150. return isinstance(x, unicode)
  151. def _getimself(function):
  152. return getattr(function, 'im_self', None)
  153. def _getfuncdict(function):
  154. return getattr(function, "__dict__", None)
  155. def _getcode(function):
  156. try:
  157. return getattr(function, "__code__")
  158. except AttributeError:
  159. return getattr(function, "func_code", None)
  160. def print_(*args, **kwargs):
  161. """ minimal backport of py3k print statement. """
  162. sep = ' '
  163. if 'sep' in kwargs:
  164. sep = kwargs.pop('sep')
  165. end = '\n'
  166. if 'end' in kwargs:
  167. end = kwargs.pop('end')
  168. file = 'file' in kwargs and kwargs.pop('file') or sys.stdout
  169. if kwargs:
  170. args = ", ".join([str(x) for x in kwargs])
  171. raise TypeError("invalid keyword arguments: %s" % args)
  172. at_start = True
  173. for x in args:
  174. if not at_start:
  175. file.write(sep)
  176. file.write(str(x))
  177. at_start = False
  178. file.write(end)
  179. def exec_(obj, globals=None, locals=None):
  180. """ minimal backport of py3k exec statement. """
  181. __tracebackhide__ = True
  182. if globals is None:
  183. frame = sys._getframe(1)
  184. globals = frame.f_globals
  185. if locals is None:
  186. locals = frame.f_locals
  187. elif locals is None:
  188. locals = globals
  189. exec2(obj, globals, locals)
  190. if sys.version_info >= (3, 0):
  191. def _reraise(cls, val, tb):
  192. __tracebackhide__ = True
  193. assert hasattr(val, '__traceback__')
  194. raise cls.with_traceback(val, tb)
  195. else:
  196. exec ("""
  197. def _reraise(cls, val, tb):
  198. __tracebackhide__ = True
  199. raise cls, val, tb
  200. def exec2(obj, globals, locals):
  201. __tracebackhide__ = True
  202. exec obj in globals, locals
  203. """)
  204. def _tryimport(*names):
  205. """ return the first successfully imported module. """
  206. assert names
  207. for name in names:
  208. try:
  209. __import__(name)
  210. except ImportError:
  211. excinfo = sys.exc_info()
  212. else:
  213. return sys.modules[name]
  214. _reraise(*excinfo)