@rowstile/cli-linux-x64 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +5 -0
  3. package/package.json +26 -0
  4. package/python/bin/python3.13 +0 -0
  5. package/python/bin/python3.13-config +122 -0
  6. package/python/lib/libpython3.13.so.1.0 +0 -0
  7. package/python/lib/libpython3.so +0 -0
  8. package/python/lib/python3.13/LICENSE.txt +277 -0
  9. package/python/lib/python3.13/__future__.py +147 -0
  10. package/python/lib/python3.13/__hello__.py +16 -0
  11. package/python/lib/python3.13/_aix_support.py +108 -0
  12. package/python/lib/python3.13/_android_support.py +192 -0
  13. package/python/lib/python3.13/_apple_support.py +66 -0
  14. package/python/lib/python3.13/_collections_abc.py +1187 -0
  15. package/python/lib/python3.13/_colorize.py +119 -0
  16. package/python/lib/python3.13/_compat_pickle.py +251 -0
  17. package/python/lib/python3.13/_compression.py +162 -0
  18. package/python/lib/python3.13/_ios_support.py +71 -0
  19. package/python/lib/python3.13/_markupbase.py +396 -0
  20. package/python/lib/python3.13/_opcode_metadata.py +343 -0
  21. package/python/lib/python3.13/_osx_support.py +579 -0
  22. package/python/lib/python3.13/_py_abc.py +147 -0
  23. package/python/lib/python3.13/_pydatetime.py +2640 -0
  24. package/python/lib/python3.13/_pydecimal.py +6356 -0
  25. package/python/lib/python3.13/_pyio.py +2714 -0
  26. package/python/lib/python3.13/_pylong.py +363 -0
  27. package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
  28. package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
  29. package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
  30. package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
  31. package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
  32. package/python/lib/python3.13/_pyrepl/commands.py +492 -0
  33. package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
  34. package/python/lib/python3.13/_pyrepl/console.py +229 -0
  35. package/python/lib/python3.13/_pyrepl/curses.py +33 -0
  36. package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
  37. package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
  38. package/python/lib/python3.13/_pyrepl/input.py +114 -0
  39. package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
  40. package/python/lib/python3.13/_pyrepl/main.py +59 -0
  41. package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
  42. package/python/lib/python3.13/_pyrepl/pager.py +175 -0
  43. package/python/lib/python3.13/_pyrepl/reader.py +764 -0
  44. package/python/lib/python3.13/_pyrepl/readline.py +599 -0
  45. package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
  46. package/python/lib/python3.13/_pyrepl/trace.py +21 -0
  47. package/python/lib/python3.13/_pyrepl/types.py +10 -0
  48. package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
  49. package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
  50. package/python/lib/python3.13/_pyrepl/utils.py +83 -0
  51. package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
  52. package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
  53. package/python/lib/python3.13/_sitebuiltins.py +91 -0
  54. package/python/lib/python3.13/_strptime.py +800 -0
  55. package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
  56. package/python/lib/python3.13/_threading_local.py +120 -0
  57. package/python/lib/python3.13/_weakrefset.py +205 -0
  58. package/python/lib/python3.13/abc.py +188 -0
  59. package/python/lib/python3.13/antigravity.py +17 -0
  60. package/python/lib/python3.13/argparse.py +2690 -0
  61. package/python/lib/python3.13/ast.py +1865 -0
  62. package/python/lib/python3.13/asyncio/__init__.py +47 -0
  63. package/python/lib/python3.13/asyncio/__main__.py +211 -0
  64. package/python/lib/python3.13/asyncio/base_events.py +2086 -0
  65. package/python/lib/python3.13/asyncio/base_futures.py +67 -0
  66. package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
  67. package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
  68. package/python/lib/python3.13/asyncio/constants.py +41 -0
  69. package/python/lib/python3.13/asyncio/coroutines.py +109 -0
  70. package/python/lib/python3.13/asyncio/events.py +885 -0
  71. package/python/lib/python3.13/asyncio/exceptions.py +62 -0
  72. package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
  73. package/python/lib/python3.13/asyncio/futures.py +425 -0
  74. package/python/lib/python3.13/asyncio/locks.py +617 -0
  75. package/python/lib/python3.13/asyncio/log.py +7 -0
  76. package/python/lib/python3.13/asyncio/mixins.py +21 -0
  77. package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
  78. package/python/lib/python3.13/asyncio/protocols.py +216 -0
  79. package/python/lib/python3.13/asyncio/queues.py +309 -0
  80. package/python/lib/python3.13/asyncio/runners.py +217 -0
  81. package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
  82. package/python/lib/python3.13/asyncio/sslproto.py +929 -0
  83. package/python/lib/python3.13/asyncio/staggered.py +174 -0
  84. package/python/lib/python3.13/asyncio/streams.py +787 -0
  85. package/python/lib/python3.13/asyncio/subprocess.py +229 -0
  86. package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
  87. package/python/lib/python3.13/asyncio/tasks.py +1121 -0
  88. package/python/lib/python3.13/asyncio/threads.py +26 -0
  89. package/python/lib/python3.13/asyncio/timeouts.py +185 -0
  90. package/python/lib/python3.13/asyncio/transports.py +337 -0
  91. package/python/lib/python3.13/asyncio/trsock.py +98 -0
  92. package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
  93. package/python/lib/python3.13/asyncio/windows_events.py +906 -0
  94. package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
  95. package/python/lib/python3.13/base64.py +628 -0
  96. package/python/lib/python3.13/bdb.py +973 -0
  97. package/python/lib/python3.13/bisect.py +118 -0
  98. package/python/lib/python3.13/bz2.py +352 -0
  99. package/python/lib/python3.13/cProfile.py +197 -0
  100. package/python/lib/python3.13/calendar.py +813 -0
  101. package/python/lib/python3.13/cmd.py +409 -0
  102. package/python/lib/python3.13/code.py +386 -0
  103. package/python/lib/python3.13/codecs.py +1132 -0
  104. package/python/lib/python3.13/codeop.py +155 -0
  105. package/python/lib/python3.13/collections/__init__.py +1603 -0
  106. package/python/lib/python3.13/colorsys.py +166 -0
  107. package/python/lib/python3.13/compileall.py +470 -0
  108. package/python/lib/python3.13/concurrent/__init__.py +1 -0
  109. package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
  110. package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
  111. package/python/lib/python3.13/concurrent/futures/process.py +892 -0
  112. package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
  113. package/python/lib/python3.13/configparser.py +1396 -0
  114. package/python/lib/python3.13/contextlib.py +814 -0
  115. package/python/lib/python3.13/contextvars.py +4 -0
  116. package/python/lib/python3.13/copy.py +306 -0
  117. package/python/lib/python3.13/copyreg.py +217 -0
  118. package/python/lib/python3.13/csv.py +527 -0
  119. package/python/lib/python3.13/ctypes/__init__.py +605 -0
  120. package/python/lib/python3.13/ctypes/_aix.py +327 -0
  121. package/python/lib/python3.13/ctypes/_endian.py +78 -0
  122. package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
  123. package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
  124. package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
  125. package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
  126. package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
  127. package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
  128. package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
  129. package/python/lib/python3.13/ctypes/util.py +387 -0
  130. package/python/lib/python3.13/ctypes/wintypes.py +202 -0
  131. package/python/lib/python3.13/curses/__init__.py +101 -0
  132. package/python/lib/python3.13/curses/ascii.py +99 -0
  133. package/python/lib/python3.13/curses/has_key.py +192 -0
  134. package/python/lib/python3.13/curses/panel.py +6 -0
  135. package/python/lib/python3.13/curses/textpad.py +236 -0
  136. package/python/lib/python3.13/dataclasses.py +1679 -0
  137. package/python/lib/python3.13/datetime.py +9 -0
  138. package/python/lib/python3.13/dbm/__init__.py +194 -0
  139. package/python/lib/python3.13/dbm/dumb.py +319 -0
  140. package/python/lib/python3.13/dbm/gnu.py +3 -0
  141. package/python/lib/python3.13/dbm/ndbm.py +3 -0
  142. package/python/lib/python3.13/dbm/sqlite3.py +144 -0
  143. package/python/lib/python3.13/decimal.py +109 -0
  144. package/python/lib/python3.13/difflib.py +2058 -0
  145. package/python/lib/python3.13/dis.py +1075 -0
  146. package/python/lib/python3.13/doctest.py +2919 -0
  147. package/python/lib/python3.13/email/__init__.py +61 -0
  148. package/python/lib/python3.13/email/_encoded_words.py +233 -0
  149. package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
  150. package/python/lib/python3.13/email/_parseaddr.py +563 -0
  151. package/python/lib/python3.13/email/_policybase.py +382 -0
  152. package/python/lib/python3.13/email/architecture.rst +216 -0
  153. package/python/lib/python3.13/email/base64mime.py +115 -0
  154. package/python/lib/python3.13/email/charset.py +396 -0
  155. package/python/lib/python3.13/email/contentmanager.py +254 -0
  156. package/python/lib/python3.13/email/encoders.py +65 -0
  157. package/python/lib/python3.13/email/errors.py +117 -0
  158. package/python/lib/python3.13/email/feedparser.py +536 -0
  159. package/python/lib/python3.13/email/generator.py +530 -0
  160. package/python/lib/python3.13/email/header.py +582 -0
  161. package/python/lib/python3.13/email/headerregistry.py +618 -0
  162. package/python/lib/python3.13/email/iterators.py +68 -0
  163. package/python/lib/python3.13/email/message.py +1217 -0
  164. package/python/lib/python3.13/email/mime/__init__.py +0 -0
  165. package/python/lib/python3.13/email/mime/application.py +37 -0
  166. package/python/lib/python3.13/email/mime/audio.py +97 -0
  167. package/python/lib/python3.13/email/mime/base.py +29 -0
  168. package/python/lib/python3.13/email/mime/image.py +152 -0
  169. package/python/lib/python3.13/email/mime/message.py +33 -0
  170. package/python/lib/python3.13/email/mime/multipart.py +47 -0
  171. package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
  172. package/python/lib/python3.13/email/mime/text.py +40 -0
  173. package/python/lib/python3.13/email/parser.py +127 -0
  174. package/python/lib/python3.13/email/policy.py +232 -0
  175. package/python/lib/python3.13/email/quoprimime.py +300 -0
  176. package/python/lib/python3.13/email/utils.py +497 -0
  177. package/python/lib/python3.13/encodings/__init__.py +179 -0
  178. package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
  179. package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
  180. package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
  181. package/python/lib/python3.13/encodings/aliases.py +560 -0
  182. package/python/lib/python3.13/encodings/ascii.py +50 -0
  183. package/python/lib/python3.13/encodings/base64_codec.py +55 -0
  184. package/python/lib/python3.13/encodings/big5.py +39 -0
  185. package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
  186. package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
  187. package/python/lib/python3.13/encodings/charmap.py +69 -0
  188. package/python/lib/python3.13/encodings/cp037.py +307 -0
  189. package/python/lib/python3.13/encodings/cp1006.py +307 -0
  190. package/python/lib/python3.13/encodings/cp1026.py +307 -0
  191. package/python/lib/python3.13/encodings/cp1125.py +698 -0
  192. package/python/lib/python3.13/encodings/cp1140.py +307 -0
  193. package/python/lib/python3.13/encodings/cp1250.py +307 -0
  194. package/python/lib/python3.13/encodings/cp1251.py +307 -0
  195. package/python/lib/python3.13/encodings/cp1252.py +307 -0
  196. package/python/lib/python3.13/encodings/cp1253.py +307 -0
  197. package/python/lib/python3.13/encodings/cp1254.py +307 -0
  198. package/python/lib/python3.13/encodings/cp1255.py +307 -0
  199. package/python/lib/python3.13/encodings/cp1256.py +307 -0
  200. package/python/lib/python3.13/encodings/cp1257.py +307 -0
  201. package/python/lib/python3.13/encodings/cp1258.py +307 -0
  202. package/python/lib/python3.13/encodings/cp273.py +307 -0
  203. package/python/lib/python3.13/encodings/cp424.py +307 -0
  204. package/python/lib/python3.13/encodings/cp437.py +698 -0
  205. package/python/lib/python3.13/encodings/cp500.py +307 -0
  206. package/python/lib/python3.13/encodings/cp720.py +309 -0
  207. package/python/lib/python3.13/encodings/cp737.py +698 -0
  208. package/python/lib/python3.13/encodings/cp775.py +697 -0
  209. package/python/lib/python3.13/encodings/cp850.py +698 -0
  210. package/python/lib/python3.13/encodings/cp852.py +698 -0
  211. package/python/lib/python3.13/encodings/cp855.py +698 -0
  212. package/python/lib/python3.13/encodings/cp856.py +307 -0
  213. package/python/lib/python3.13/encodings/cp857.py +694 -0
  214. package/python/lib/python3.13/encodings/cp858.py +698 -0
  215. package/python/lib/python3.13/encodings/cp860.py +698 -0
  216. package/python/lib/python3.13/encodings/cp861.py +698 -0
  217. package/python/lib/python3.13/encodings/cp862.py +698 -0
  218. package/python/lib/python3.13/encodings/cp863.py +698 -0
  219. package/python/lib/python3.13/encodings/cp864.py +690 -0
  220. package/python/lib/python3.13/encodings/cp865.py +698 -0
  221. package/python/lib/python3.13/encodings/cp866.py +698 -0
  222. package/python/lib/python3.13/encodings/cp869.py +689 -0
  223. package/python/lib/python3.13/encodings/cp874.py +307 -0
  224. package/python/lib/python3.13/encodings/cp875.py +307 -0
  225. package/python/lib/python3.13/encodings/cp932.py +39 -0
  226. package/python/lib/python3.13/encodings/cp949.py +39 -0
  227. package/python/lib/python3.13/encodings/cp950.py +39 -0
  228. package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
  229. package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
  230. package/python/lib/python3.13/encodings/euc_jp.py +39 -0
  231. package/python/lib/python3.13/encodings/euc_kr.py +39 -0
  232. package/python/lib/python3.13/encodings/gb18030.py +39 -0
  233. package/python/lib/python3.13/encodings/gb2312.py +39 -0
  234. package/python/lib/python3.13/encodings/gbk.py +39 -0
  235. package/python/lib/python3.13/encodings/hex_codec.py +55 -0
  236. package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
  237. package/python/lib/python3.13/encodings/hz.py +39 -0
  238. package/python/lib/python3.13/encodings/idna.py +387 -0
  239. package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
  240. package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
  241. package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
  242. package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
  243. package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
  244. package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
  245. package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
  246. package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
  247. package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
  248. package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
  249. package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
  250. package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
  251. package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
  252. package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
  253. package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
  254. package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
  255. package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
  256. package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
  257. package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
  258. package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
  259. package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
  260. package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
  261. package/python/lib/python3.13/encodings/johab.py +39 -0
  262. package/python/lib/python3.13/encodings/koi8_r.py +307 -0
  263. package/python/lib/python3.13/encodings/koi8_t.py +308 -0
  264. package/python/lib/python3.13/encodings/koi8_u.py +307 -0
  265. package/python/lib/python3.13/encodings/kz1048.py +307 -0
  266. package/python/lib/python3.13/encodings/latin_1.py +50 -0
  267. package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
  268. package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
  269. package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
  270. package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
  271. package/python/lib/python3.13/encodings/mac_greek.py +307 -0
  272. package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
  273. package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
  274. package/python/lib/python3.13/encodings/mac_roman.py +307 -0
  275. package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
  276. package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
  277. package/python/lib/python3.13/encodings/mbcs.py +47 -0
  278. package/python/lib/python3.13/encodings/oem.py +41 -0
  279. package/python/lib/python3.13/encodings/palmos.py +308 -0
  280. package/python/lib/python3.13/encodings/ptcp154.py +312 -0
  281. package/python/lib/python3.13/encodings/punycode.py +253 -0
  282. package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
  283. package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
  284. package/python/lib/python3.13/encodings/rot_13.py +113 -0
  285. package/python/lib/python3.13/encodings/shift_jis.py +39 -0
  286. package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
  287. package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
  288. package/python/lib/python3.13/encodings/tis_620.py +307 -0
  289. package/python/lib/python3.13/encodings/undefined.py +49 -0
  290. package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
  291. package/python/lib/python3.13/encodings/utf_16.py +155 -0
  292. package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
  293. package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
  294. package/python/lib/python3.13/encodings/utf_32.py +150 -0
  295. package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
  296. package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
  297. package/python/lib/python3.13/encodings/utf_7.py +38 -0
  298. package/python/lib/python3.13/encodings/utf_8.py +42 -0
  299. package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
  300. package/python/lib/python3.13/encodings/uu_codec.py +103 -0
  301. package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
  302. package/python/lib/python3.13/enum.py +2183 -0
  303. package/python/lib/python3.13/filecmp.py +320 -0
  304. package/python/lib/python3.13/fileinput.py +442 -0
  305. package/python/lib/python3.13/fnmatch.py +192 -0
  306. package/python/lib/python3.13/fractions.py +1043 -0
  307. package/python/lib/python3.13/ftplib.py +975 -0
  308. package/python/lib/python3.13/functools.py +1036 -0
  309. package/python/lib/python3.13/genericpath.py +200 -0
  310. package/python/lib/python3.13/getopt.py +215 -0
  311. package/python/lib/python3.13/getpass.py +192 -0
  312. package/python/lib/python3.13/gettext.py +657 -0
  313. package/python/lib/python3.13/glob.py +572 -0
  314. package/python/lib/python3.13/graphlib.py +250 -0
  315. package/python/lib/python3.13/gzip.py +693 -0
  316. package/python/lib/python3.13/hashlib.py +255 -0
  317. package/python/lib/python3.13/heapq.py +603 -0
  318. package/python/lib/python3.13/hmac.py +220 -0
  319. package/python/lib/python3.13/html/__init__.py +132 -0
  320. package/python/lib/python3.13/html/entities.py +2513 -0
  321. package/python/lib/python3.13/html/parser.py +583 -0
  322. package/python/lib/python3.13/http/__init__.py +202 -0
  323. package/python/lib/python3.13/http/client.py +1598 -0
  324. package/python/lib/python3.13/http/cookiejar.py +2122 -0
  325. package/python/lib/python3.13/http/cookies.py +635 -0
  326. package/python/lib/python3.13/http/server.py +1355 -0
  327. package/python/lib/python3.13/imaplib.py +1769 -0
  328. package/python/lib/python3.13/importlib/__init__.py +136 -0
  329. package/python/lib/python3.13/importlib/_abc.py +39 -0
  330. package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
  331. package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
  332. package/python/lib/python3.13/importlib/abc.py +243 -0
  333. package/python/lib/python3.13/importlib/machinery.py +21 -0
  334. package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
  335. package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
  336. package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
  337. package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
  338. package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
  339. package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
  340. package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
  341. package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
  342. package/python/lib/python3.13/importlib/readers.py +12 -0
  343. package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
  344. package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
  345. package/python/lib/python3.13/importlib/resources/_common.py +211 -0
  346. package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
  347. package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
  348. package/python/lib/python3.13/importlib/resources/abc.py +173 -0
  349. package/python/lib/python3.13/importlib/resources/readers.py +203 -0
  350. package/python/lib/python3.13/importlib/resources/simple.py +106 -0
  351. package/python/lib/python3.13/importlib/simple.py +14 -0
  352. package/python/lib/python3.13/importlib/util.py +274 -0
  353. package/python/lib/python3.13/inspect.py +3479 -0
  354. package/python/lib/python3.13/io.py +99 -0
  355. package/python/lib/python3.13/ipaddress.py +2440 -0
  356. package/python/lib/python3.13/json/__init__.py +365 -0
  357. package/python/lib/python3.13/json/decoder.py +364 -0
  358. package/python/lib/python3.13/json/encoder.py +446 -0
  359. package/python/lib/python3.13/json/scanner.py +73 -0
  360. package/python/lib/python3.13/json/tool.py +90 -0
  361. package/python/lib/python3.13/keyword.py +64 -0
  362. package/python/lib/python3.13/lib-dynload/.empty +0 -0
  363. package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
  364. package/python/lib/python3.13/linecache.py +236 -0
  365. package/python/lib/python3.13/locale.py +1987 -0
  366. package/python/lib/python3.13/logging/__init__.py +2330 -0
  367. package/python/lib/python3.13/logging/config.py +1080 -0
  368. package/python/lib/python3.13/logging/handlers.py +1629 -0
  369. package/python/lib/python3.13/lzma.py +364 -0
  370. package/python/lib/python3.13/mailbox.py +2219 -0
  371. package/python/lib/python3.13/mimetypes.py +679 -0
  372. package/python/lib/python3.13/modulefinder.py +671 -0
  373. package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
  374. package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
  375. package/python/lib/python3.13/multiprocessing/context.py +383 -0
  376. package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
  377. package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
  378. package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
  379. package/python/lib/python3.13/multiprocessing/heap.py +337 -0
  380. package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
  381. package/python/lib/python3.13/multiprocessing/pool.py +957 -0
  382. package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
  383. package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
  384. package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
  385. package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
  386. package/python/lib/python3.13/multiprocessing/process.py +436 -0
  387. package/python/lib/python3.13/multiprocessing/queues.py +399 -0
  388. package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
  389. package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
  390. package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
  391. package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
  392. package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
  393. package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
  394. package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
  395. package/python/lib/python3.13/multiprocessing/util.py +562 -0
  396. package/python/lib/python3.13/netrc.py +199 -0
  397. package/python/lib/python3.13/ntpath.py +872 -0
  398. package/python/lib/python3.13/nturl2path.py +69 -0
  399. package/python/lib/python3.13/numbers.py +427 -0
  400. package/python/lib/python3.13/opcode.py +115 -0
  401. package/python/lib/python3.13/operator.py +467 -0
  402. package/python/lib/python3.13/optparse.py +1681 -0
  403. package/python/lib/python3.13/os.py +1184 -0
  404. package/python/lib/python3.13/pathlib/__init__.py +12 -0
  405. package/python/lib/python3.13/pathlib/_abc.py +930 -0
  406. package/python/lib/python3.13/pathlib/_local.py +861 -0
  407. package/python/lib/python3.13/pdb.py +2550 -0
  408. package/python/lib/python3.13/pickle.py +1860 -0
  409. package/python/lib/python3.13/pickletools.py +2904 -0
  410. package/python/lib/python3.13/pkgutil.py +529 -0
  411. package/python/lib/python3.13/platform.py +1454 -0
  412. package/python/lib/python3.13/plistlib.py +948 -0
  413. package/python/lib/python3.13/poplib.py +477 -0
  414. package/python/lib/python3.13/posixpath.py +578 -0
  415. package/python/lib/python3.13/pprint.py +658 -0
  416. package/python/lib/python3.13/profile.py +616 -0
  417. package/python/lib/python3.13/pstats.py +778 -0
  418. package/python/lib/python3.13/pty.py +211 -0
  419. package/python/lib/python3.13/py_compile.py +212 -0
  420. package/python/lib/python3.13/pyclbr.py +314 -0
  421. package/python/lib/python3.13/pydoc.py +2861 -0
  422. package/python/lib/python3.13/queue.py +383 -0
  423. package/python/lib/python3.13/quopri.py +237 -0
  424. package/python/lib/python3.13/random.py +1078 -0
  425. package/python/lib/python3.13/re/__init__.py +428 -0
  426. package/python/lib/python3.13/re/_casefix.py +106 -0
  427. package/python/lib/python3.13/re/_compiler.py +768 -0
  428. package/python/lib/python3.13/re/_constants.py +222 -0
  429. package/python/lib/python3.13/re/_parser.py +1081 -0
  430. package/python/lib/python3.13/reprlib.py +230 -0
  431. package/python/lib/python3.13/rlcompleter.py +222 -0
  432. package/python/lib/python3.13/runpy.py +326 -0
  433. package/python/lib/python3.13/sched.py +167 -0
  434. package/python/lib/python3.13/secrets.py +71 -0
  435. package/python/lib/python3.13/selectors.py +603 -0
  436. package/python/lib/python3.13/shelve.py +250 -0
  437. package/python/lib/python3.13/shlex.py +345 -0
  438. package/python/lib/python3.13/shutil.py +1569 -0
  439. package/python/lib/python3.13/signal.py +94 -0
  440. package/python/lib/python3.13/site.py +773 -0
  441. package/python/lib/python3.13/smtplib.py +1123 -0
  442. package/python/lib/python3.13/socket.py +988 -0
  443. package/python/lib/python3.13/socketserver.py +863 -0
  444. package/python/lib/python3.13/sqlite3/__init__.py +70 -0
  445. package/python/lib/python3.13/sqlite3/__main__.py +139 -0
  446. package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
  447. package/python/lib/python3.13/sqlite3/dump.py +118 -0
  448. package/python/lib/python3.13/sre_compile.py +7 -0
  449. package/python/lib/python3.13/sre_constants.py +7 -0
  450. package/python/lib/python3.13/sre_parse.py +7 -0
  451. package/python/lib/python3.13/ssl.py +1541 -0
  452. package/python/lib/python3.13/stat.py +212 -0
  453. package/python/lib/python3.13/statistics.py +1817 -0
  454. package/python/lib/python3.13/string.py +314 -0
  455. package/python/lib/python3.13/stringprep.py +272 -0
  456. package/python/lib/python3.13/struct.py +15 -0
  457. package/python/lib/python3.13/subprocess.py +2258 -0
  458. package/python/lib/python3.13/symtable.py +414 -0
  459. package/python/lib/python3.13/sysconfig/__init__.py +734 -0
  460. package/python/lib/python3.13/sysconfig/__main__.py +248 -0
  461. package/python/lib/python3.13/tabnanny.py +340 -0
  462. package/python/lib/python3.13/tarfile.py +3136 -0
  463. package/python/lib/python3.13/tempfile.py +958 -0
  464. package/python/lib/python3.13/textwrap.py +497 -0
  465. package/python/lib/python3.13/this.py +28 -0
  466. package/python/lib/python3.13/threading.py +1602 -0
  467. package/python/lib/python3.13/timeit.py +381 -0
  468. package/python/lib/python3.13/token.py +141 -0
  469. package/python/lib/python3.13/tokenize.py +592 -0
  470. package/python/lib/python3.13/tomllib/__init__.py +10 -0
  471. package/python/lib/python3.13/tomllib/_parser.py +703 -0
  472. package/python/lib/python3.13/tomllib/_re.py +107 -0
  473. package/python/lib/python3.13/tomllib/_types.py +10 -0
  474. package/python/lib/python3.13/tomllib/mypy.ini +15 -0
  475. package/python/lib/python3.13/trace.py +754 -0
  476. package/python/lib/python3.13/traceback.py +1639 -0
  477. package/python/lib/python3.13/tracemalloc.py +560 -0
  478. package/python/lib/python3.13/tty.py +73 -0
  479. package/python/lib/python3.13/types.py +346 -0
  480. package/python/lib/python3.13/typing.py +3846 -0
  481. package/python/lib/python3.13/unittest/__init__.py +80 -0
  482. package/python/lib/python3.13/unittest/__main__.py +18 -0
  483. package/python/lib/python3.13/unittest/_log.py +86 -0
  484. package/python/lib/python3.13/unittest/async_case.py +146 -0
  485. package/python/lib/python3.13/unittest/case.py +1478 -0
  486. package/python/lib/python3.13/unittest/loader.py +460 -0
  487. package/python/lib/python3.13/unittest/main.py +280 -0
  488. package/python/lib/python3.13/unittest/mock.py +3189 -0
  489. package/python/lib/python3.13/unittest/result.py +256 -0
  490. package/python/lib/python3.13/unittest/runner.py +292 -0
  491. package/python/lib/python3.13/unittest/signals.py +71 -0
  492. package/python/lib/python3.13/unittest/suite.py +379 -0
  493. package/python/lib/python3.13/unittest/util.py +170 -0
  494. package/python/lib/python3.13/urllib/__init__.py +0 -0
  495. package/python/lib/python3.13/urllib/error.py +74 -0
  496. package/python/lib/python3.13/urllib/parse.py +1264 -0
  497. package/python/lib/python3.13/urllib/request.py +2796 -0
  498. package/python/lib/python3.13/urllib/response.py +84 -0
  499. package/python/lib/python3.13/urllib/robotparser.py +363 -0
  500. package/python/lib/python3.13/uuid.py +784 -0
  501. package/python/lib/python3.13/warnings.py +735 -0
  502. package/python/lib/python3.13/wave.py +665 -0
  503. package/python/lib/python3.13/weakref.py +674 -0
  504. package/python/lib/python3.13/webbrowser.py +724 -0
  505. package/python/lib/python3.13/wsgiref/__init__.py +25 -0
  506. package/python/lib/python3.13/wsgiref/handlers.py +575 -0
  507. package/python/lib/python3.13/wsgiref/headers.py +192 -0
  508. package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
  509. package/python/lib/python3.13/wsgiref/types.py +54 -0
  510. package/python/lib/python3.13/wsgiref/util.py +159 -0
  511. package/python/lib/python3.13/wsgiref/validate.py +438 -0
  512. package/python/lib/python3.13/xml/__init__.py +20 -0
  513. package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
  514. package/python/lib/python3.13/xml/dom/__init__.py +140 -0
  515. package/python/lib/python3.13/xml/dom/domreg.py +99 -0
  516. package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
  517. package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
  518. package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
  519. package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
  520. package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
  521. package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
  522. package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
  523. package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
  524. package/python/lib/python3.13/xml/etree/__init__.py +33 -0
  525. package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
  526. package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
  527. package/python/lib/python3.13/xml/parsers/expat.py +8 -0
  528. package/python/lib/python3.13/xml/sax/__init__.py +94 -0
  529. package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
  530. package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
  531. package/python/lib/python3.13/xml/sax/handler.py +387 -0
  532. package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
  533. package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
  534. package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
  535. package/python/lib/python3.13/xmlrpc/client.py +1503 -0
  536. package/python/lib/python3.13/xmlrpc/server.py +1002 -0
  537. package/python/lib/python3.13/zipapp.py +229 -0
  538. package/python/lib/python3.13/zipfile/__init__.py +2391 -0
  539. package/python/lib/python3.13/zipfile/__main__.py +4 -0
  540. package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
  541. package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
  542. package/python/lib/python3.13/zipimport.py +803 -0
  543. package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
  544. package/python/lib/python3.13/zoneinfo/_common.py +172 -0
  545. package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
  546. package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
  547. package/python/licenses/LICENSE.bdb.txt +126 -0
  548. package/python/licenses/LICENSE.bzip2.txt +37 -0
  549. package/python/licenses/LICENSE.cpython.txt +771 -0
  550. package/python/licenses/LICENSE.expat.txt +21 -0
  551. package/python/licenses/LICENSE.libX11.txt +942 -0
  552. package/python/licenses/LICENSE.libXau.txt +21 -0
  553. package/python/licenses/LICENSE.libedit.txt +29 -0
  554. package/python/licenses/LICENSE.libffi.txt +21 -0
  555. package/python/licenses/LICENSE.liblzma.txt +13 -0
  556. package/python/licenses/LICENSE.libuuid.txt +27 -0
  557. package/python/licenses/LICENSE.libxcb.txt +30 -0
  558. package/python/licenses/LICENSE.mpdecimal.txt +24 -0
  559. package/python/licenses/LICENSE.ncurses.txt +29 -0
  560. package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
  561. package/python/licenses/LICENSE.openssl-3.txt +177 -0
  562. package/python/licenses/LICENSE.sqlite.txt +23 -0
  563. package/python/licenses/LICENSE.tcl.txt +40 -0
  564. package/python/licenses/LICENSE.tix.txt +54 -0
  565. package/python/licenses/LICENSE.zlib.txt +21 -0
@@ -0,0 +1,754 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # portions copyright 2001, Autonomous Zones Industries, Inc., all rights...
4
+ # err... reserved and offered to the public under the terms of the
5
+ # Python 2.2 license.
6
+ # Author: Zooko O'Whielacronx
7
+ # http://zooko.com/
8
+ # mailto:zooko@zooko.com
9
+ #
10
+ # Copyright 2000, Mojam Media, Inc., all rights reserved.
11
+ # Author: Skip Montanaro
12
+ #
13
+ # Copyright 1999, Bioreason, Inc., all rights reserved.
14
+ # Author: Andrew Dalke
15
+ #
16
+ # Copyright 1995-1997, Automatrix, Inc., all rights reserved.
17
+ # Author: Skip Montanaro
18
+ #
19
+ # Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved.
20
+ #
21
+ #
22
+ # Permission to use, copy, modify, and distribute this Python software and
23
+ # its associated documentation for any purpose without fee is hereby
24
+ # granted, provided that the above copyright notice appears in all copies,
25
+ # and that both that copyright notice and this permission notice appear in
26
+ # supporting documentation, and that the name of neither Automatrix,
27
+ # Bioreason or Mojam Media be used in advertising or publicity pertaining to
28
+ # distribution of the software without specific, written prior permission.
29
+ #
30
+ """program/module to trace Python program or function execution
31
+
32
+ Sample use, command line:
33
+ trace.py -c -f counts --ignore-dir '$prefix' spam.py eggs
34
+ trace.py -t --ignore-dir '$prefix' spam.py eggs
35
+ trace.py --trackcalls spam.py eggs
36
+
37
+ Sample use, programmatically
38
+ import sys
39
+
40
+ # create a Trace object, telling it what to ignore, and whether to
41
+ # do tracing or line-counting or both.
42
+ tracer = trace.Trace(ignoredirs=[sys.base_prefix, sys.base_exec_prefix,],
43
+ trace=0, count=1)
44
+ # run the new command using the given tracer
45
+ tracer.run('main()')
46
+ # make a report, placing output in /tmp
47
+ r = tracer.results()
48
+ r.write_results(show_missing=True, coverdir="/tmp")
49
+ """
50
+ __all__ = ['Trace', 'CoverageResults']
51
+
52
+ import io
53
+ import linecache
54
+ import os
55
+ import sys
56
+ import sysconfig
57
+ import token
58
+ import tokenize
59
+ import inspect
60
+ import gc
61
+ import dis
62
+ import pickle
63
+ from time import monotonic as _time
64
+
65
+ import threading
66
+
67
+ PRAGMA_NOCOVER = "#pragma NO COVER"
68
+
69
+ class _Ignore:
70
+ def __init__(self, modules=None, dirs=None):
71
+ self._mods = set() if not modules else set(modules)
72
+ self._dirs = [] if not dirs else [os.path.normpath(d)
73
+ for d in dirs]
74
+ self._ignore = { '<string>': 1 }
75
+
76
+ def names(self, filename, modulename):
77
+ if modulename in self._ignore:
78
+ return self._ignore[modulename]
79
+
80
+ # haven't seen this one before, so see if the module name is
81
+ # on the ignore list.
82
+ if modulename in self._mods: # Identical names, so ignore
83
+ self._ignore[modulename] = 1
84
+ return 1
85
+
86
+ # check if the module is a proper submodule of something on
87
+ # the ignore list
88
+ for mod in self._mods:
89
+ # Need to take some care since ignoring
90
+ # "cmp" mustn't mean ignoring "cmpcache" but ignoring
91
+ # "Spam" must also mean ignoring "Spam.Eggs".
92
+ if modulename.startswith(mod + '.'):
93
+ self._ignore[modulename] = 1
94
+ return 1
95
+
96
+ # Now check that filename isn't in one of the directories
97
+ if filename is None:
98
+ # must be a built-in, so we must ignore
99
+ self._ignore[modulename] = 1
100
+ return 1
101
+
102
+ # Ignore a file when it contains one of the ignorable paths
103
+ for d in self._dirs:
104
+ # The '+ os.sep' is to ensure that d is a parent directory,
105
+ # as compared to cases like:
106
+ # d = "/usr/local"
107
+ # filename = "/usr/local.py"
108
+ # or
109
+ # d = "/usr/local.py"
110
+ # filename = "/usr/local.py"
111
+ if filename.startswith(d + os.sep):
112
+ self._ignore[modulename] = 1
113
+ return 1
114
+
115
+ # Tried the different ways, so we don't ignore this module
116
+ self._ignore[modulename] = 0
117
+ return 0
118
+
119
+ def _modname(path):
120
+ """Return a plausible module name for the path."""
121
+
122
+ base = os.path.basename(path)
123
+ filename, ext = os.path.splitext(base)
124
+ return filename
125
+
126
+ def _fullmodname(path):
127
+ """Return a plausible module name for the path."""
128
+
129
+ # If the file 'path' is part of a package, then the filename isn't
130
+ # enough to uniquely identify it. Try to do the right thing by
131
+ # looking in sys.path for the longest matching prefix. We'll
132
+ # assume that the rest is the package name.
133
+
134
+ comparepath = os.path.normcase(path)
135
+ longest = ""
136
+ for dir in sys.path:
137
+ dir = os.path.normcase(dir)
138
+ if comparepath.startswith(dir) and comparepath[len(dir)] == os.sep:
139
+ if len(dir) > len(longest):
140
+ longest = dir
141
+
142
+ if longest:
143
+ base = path[len(longest) + 1:]
144
+ else:
145
+ base = path
146
+ # the drive letter is never part of the module name
147
+ drive, base = os.path.splitdrive(base)
148
+ base = base.replace(os.sep, ".")
149
+ if os.altsep:
150
+ base = base.replace(os.altsep, ".")
151
+ filename, ext = os.path.splitext(base)
152
+ return filename.lstrip(".")
153
+
154
+ class CoverageResults:
155
+ def __init__(self, counts=None, calledfuncs=None, infile=None,
156
+ callers=None, outfile=None):
157
+ self.counts = counts
158
+ if self.counts is None:
159
+ self.counts = {}
160
+ self.counter = self.counts.copy() # map (filename, lineno) to count
161
+ self.calledfuncs = calledfuncs
162
+ if self.calledfuncs is None:
163
+ self.calledfuncs = {}
164
+ self.calledfuncs = self.calledfuncs.copy()
165
+ self.callers = callers
166
+ if self.callers is None:
167
+ self.callers = {}
168
+ self.callers = self.callers.copy()
169
+ self.infile = infile
170
+ self.outfile = outfile
171
+ if self.infile:
172
+ # Try to merge existing counts file.
173
+ try:
174
+ with open(self.infile, 'rb') as f:
175
+ counts, calledfuncs, callers = pickle.load(f)
176
+ self.update(self.__class__(counts, calledfuncs, callers=callers))
177
+ except (OSError, EOFError, ValueError) as err:
178
+ print(("Skipping counts file %r: %s"
179
+ % (self.infile, err)), file=sys.stderr)
180
+
181
+ def is_ignored_filename(self, filename):
182
+ """Return True if the filename does not refer to a file
183
+ we want to have reported.
184
+ """
185
+ return filename.startswith('<') and filename.endswith('>')
186
+
187
+ def update(self, other):
188
+ """Merge in the data from another CoverageResults"""
189
+ counts = self.counts
190
+ calledfuncs = self.calledfuncs
191
+ callers = self.callers
192
+ other_counts = other.counts
193
+ other_calledfuncs = other.calledfuncs
194
+ other_callers = other.callers
195
+
196
+ for key in other_counts:
197
+ counts[key] = counts.get(key, 0) + other_counts[key]
198
+
199
+ for key in other_calledfuncs:
200
+ calledfuncs[key] = 1
201
+
202
+ for key in other_callers:
203
+ callers[key] = 1
204
+
205
+ def write_results(self, show_missing=True, summary=False, coverdir=None, *,
206
+ ignore_missing_files=False):
207
+ """
208
+ Write the coverage results.
209
+
210
+ :param show_missing: Show lines that had no hits.
211
+ :param summary: Include coverage summary per module.
212
+ :param coverdir: If None, the results of each module are placed in its
213
+ directory, otherwise it is included in the directory
214
+ specified.
215
+ :param ignore_missing_files: If True, counts for files that no longer
216
+ exist are silently ignored. Otherwise, a missing file
217
+ will raise a FileNotFoundError.
218
+ """
219
+ if self.calledfuncs:
220
+ print()
221
+ print("functions called:")
222
+ calls = self.calledfuncs
223
+ for filename, modulename, funcname in sorted(calls):
224
+ print(("filename: %s, modulename: %s, funcname: %s"
225
+ % (filename, modulename, funcname)))
226
+
227
+ if self.callers:
228
+ print()
229
+ print("calling relationships:")
230
+ lastfile = lastcfile = ""
231
+ for ((pfile, pmod, pfunc), (cfile, cmod, cfunc)) \
232
+ in sorted(self.callers):
233
+ if pfile != lastfile:
234
+ print()
235
+ print("***", pfile, "***")
236
+ lastfile = pfile
237
+ lastcfile = ""
238
+ if cfile != pfile and lastcfile != cfile:
239
+ print(" -->", cfile)
240
+ lastcfile = cfile
241
+ print(" %s.%s -> %s.%s" % (pmod, pfunc, cmod, cfunc))
242
+
243
+ # turn the counts data ("(filename, lineno) = count") into something
244
+ # accessible on a per-file basis
245
+ per_file = {}
246
+ for filename, lineno in self.counts:
247
+ lines_hit = per_file[filename] = per_file.get(filename, {})
248
+ lines_hit[lineno] = self.counts[(filename, lineno)]
249
+
250
+ # accumulate summary info, if needed
251
+ sums = {}
252
+
253
+ for filename, count in per_file.items():
254
+ if self.is_ignored_filename(filename):
255
+ continue
256
+
257
+ if filename.endswith(".pyc"):
258
+ filename = filename[:-1]
259
+
260
+ if ignore_missing_files and not os.path.isfile(filename):
261
+ continue
262
+
263
+ if coverdir is None:
264
+ dir = os.path.dirname(os.path.abspath(filename))
265
+ modulename = _modname(filename)
266
+ else:
267
+ dir = coverdir
268
+ os.makedirs(dir, exist_ok=True)
269
+ modulename = _fullmodname(filename)
270
+
271
+ # If desired, get a list of the line numbers which represent
272
+ # executable content (returned as a dict for better lookup speed)
273
+ if show_missing:
274
+ lnotab = _find_executable_linenos(filename)
275
+ else:
276
+ lnotab = {}
277
+ source = linecache.getlines(filename)
278
+ coverpath = os.path.join(dir, modulename + ".cover")
279
+ with open(filename, 'rb') as fp:
280
+ encoding, _ = tokenize.detect_encoding(fp.readline)
281
+ n_hits, n_lines = self.write_results_file(coverpath, source,
282
+ lnotab, count, encoding)
283
+ if summary and n_lines:
284
+ percent = int(100 * n_hits / n_lines)
285
+ sums[modulename] = n_lines, percent, modulename, filename
286
+
287
+ if summary and sums:
288
+ print("lines cov% module (path)")
289
+ for m in sorted(sums):
290
+ n_lines, percent, modulename, filename = sums[m]
291
+ print("%5d %3d%% %s (%s)" % sums[m])
292
+
293
+ if self.outfile:
294
+ # try and store counts and module info into self.outfile
295
+ try:
296
+ with open(self.outfile, 'wb') as f:
297
+ pickle.dump((self.counts, self.calledfuncs, self.callers),
298
+ f, 1)
299
+ except OSError as err:
300
+ print("Can't save counts files because %s" % err, file=sys.stderr)
301
+
302
+ def write_results_file(self, path, lines, lnotab, lines_hit, encoding=None):
303
+ """Return a coverage results file in path."""
304
+ # ``lnotab`` is a dict of executable lines, or a line number "table"
305
+
306
+ try:
307
+ outfile = open(path, "w", encoding=encoding)
308
+ except OSError as err:
309
+ print(("trace: Could not open %r for writing: %s "
310
+ "- skipping" % (path, err)), file=sys.stderr)
311
+ return 0, 0
312
+
313
+ n_lines = 0
314
+ n_hits = 0
315
+ with outfile:
316
+ for lineno, line in enumerate(lines, 1):
317
+ # do the blank/comment match to try to mark more lines
318
+ # (help the reader find stuff that hasn't been covered)
319
+ if lineno in lines_hit:
320
+ outfile.write("%5d: " % lines_hit[lineno])
321
+ n_hits += 1
322
+ n_lines += 1
323
+ elif lineno in lnotab and not PRAGMA_NOCOVER in line:
324
+ # Highlight never-executed lines, unless the line contains
325
+ # #pragma: NO COVER
326
+ outfile.write(">>>>>> ")
327
+ n_lines += 1
328
+ else:
329
+ outfile.write(" ")
330
+ outfile.write(line.expandtabs(8))
331
+
332
+ return n_hits, n_lines
333
+
334
+ def _find_lines_from_code(code, strs):
335
+ """Return dict where keys are lines in the line number table."""
336
+ linenos = {}
337
+
338
+ for _, lineno in dis.findlinestarts(code):
339
+ if lineno not in strs:
340
+ linenos[lineno] = 1
341
+
342
+ return linenos
343
+
344
+ def _find_lines(code, strs):
345
+ """Return lineno dict for all code objects reachable from code."""
346
+ # get all of the lineno information from the code of this scope level
347
+ linenos = _find_lines_from_code(code, strs)
348
+
349
+ # and check the constants for references to other code objects
350
+ for c in code.co_consts:
351
+ if inspect.iscode(c):
352
+ # find another code object, so recurse into it
353
+ linenos.update(_find_lines(c, strs))
354
+ return linenos
355
+
356
+ def _find_strings(filename, encoding=None):
357
+ """Return a dict of possible docstring positions.
358
+
359
+ The dict maps line numbers to strings. There is an entry for
360
+ line that contains only a string or a part of a triple-quoted
361
+ string.
362
+ """
363
+ d = {}
364
+ # If the first token is a string, then it's the module docstring.
365
+ # Add this special case so that the test in the loop passes.
366
+ prev_ttype = token.INDENT
367
+ with open(filename, encoding=encoding) as f:
368
+ tok = tokenize.generate_tokens(f.readline)
369
+ for ttype, tstr, start, end, line in tok:
370
+ if ttype == token.STRING:
371
+ if prev_ttype == token.INDENT:
372
+ sline, scol = start
373
+ eline, ecol = end
374
+ for i in range(sline, eline + 1):
375
+ d[i] = 1
376
+ prev_ttype = ttype
377
+ return d
378
+
379
+ def _find_executable_linenos(filename):
380
+ """Return dict where keys are line numbers in the line number table."""
381
+ try:
382
+ with tokenize.open(filename) as f:
383
+ prog = f.read()
384
+ encoding = f.encoding
385
+ except OSError as err:
386
+ print(("Not printing coverage data for %r: %s"
387
+ % (filename, err)), file=sys.stderr)
388
+ return {}
389
+ code = compile(prog, filename, "exec")
390
+ strs = _find_strings(filename, encoding)
391
+ return _find_lines(code, strs)
392
+
393
+ class Trace:
394
+ def __init__(self, count=1, trace=1, countfuncs=0, countcallers=0,
395
+ ignoremods=(), ignoredirs=(), infile=None, outfile=None,
396
+ timing=False):
397
+ """
398
+ @param count true iff it should count number of times each
399
+ line is executed
400
+ @param trace true iff it should print out each line that is
401
+ being counted
402
+ @param countfuncs true iff it should just output a list of
403
+ (filename, modulename, funcname,) for functions
404
+ that were called at least once; This overrides
405
+ `count' and `trace'
406
+ @param ignoremods a list of the names of modules to ignore
407
+ @param ignoredirs a list of the names of directories to ignore
408
+ all of the (recursive) contents of
409
+ @param infile file from which to read stored counts to be
410
+ added into the results
411
+ @param outfile file in which to write the results
412
+ @param timing true iff timing information be displayed
413
+ """
414
+ self.infile = infile
415
+ self.outfile = outfile
416
+ self.ignore = _Ignore(ignoremods, ignoredirs)
417
+ self.counts = {} # keys are (filename, linenumber)
418
+ self.pathtobasename = {} # for memoizing os.path.basename
419
+ self.donothing = 0
420
+ self.trace = trace
421
+ self._calledfuncs = {}
422
+ self._callers = {}
423
+ self._caller_cache = {}
424
+ self.start_time = None
425
+ if timing:
426
+ self.start_time = _time()
427
+ if countcallers:
428
+ self.globaltrace = self.globaltrace_trackcallers
429
+ elif countfuncs:
430
+ self.globaltrace = self.globaltrace_countfuncs
431
+ elif trace and count:
432
+ self.globaltrace = self.globaltrace_lt
433
+ self.localtrace = self.localtrace_trace_and_count
434
+ elif trace:
435
+ self.globaltrace = self.globaltrace_lt
436
+ self.localtrace = self.localtrace_trace
437
+ elif count:
438
+ self.globaltrace = self.globaltrace_lt
439
+ self.localtrace = self.localtrace_count
440
+ else:
441
+ # Ahem -- do nothing? Okay.
442
+ self.donothing = 1
443
+
444
+ def run(self, cmd):
445
+ import __main__
446
+ dict = __main__.__dict__
447
+ self.runctx(cmd, dict, dict)
448
+
449
+ def runctx(self, cmd, globals=None, locals=None):
450
+ if globals is None: globals = {}
451
+ if locals is None: locals = {}
452
+ if not self.donothing:
453
+ threading.settrace(self.globaltrace)
454
+ sys.settrace(self.globaltrace)
455
+ try:
456
+ exec(cmd, globals, locals)
457
+ finally:
458
+ if not self.donothing:
459
+ sys.settrace(None)
460
+ threading.settrace(None)
461
+
462
+ def runfunc(self, func, /, *args, **kw):
463
+ result = None
464
+ if not self.donothing:
465
+ sys.settrace(self.globaltrace)
466
+ try:
467
+ result = func(*args, **kw)
468
+ finally:
469
+ if not self.donothing:
470
+ sys.settrace(None)
471
+ return result
472
+
473
+ def file_module_function_of(self, frame):
474
+ code = frame.f_code
475
+ filename = code.co_filename
476
+ if filename:
477
+ modulename = _modname(filename)
478
+ else:
479
+ modulename = None
480
+
481
+ funcname = code.co_name
482
+ clsname = None
483
+ if code in self._caller_cache:
484
+ if self._caller_cache[code] is not None:
485
+ clsname = self._caller_cache[code]
486
+ else:
487
+ self._caller_cache[code] = None
488
+ ## use of gc.get_referrers() was suggested by Michael Hudson
489
+ # all functions which refer to this code object
490
+ funcs = [f for f in gc.get_referrers(code)
491
+ if inspect.isfunction(f)]
492
+ # require len(func) == 1 to avoid ambiguity caused by calls to
493
+ # new.function(): "In the face of ambiguity, refuse the
494
+ # temptation to guess."
495
+ if len(funcs) == 1:
496
+ dicts = [d for d in gc.get_referrers(funcs[0])
497
+ if isinstance(d, dict)]
498
+ if len(dicts) == 1:
499
+ classes = [c for c in gc.get_referrers(dicts[0])
500
+ if hasattr(c, "__bases__")]
501
+ if len(classes) == 1:
502
+ # ditto for new.classobj()
503
+ clsname = classes[0].__name__
504
+ # cache the result - assumption is that new.* is
505
+ # not called later to disturb this relationship
506
+ # _caller_cache could be flushed if functions in
507
+ # the new module get called.
508
+ self._caller_cache[code] = clsname
509
+ if clsname is not None:
510
+ funcname = "%s.%s" % (clsname, funcname)
511
+
512
+ return filename, modulename, funcname
513
+
514
+ def globaltrace_trackcallers(self, frame, why, arg):
515
+ """Handler for call events.
516
+
517
+ Adds information about who called who to the self._callers dict.
518
+ """
519
+ if why == 'call':
520
+ # XXX Should do a better job of identifying methods
521
+ this_func = self.file_module_function_of(frame)
522
+ parent_func = self.file_module_function_of(frame.f_back)
523
+ self._callers[(parent_func, this_func)] = 1
524
+
525
+ def globaltrace_countfuncs(self, frame, why, arg):
526
+ """Handler for call events.
527
+
528
+ Adds (filename, modulename, funcname) to the self._calledfuncs dict.
529
+ """
530
+ if why == 'call':
531
+ this_func = self.file_module_function_of(frame)
532
+ self._calledfuncs[this_func] = 1
533
+
534
+ def globaltrace_lt(self, frame, why, arg):
535
+ """Handler for call events.
536
+
537
+ If the code block being entered is to be ignored, returns `None',
538
+ else returns self.localtrace.
539
+ """
540
+ if why == 'call':
541
+ code = frame.f_code
542
+ filename = frame.f_globals.get('__file__', None)
543
+ if filename:
544
+ # XXX _modname() doesn't work right for packages, so
545
+ # the ignore support won't work right for packages
546
+ modulename = _modname(filename)
547
+ if modulename is not None:
548
+ ignore_it = self.ignore.names(filename, modulename)
549
+ if not ignore_it:
550
+ if self.trace:
551
+ print((" --- modulename: %s, funcname: %s"
552
+ % (modulename, code.co_name)))
553
+ return self.localtrace
554
+ else:
555
+ return None
556
+
557
+ def localtrace_trace_and_count(self, frame, why, arg):
558
+ if why == "line":
559
+ # record the file name and line number of every trace
560
+ filename = frame.f_code.co_filename
561
+ lineno = frame.f_lineno
562
+ key = filename, lineno
563
+ self.counts[key] = self.counts.get(key, 0) + 1
564
+
565
+ if self.start_time:
566
+ print('%.2f' % (_time() - self.start_time), end=' ')
567
+ bname = os.path.basename(filename)
568
+ line = linecache.getline(filename, lineno)
569
+ print("%s(%d)" % (bname, lineno), end='')
570
+ if line:
571
+ print(": ", line, end='')
572
+ else:
573
+ print()
574
+ return self.localtrace
575
+
576
+ def localtrace_trace(self, frame, why, arg):
577
+ if why == "line":
578
+ # record the file name and line number of every trace
579
+ filename = frame.f_code.co_filename
580
+ lineno = frame.f_lineno
581
+
582
+ if self.start_time:
583
+ print('%.2f' % (_time() - self.start_time), end=' ')
584
+ bname = os.path.basename(filename)
585
+ line = linecache.getline(filename, lineno)
586
+ print("%s(%d)" % (bname, lineno), end='')
587
+ if line:
588
+ print(": ", line, end='')
589
+ else:
590
+ print()
591
+ return self.localtrace
592
+
593
+ def localtrace_count(self, frame, why, arg):
594
+ if why == "line":
595
+ filename = frame.f_code.co_filename
596
+ lineno = frame.f_lineno
597
+ key = filename, lineno
598
+ self.counts[key] = self.counts.get(key, 0) + 1
599
+ return self.localtrace
600
+
601
+ def results(self):
602
+ return CoverageResults(self.counts, infile=self.infile,
603
+ outfile=self.outfile,
604
+ calledfuncs=self._calledfuncs,
605
+ callers=self._callers)
606
+
607
+ def main():
608
+ import argparse
609
+
610
+ parser = argparse.ArgumentParser()
611
+ parser.add_argument('--version', action='version', version='trace 2.0')
612
+
613
+ grp = parser.add_argument_group('Main options',
614
+ 'One of these (or --report) must be given')
615
+
616
+ grp.add_argument('-c', '--count', action='store_true',
617
+ help='Count the number of times each line is executed and write '
618
+ 'the counts to <module>.cover for each module executed, in '
619
+ 'the module\'s directory. See also --coverdir, --file, '
620
+ '--no-report below.')
621
+ grp.add_argument('-t', '--trace', action='store_true',
622
+ help='Print each line to sys.stdout before it is executed')
623
+ grp.add_argument('-l', '--listfuncs', action='store_true',
624
+ help='Keep track of which functions are executed at least once '
625
+ 'and write the results to sys.stdout after the program exits. '
626
+ 'Cannot be specified alongside --trace or --count.')
627
+ grp.add_argument('-T', '--trackcalls', action='store_true',
628
+ help='Keep track of caller/called pairs and write the results to '
629
+ 'sys.stdout after the program exits.')
630
+
631
+ grp = parser.add_argument_group('Modifiers')
632
+
633
+ _grp = grp.add_mutually_exclusive_group()
634
+ _grp.add_argument('-r', '--report', action='store_true',
635
+ help='Generate a report from a counts file; does not execute any '
636
+ 'code. --file must specify the results file to read, which '
637
+ 'must have been created in a previous run with --count '
638
+ '--file=FILE')
639
+ _grp.add_argument('-R', '--no-report', action='store_true',
640
+ help='Do not generate the coverage report files. '
641
+ 'Useful if you want to accumulate over several runs.')
642
+
643
+ grp.add_argument('-f', '--file',
644
+ help='File to accumulate counts over several runs')
645
+ grp.add_argument('-C', '--coverdir',
646
+ help='Directory where the report files go. The coverage report '
647
+ 'for <package>.<module> will be written to file '
648
+ '<dir>/<package>/<module>.cover')
649
+ grp.add_argument('-m', '--missing', action='store_true',
650
+ help='Annotate executable lines that were not executed with '
651
+ '">>>>>> "')
652
+ grp.add_argument('-s', '--summary', action='store_true',
653
+ help='Write a brief summary for each file to sys.stdout. '
654
+ 'Can only be used with --count or --report')
655
+ grp.add_argument('-g', '--timing', action='store_true',
656
+ help='Prefix each line with the time since the program started. '
657
+ 'Only used while tracing')
658
+
659
+ grp = parser.add_argument_group('Filters',
660
+ 'Can be specified multiple times')
661
+ grp.add_argument('--ignore-module', action='append', default=[],
662
+ help='Ignore the given module(s) and its submodules '
663
+ '(if it is a package). Accepts comma separated list of '
664
+ 'module names.')
665
+ grp.add_argument('--ignore-dir', action='append', default=[],
666
+ help='Ignore files in the given directory '
667
+ '(multiple directories can be joined by os.pathsep).')
668
+
669
+ parser.add_argument('--module', action='store_true', default=False,
670
+ help='Trace a module. ')
671
+ parser.add_argument('progname', nargs='?',
672
+ help='file to run as main program')
673
+ parser.add_argument('arguments', nargs=argparse.REMAINDER,
674
+ help='arguments to the program')
675
+
676
+ opts = parser.parse_args()
677
+
678
+ if opts.ignore_dir:
679
+ _prefix = sysconfig.get_path("stdlib")
680
+ _exec_prefix = sysconfig.get_path("platstdlib")
681
+
682
+ def parse_ignore_dir(s):
683
+ s = os.path.expanduser(os.path.expandvars(s))
684
+ s = s.replace('$prefix', _prefix).replace('$exec_prefix', _exec_prefix)
685
+ return os.path.normpath(s)
686
+
687
+ opts.ignore_module = [mod.strip()
688
+ for i in opts.ignore_module for mod in i.split(',')]
689
+ opts.ignore_dir = [parse_ignore_dir(s)
690
+ for i in opts.ignore_dir for s in i.split(os.pathsep)]
691
+
692
+ if opts.report:
693
+ if not opts.file:
694
+ parser.error('-r/--report requires -f/--file')
695
+ results = CoverageResults(infile=opts.file, outfile=opts.file)
696
+ return results.write_results(opts.missing, opts.summary, opts.coverdir)
697
+
698
+ if not any([opts.trace, opts.count, opts.listfuncs, opts.trackcalls]):
699
+ parser.error('must specify one of --trace, --count, --report, '
700
+ '--listfuncs, or --trackcalls')
701
+
702
+ if opts.listfuncs and (opts.count or opts.trace):
703
+ parser.error('cannot specify both --listfuncs and (--trace or --count)')
704
+
705
+ if opts.summary and not opts.count:
706
+ parser.error('--summary can only be used with --count or --report')
707
+
708
+ if opts.progname is None:
709
+ parser.error('progname is missing: required with the main options')
710
+
711
+ t = Trace(opts.count, opts.trace, countfuncs=opts.listfuncs,
712
+ countcallers=opts.trackcalls, ignoremods=opts.ignore_module,
713
+ ignoredirs=opts.ignore_dir, infile=opts.file,
714
+ outfile=opts.file, timing=opts.timing)
715
+ try:
716
+ if opts.module:
717
+ import runpy
718
+ module_name = opts.progname
719
+ mod_name, mod_spec, code = runpy._get_module_details(module_name)
720
+ sys.argv = [code.co_filename, *opts.arguments]
721
+ globs = {
722
+ '__name__': '__main__',
723
+ '__file__': code.co_filename,
724
+ '__package__': mod_spec.parent,
725
+ '__loader__': mod_spec.loader,
726
+ '__spec__': mod_spec,
727
+ '__cached__': None,
728
+ }
729
+ else:
730
+ sys.argv = [opts.progname, *opts.arguments]
731
+ sys.path[0] = os.path.dirname(opts.progname)
732
+
733
+ with io.open_code(opts.progname) as fp:
734
+ code = compile(fp.read(), opts.progname, 'exec')
735
+ # try to emulate __main__ namespace as much as possible
736
+ globs = {
737
+ '__file__': opts.progname,
738
+ '__name__': '__main__',
739
+ '__package__': None,
740
+ '__cached__': None,
741
+ }
742
+ t.runctx(code, globs, globs)
743
+ except OSError as err:
744
+ sys.exit("Cannot run file %r because: %s" % (sys.argv[0], err))
745
+ except SystemExit:
746
+ pass
747
+
748
+ results = t.results()
749
+
750
+ if not opts.no_report:
751
+ results.write_results(opts.missing, opts.summary, opts.coverdir)
752
+
753
+ if __name__=='__main__':
754
+ main()