@pairling/runtime-darwin-arm64 0.1.0 → 0.2.0

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 (1317) hide show
  1. package/bin/pairling-connectd +0 -0
  2. package/manifest.json +9 -3
  3. package/package.json +1 -1
  4. package/python/bin/2to3-3.12 +7 -0
  5. package/python/bin/idle3.12 +7 -0
  6. package/python/bin/pip +8 -0
  7. package/python/bin/pip3 +8 -0
  8. package/python/bin/pip3.12 +8 -0
  9. package/python/bin/pydoc3.12 +7 -0
  10. package/python/bin/python3 +0 -0
  11. package/python/bin/python3.12 +0 -0
  12. package/python/bin/python3.12-config +76 -0
  13. package/python/include/python3.12/Python.h +109 -0
  14. package/python/include/python3.12/abstract.h +899 -0
  15. package/python/include/python3.12/bltinmodule.h +14 -0
  16. package/python/include/python3.12/boolobject.h +42 -0
  17. package/python/include/python3.12/bytearrayobject.h +44 -0
  18. package/python/include/python3.12/bytesobject.h +69 -0
  19. package/python/include/python3.12/ceval.h +168 -0
  20. package/python/include/python3.12/codecs.h +248 -0
  21. package/python/include/python3.12/compile.h +22 -0
  22. package/python/include/python3.12/complexobject.h +30 -0
  23. package/python/include/python3.12/cpython/abstract.h +206 -0
  24. package/python/include/python3.12/cpython/bytearrayobject.h +34 -0
  25. package/python/include/python3.12/cpython/bytesobject.h +133 -0
  26. package/python/include/python3.12/cpython/cellobject.h +44 -0
  27. package/python/include/python3.12/cpython/ceval.h +35 -0
  28. package/python/include/python3.12/cpython/classobject.h +71 -0
  29. package/python/include/python3.12/cpython/code.h +389 -0
  30. package/python/include/python3.12/cpython/compile.h +69 -0
  31. package/python/include/python3.12/cpython/complexobject.h +44 -0
  32. package/python/include/python3.12/cpython/context.h +78 -0
  33. package/python/include/python3.12/cpython/descrobject.h +64 -0
  34. package/python/include/python3.12/cpython/dictobject.h +118 -0
  35. package/python/include/python3.12/cpython/fileobject.h +19 -0
  36. package/python/include/python3.12/cpython/fileutils.h +8 -0
  37. package/python/include/python3.12/cpython/floatobject.h +27 -0
  38. package/python/include/python3.12/cpython/frameobject.h +29 -0
  39. package/python/include/python3.12/cpython/funcobject.h +190 -0
  40. package/python/include/python3.12/cpython/genobject.h +89 -0
  41. package/python/include/python3.12/cpython/import.h +46 -0
  42. package/python/include/python3.12/cpython/initconfig.h +256 -0
  43. package/python/include/python3.12/cpython/interpreteridobject.h +11 -0
  44. package/python/include/python3.12/cpython/listobject.h +47 -0
  45. package/python/include/python3.12/cpython/longintrepr.h +133 -0
  46. package/python/include/python3.12/cpython/longobject.h +100 -0
  47. package/python/include/python3.12/cpython/memoryobject.h +52 -0
  48. package/python/include/python3.12/cpython/methodobject.h +66 -0
  49. package/python/include/python3.12/cpython/modsupport.h +109 -0
  50. package/python/include/python3.12/cpython/object.h +575 -0
  51. package/python/include/python3.12/cpython/objimpl.h +95 -0
  52. package/python/include/python3.12/cpython/odictobject.h +43 -0
  53. package/python/include/python3.12/cpython/picklebufobject.h +31 -0
  54. package/python/include/python3.12/cpython/pthread_stubs.h +88 -0
  55. package/python/include/python3.12/cpython/pyctype.h +39 -0
  56. package/python/include/python3.12/cpython/pydebug.h +38 -0
  57. package/python/include/python3.12/cpython/pyerrors.h +178 -0
  58. package/python/include/python3.12/cpython/pyfpe.h +15 -0
  59. package/python/include/python3.12/cpython/pyframe.h +35 -0
  60. package/python/include/python3.12/cpython/pylifecycle.h +111 -0
  61. package/python/include/python3.12/cpython/pymem.h +98 -0
  62. package/python/include/python3.12/cpython/pystate.h +456 -0
  63. package/python/include/python3.12/cpython/pythonrun.h +121 -0
  64. package/python/include/python3.12/cpython/pythread.h +42 -0
  65. package/python/include/python3.12/cpython/pytime.h +331 -0
  66. package/python/include/python3.12/cpython/setobject.h +72 -0
  67. package/python/include/python3.12/cpython/sysmodule.h +16 -0
  68. package/python/include/python3.12/cpython/traceback.h +16 -0
  69. package/python/include/python3.12/cpython/tupleobject.h +39 -0
  70. package/python/include/python3.12/cpython/unicodeobject.h +976 -0
  71. package/python/include/python3.12/cpython/warnings.h +20 -0
  72. package/python/include/python3.12/cpython/weakrefobject.h +56 -0
  73. package/python/include/python3.12/datetime.h +267 -0
  74. package/python/include/python3.12/descrobject.h +100 -0
  75. package/python/include/python3.12/dictobject.h +97 -0
  76. package/python/include/python3.12/dynamic_annotations.h +499 -0
  77. package/python/include/python3.12/enumobject.h +17 -0
  78. package/python/include/python3.12/errcode.h +38 -0
  79. package/python/include/python3.12/exports.h +36 -0
  80. package/python/include/python3.12/fileobject.h +49 -0
  81. package/python/include/python3.12/fileutils.h +26 -0
  82. package/python/include/python3.12/floatobject.h +54 -0
  83. package/python/include/python3.12/frameobject.h +20 -0
  84. package/python/include/python3.12/genericaliasobject.h +14 -0
  85. package/python/include/python3.12/import.h +98 -0
  86. package/python/include/python3.12/internal/pycore_abstract.h +25 -0
  87. package/python/include/python3.12/internal/pycore_asdl.h +112 -0
  88. package/python/include/python3.12/internal/pycore_ast.h +922 -0
  89. package/python/include/python3.12/internal/pycore_ast_state.h +265 -0
  90. package/python/include/python3.12/internal/pycore_atexit.h +57 -0
  91. package/python/include/python3.12/internal/pycore_atomic.h +557 -0
  92. package/python/include/python3.12/internal/pycore_atomic_funcs.h +94 -0
  93. package/python/include/python3.12/internal/pycore_bitutils.h +186 -0
  94. package/python/include/python3.12/internal/pycore_blocks_output_buffer.h +317 -0
  95. package/python/include/python3.12/internal/pycore_bytes_methods.h +73 -0
  96. package/python/include/python3.12/internal/pycore_bytesobject.h +47 -0
  97. package/python/include/python3.12/internal/pycore_call.h +133 -0
  98. package/python/include/python3.12/internal/pycore_ceval.h +164 -0
  99. package/python/include/python3.12/internal/pycore_ceval_state.h +103 -0
  100. package/python/include/python3.12/internal/pycore_code.h +496 -0
  101. package/python/include/python3.12/internal/pycore_compile.h +118 -0
  102. package/python/include/python3.12/internal/pycore_condvar.h +99 -0
  103. package/python/include/python3.12/internal/pycore_context.h +71 -0
  104. package/python/include/python3.12/internal/pycore_descrobject.h +26 -0
  105. package/python/include/python3.12/internal/pycore_dict.h +199 -0
  106. package/python/include/python3.12/internal/pycore_dict_state.h +50 -0
  107. package/python/include/python3.12/internal/pycore_dtoa.h +69 -0
  108. package/python/include/python3.12/internal/pycore_emscripten_signal.h +25 -0
  109. package/python/include/python3.12/internal/pycore_exceptions.h +37 -0
  110. package/python/include/python3.12/internal/pycore_faulthandler.h +99 -0
  111. package/python/include/python3.12/internal/pycore_fileutils.h +292 -0
  112. package/python/include/python3.12/internal/pycore_fileutils_windows.h +98 -0
  113. package/python/include/python3.12/internal/pycore_floatobject.h +71 -0
  114. package/python/include/python3.12/internal/pycore_flowgraph.h +120 -0
  115. package/python/include/python3.12/internal/pycore_format.h +27 -0
  116. package/python/include/python3.12/internal/pycore_frame.h +283 -0
  117. package/python/include/python3.12/internal/pycore_function.h +26 -0
  118. package/python/include/python3.12/internal/pycore_gc.h +211 -0
  119. package/python/include/python3.12/internal/pycore_genobject.h +49 -0
  120. package/python/include/python3.12/internal/pycore_getopt.h +22 -0
  121. package/python/include/python3.12/internal/pycore_gil.h +50 -0
  122. package/python/include/python3.12/internal/pycore_global_objects.h +105 -0
  123. package/python/include/python3.12/internal/pycore_global_objects_fini_generated.h +1517 -0
  124. package/python/include/python3.12/internal/pycore_global_strings.h +777 -0
  125. package/python/include/python3.12/internal/pycore_hamt.h +134 -0
  126. package/python/include/python3.12/internal/pycore_hashtable.h +149 -0
  127. package/python/include/python3.12/internal/pycore_import.h +183 -0
  128. package/python/include/python3.12/internal/pycore_initconfig.h +179 -0
  129. package/python/include/python3.12/internal/pycore_instruments.h +106 -0
  130. package/python/include/python3.12/internal/pycore_interp.h +275 -0
  131. package/python/include/python3.12/internal/pycore_intrinsics.h +32 -0
  132. package/python/include/python3.12/internal/pycore_list.h +83 -0
  133. package/python/include/python3.12/internal/pycore_long.h +258 -0
  134. package/python/include/python3.12/internal/pycore_memoryobject.h +18 -0
  135. package/python/include/python3.12/internal/pycore_moduleobject.h +45 -0
  136. package/python/include/python3.12/internal/pycore_namespace.h +20 -0
  137. package/python/include/python3.12/internal/pycore_object.h +455 -0
  138. package/python/include/python3.12/internal/pycore_object_state.h +42 -0
  139. package/python/include/python3.12/internal/pycore_obmalloc.h +700 -0
  140. package/python/include/python3.12/internal/pycore_obmalloc_init.h +73 -0
  141. package/python/include/python3.12/internal/pycore_opcode.h +587 -0
  142. package/python/include/python3.12/internal/pycore_opcode_utils.h +92 -0
  143. package/python/include/python3.12/internal/pycore_parser.h +66 -0
  144. package/python/include/python3.12/internal/pycore_pathconfig.h +24 -0
  145. package/python/include/python3.12/internal/pycore_pyarena.h +64 -0
  146. package/python/include/python3.12/internal/pycore_pyerrors.h +129 -0
  147. package/python/include/python3.12/internal/pycore_pyhash.h +40 -0
  148. package/python/include/python3.12/internal/pycore_pylifecycle.h +99 -0
  149. package/python/include/python3.12/internal/pycore_pymath.h +205 -0
  150. package/python/include/python3.12/internal/pycore_pymem.h +98 -0
  151. package/python/include/python3.12/internal/pycore_pymem_init.h +85 -0
  152. package/python/include/python3.12/internal/pycore_pystate.h +180 -0
  153. package/python/include/python3.12/internal/pycore_pythread.h +81 -0
  154. package/python/include/python3.12/internal/pycore_range.h +21 -0
  155. package/python/include/python3.12/internal/pycore_runtime.h +235 -0
  156. package/python/include/python3.12/internal/pycore_runtime_init.h +188 -0
  157. package/python/include/python3.12/internal/pycore_runtime_init_generated.h +1511 -0
  158. package/python/include/python3.12/internal/pycore_signal.h +98 -0
  159. package/python/include/python3.12/internal/pycore_sliceobject.h +22 -0
  160. package/python/include/python3.12/internal/pycore_strhex.h +36 -0
  161. package/python/include/python3.12/internal/pycore_structseq.h +39 -0
  162. package/python/include/python3.12/internal/pycore_symtable.h +160 -0
  163. package/python/include/python3.12/internal/pycore_sysmodule.h +34 -0
  164. package/python/include/python3.12/internal/pycore_time.h +25 -0
  165. package/python/include/python3.12/internal/pycore_token.h +108 -0
  166. package/python/include/python3.12/internal/pycore_traceback.h +101 -0
  167. package/python/include/python3.12/internal/pycore_tracemalloc.h +123 -0
  168. package/python/include/python3.12/internal/pycore_tuple.h +79 -0
  169. package/python/include/python3.12/internal/pycore_typeobject.h +151 -0
  170. package/python/include/python3.12/internal/pycore_typevarobject.h +24 -0
  171. package/python/include/python3.12/internal/pycore_ucnhash.h +34 -0
  172. package/python/include/python3.12/internal/pycore_unicodeobject.h +86 -0
  173. package/python/include/python3.12/internal/pycore_unicodeobject_generated.h +2832 -0
  174. package/python/include/python3.12/internal/pycore_unionobject.h +23 -0
  175. package/python/include/python3.12/internal/pycore_warnings.h +29 -0
  176. package/python/include/python3.12/interpreteridobject.h +17 -0
  177. package/python/include/python3.12/intrcheck.h +30 -0
  178. package/python/include/python3.12/iterobject.h +27 -0
  179. package/python/include/python3.12/listobject.h +52 -0
  180. package/python/include/python3.12/longobject.h +108 -0
  181. package/python/include/python3.12/marshal.h +31 -0
  182. package/python/include/python3.12/memoryobject.h +34 -0
  183. package/python/include/python3.12/methodobject.h +132 -0
  184. package/python/include/python3.12/modsupport.h +168 -0
  185. package/python/include/python3.12/moduleobject.h +119 -0
  186. package/python/include/python3.12/object.h +993 -0
  187. package/python/include/python3.12/objimpl.h +234 -0
  188. package/python/include/python3.12/opcode.h +271 -0
  189. package/python/include/python3.12/osdefs.h +51 -0
  190. package/python/include/python3.12/osmodule.h +17 -0
  191. package/python/include/python3.12/patchlevel.h +35 -0
  192. package/python/include/python3.12/py_curses.h +99 -0
  193. package/python/include/python3.12/pybuffer.h +145 -0
  194. package/python/include/python3.12/pycapsule.h +59 -0
  195. package/python/include/python3.12/pyconfig.h +1943 -0
  196. package/python/include/python3.12/pydtrace.h +59 -0
  197. package/python/include/python3.12/pyerrors.h +337 -0
  198. package/python/include/python3.12/pyexpat.h +62 -0
  199. package/python/include/python3.12/pyframe.h +26 -0
  200. package/python/include/python3.12/pyhash.h +144 -0
  201. package/python/include/python3.12/pylifecycle.h +78 -0
  202. package/python/include/python3.12/pymacconfig.h +99 -0
  203. package/python/include/python3.12/pymacro.h +172 -0
  204. package/python/include/python3.12/pymath.h +62 -0
  205. package/python/include/python3.12/pymem.h +104 -0
  206. package/python/include/python3.12/pyport.h +782 -0
  207. package/python/include/python3.12/pystate.h +132 -0
  208. package/python/include/python3.12/pystats.h +110 -0
  209. package/python/include/python3.12/pystrcmp.h +23 -0
  210. package/python/include/python3.12/pystrtod.h +46 -0
  211. package/python/include/python3.12/pythonrun.h +49 -0
  212. package/python/include/python3.12/pythread.h +135 -0
  213. package/python/include/python3.12/pytypedefs.h +30 -0
  214. package/python/include/python3.12/rangeobject.h +27 -0
  215. package/python/include/python3.12/setobject.h +49 -0
  216. package/python/include/python3.12/sliceobject.h +65 -0
  217. package/python/include/python3.12/structmember.h +56 -0
  218. package/python/include/python3.12/structseq.h +49 -0
  219. package/python/include/python3.12/sysmodule.h +54 -0
  220. package/python/include/python3.12/traceback.h +26 -0
  221. package/python/include/python3.12/tracemalloc.h +77 -0
  222. package/python/include/python3.12/tupleobject.h +46 -0
  223. package/python/include/python3.12/typeslots.h +88 -0
  224. package/python/include/python3.12/unicodeobject.h +1020 -0
  225. package/python/include/python3.12/warnings.h +45 -0
  226. package/python/include/python3.12/weakrefobject.h +42 -0
  227. package/python/lib/libpython3.12.dylib +0 -0
  228. package/python/lib/python3.12/LICENSE.txt +279 -0
  229. package/python/lib/python3.12/__future__.py +147 -0
  230. package/python/lib/python3.12/__hello__.py +16 -0
  231. package/python/lib/python3.12/__phello__/__init__.py +7 -0
  232. package/python/lib/python3.12/__phello__/spam.py +7 -0
  233. package/python/lib/python3.12/__pycache__/_compression.cpython-312.pyc +0 -0
  234. package/python/lib/python3.12/__pycache__/_weakrefset.cpython-312.pyc +0 -0
  235. package/python/lib/python3.12/__pycache__/base64.cpython-312.pyc +0 -0
  236. package/python/lib/python3.12/__pycache__/bisect.cpython-312.pyc +0 -0
  237. package/python/lib/python3.12/__pycache__/bz2.cpython-312.pyc +0 -0
  238. package/python/lib/python3.12/__pycache__/calendar.cpython-312.pyc +0 -0
  239. package/python/lib/python3.12/__pycache__/contextlib.cpython-312.pyc +0 -0
  240. package/python/lib/python3.12/__pycache__/copyreg.cpython-312.pyc +0 -0
  241. package/python/lib/python3.12/__pycache__/datetime.cpython-312.pyc +0 -0
  242. package/python/lib/python3.12/__pycache__/enum.cpython-312.pyc +0 -0
  243. package/python/lib/python3.12/__pycache__/fnmatch.cpython-312.pyc +0 -0
  244. package/python/lib/python3.12/__pycache__/functools.cpython-312.pyc +0 -0
  245. package/python/lib/python3.12/__pycache__/hashlib.cpython-312.pyc +0 -0
  246. package/python/lib/python3.12/__pycache__/hmac.cpython-312.pyc +0 -0
  247. package/python/lib/python3.12/__pycache__/ipaddress.cpython-312.pyc +0 -0
  248. package/python/lib/python3.12/__pycache__/keyword.cpython-312.pyc +0 -0
  249. package/python/lib/python3.12/__pycache__/locale.cpython-312.pyc +0 -0
  250. package/python/lib/python3.12/__pycache__/lzma.cpython-312.pyc +0 -0
  251. package/python/lib/python3.12/__pycache__/operator.cpython-312.pyc +0 -0
  252. package/python/lib/python3.12/__pycache__/plistlib.cpython-312.pyc +0 -0
  253. package/python/lib/python3.12/__pycache__/pty.cpython-312.pyc +0 -0
  254. package/python/lib/python3.12/__pycache__/quopri.cpython-312.pyc +0 -0
  255. package/python/lib/python3.12/__pycache__/random.cpython-312.pyc +0 -0
  256. package/python/lib/python3.12/__pycache__/reprlib.cpython-312.pyc +0 -0
  257. package/python/lib/python3.12/__pycache__/selectors.cpython-312.pyc +0 -0
  258. package/python/lib/python3.12/__pycache__/shutil.cpython-312.pyc +0 -0
  259. package/python/lib/python3.12/__pycache__/signal.cpython-312.pyc +0 -0
  260. package/python/lib/python3.12/__pycache__/socket.cpython-312.pyc +0 -0
  261. package/python/lib/python3.12/__pycache__/ssl.cpython-312.pyc +0 -0
  262. package/python/lib/python3.12/__pycache__/string.cpython-312.pyc +0 -0
  263. package/python/lib/python3.12/__pycache__/struct.cpython-312.pyc +0 -0
  264. package/python/lib/python3.12/__pycache__/subprocess.cpython-312.pyc +0 -0
  265. package/python/lib/python3.12/__pycache__/tempfile.cpython-312.pyc +0 -0
  266. package/python/lib/python3.12/__pycache__/threading.cpython-312.pyc +0 -0
  267. package/python/lib/python3.12/__pycache__/tty.cpython-312.pyc +0 -0
  268. package/python/lib/python3.12/__pycache__/types.cpython-312.pyc +0 -0
  269. package/python/lib/python3.12/__pycache__/warnings.cpython-312.pyc +0 -0
  270. package/python/lib/python3.12/__pycache__/weakref.cpython-312.pyc +0 -0
  271. package/python/lib/python3.12/_aix_support.py +108 -0
  272. package/python/lib/python3.12/_collections_abc.py +1173 -0
  273. package/python/lib/python3.12/_compat_pickle.py +252 -0
  274. package/python/lib/python3.12/_compression.py +162 -0
  275. package/python/lib/python3.12/_markupbase.py +396 -0
  276. package/python/lib/python3.12/_osx_support.py +579 -0
  277. package/python/lib/python3.12/_py_abc.py +147 -0
  278. package/python/lib/python3.12/_pydatetime.py +2643 -0
  279. package/python/lib/python3.12/_pydecimal.py +6339 -0
  280. package/python/lib/python3.12/_pyio.py +2698 -0
  281. package/python/lib/python3.12/_pylong.py +329 -0
  282. package/python/lib/python3.12/_sitebuiltins.py +103 -0
  283. package/python/lib/python3.12/_strptime.py +664 -0
  284. package/python/lib/python3.12/_sysconfigdata__darwin_darwin.py +984 -0
  285. package/python/lib/python3.12/_threading_local.py +242 -0
  286. package/python/lib/python3.12/_weakrefset.py +205 -0
  287. package/python/lib/python3.12/abc.py +188 -0
  288. package/python/lib/python3.12/aifc.py +984 -0
  289. package/python/lib/python3.12/antigravity.py +17 -0
  290. package/python/lib/python3.12/argparse.py +2650 -0
  291. package/python/lib/python3.12/ast.py +1840 -0
  292. package/python/lib/python3.12/asyncio/__init__.py +47 -0
  293. package/python/lib/python3.12/asyncio/__main__.py +128 -0
  294. package/python/lib/python3.12/asyncio/base_events.py +2024 -0
  295. package/python/lib/python3.12/asyncio/base_futures.py +67 -0
  296. package/python/lib/python3.12/asyncio/base_subprocess.py +285 -0
  297. package/python/lib/python3.12/asyncio/base_tasks.py +94 -0
  298. package/python/lib/python3.12/asyncio/constants.py +41 -0
  299. package/python/lib/python3.12/asyncio/coroutines.py +109 -0
  300. package/python/lib/python3.12/asyncio/events.py +868 -0
  301. package/python/lib/python3.12/asyncio/exceptions.py +62 -0
  302. package/python/lib/python3.12/asyncio/format_helpers.py +76 -0
  303. package/python/lib/python3.12/asyncio/futures.py +430 -0
  304. package/python/lib/python3.12/asyncio/locks.py +586 -0
  305. package/python/lib/python3.12/asyncio/log.py +7 -0
  306. package/python/lib/python3.12/asyncio/mixins.py +21 -0
  307. package/python/lib/python3.12/asyncio/proactor_events.py +897 -0
  308. package/python/lib/python3.12/asyncio/protocols.py +216 -0
  309. package/python/lib/python3.12/asyncio/queues.py +244 -0
  310. package/python/lib/python3.12/asyncio/runners.py +216 -0
  311. package/python/lib/python3.12/asyncio/selector_events.py +1324 -0
  312. package/python/lib/python3.12/asyncio/sslproto.py +929 -0
  313. package/python/lib/python3.12/asyncio/staggered.py +174 -0
  314. package/python/lib/python3.12/asyncio/streams.py +770 -0
  315. package/python/lib/python3.12/asyncio/subprocess.py +229 -0
  316. package/python/lib/python3.12/asyncio/taskgroups.py +268 -0
  317. package/python/lib/python3.12/asyncio/tasks.py +1065 -0
  318. package/python/lib/python3.12/asyncio/threads.py +25 -0
  319. package/python/lib/python3.12/asyncio/timeouts.py +168 -0
  320. package/python/lib/python3.12/asyncio/transports.py +335 -0
  321. package/python/lib/python3.12/asyncio/trsock.py +98 -0
  322. package/python/lib/python3.12/asyncio/unix_events.py +1500 -0
  323. package/python/lib/python3.12/asyncio/windows_events.py +901 -0
  324. package/python/lib/python3.12/asyncio/windows_utils.py +173 -0
  325. package/python/lib/python3.12/base64.py +586 -0
  326. package/python/lib/python3.12/bdb.py +920 -0
  327. package/python/lib/python3.12/bisect.py +118 -0
  328. package/python/lib/python3.12/bz2.py +344 -0
  329. package/python/lib/python3.12/cProfile.py +195 -0
  330. package/python/lib/python3.12/calendar.py +808 -0
  331. package/python/lib/python3.12/cgi.py +1014 -0
  332. package/python/lib/python3.12/cgitb.py +332 -0
  333. package/python/lib/python3.12/chunk.py +173 -0
  334. package/python/lib/python3.12/cmd.py +401 -0
  335. package/python/lib/python3.12/code.py +324 -0
  336. package/python/lib/python3.12/codecs.py +1129 -0
  337. package/python/lib/python3.12/codeop.py +161 -0
  338. package/python/lib/python3.12/collections/__init__.py +1592 -0
  339. package/python/lib/python3.12/collections/__pycache__/__init__.cpython-312.pyc +0 -0
  340. package/python/lib/python3.12/collections/__pycache__/abc.cpython-312.pyc +0 -0
  341. package/python/lib/python3.12/collections/abc.py +3 -0
  342. package/python/lib/python3.12/colorsys.py +166 -0
  343. package/python/lib/python3.12/compileall.py +469 -0
  344. package/python/lib/python3.12/concurrent/__init__.py +1 -0
  345. package/python/lib/python3.12/concurrent/futures/__init__.py +54 -0
  346. package/python/lib/python3.12/concurrent/futures/_base.py +654 -0
  347. package/python/lib/python3.12/concurrent/futures/process.py +876 -0
  348. package/python/lib/python3.12/concurrent/futures/thread.py +240 -0
  349. package/python/lib/python3.12/config-3.12-darwin/Makefile +3224 -0
  350. package/python/lib/python3.12/config-3.12-darwin/Setup +303 -0
  351. package/python/lib/python3.12/config-3.12-darwin/Setup.bootstrap +36 -0
  352. package/python/lib/python3.12/config-3.12-darwin/Setup.local +90 -0
  353. package/python/lib/python3.12/config-3.12-darwin/Setup.stdlib +183 -0
  354. package/python/lib/python3.12/config-3.12-darwin/config.c +246 -0
  355. package/python/lib/python3.12/config-3.12-darwin/config.c.in +71 -0
  356. package/python/lib/python3.12/config-3.12-darwin/install-sh +541 -0
  357. package/python/lib/python3.12/config-3.12-darwin/makesetup +353 -0
  358. package/python/lib/python3.12/config-3.12-darwin/python-config.py +76 -0
  359. package/python/lib/python3.12/config-3.12-darwin/python.o +0 -0
  360. package/python/lib/python3.12/configparser.py +1333 -0
  361. package/python/lib/python3.12/contextlib.py +800 -0
  362. package/python/lib/python3.12/contextvars.py +4 -0
  363. package/python/lib/python3.12/copy.py +292 -0
  364. package/python/lib/python3.12/copyreg.py +217 -0
  365. package/python/lib/python3.12/crypt.py +124 -0
  366. package/python/lib/python3.12/csv.py +451 -0
  367. package/python/lib/python3.12/ctypes/__init__.py +582 -0
  368. package/python/lib/python3.12/ctypes/_aix.py +327 -0
  369. package/python/lib/python3.12/ctypes/_endian.py +78 -0
  370. package/python/lib/python3.12/ctypes/macholib/README.ctypes +7 -0
  371. package/python/lib/python3.12/ctypes/macholib/__init__.py +9 -0
  372. package/python/lib/python3.12/ctypes/macholib/dyld.py +165 -0
  373. package/python/lib/python3.12/ctypes/macholib/dylib.py +42 -0
  374. package/python/lib/python3.12/ctypes/macholib/fetch_macholib +2 -0
  375. package/python/lib/python3.12/ctypes/macholib/fetch_macholib.bat +1 -0
  376. package/python/lib/python3.12/ctypes/macholib/framework.py +42 -0
  377. package/python/lib/python3.12/ctypes/util.py +379 -0
  378. package/python/lib/python3.12/ctypes/wintypes.py +202 -0
  379. package/python/lib/python3.12/curses/__init__.py +101 -0
  380. package/python/lib/python3.12/curses/ascii.py +99 -0
  381. package/python/lib/python3.12/curses/has_key.py +192 -0
  382. package/python/lib/python3.12/curses/panel.py +6 -0
  383. package/python/lib/python3.12/curses/textpad.py +204 -0
  384. package/python/lib/python3.12/dataclasses.py +1588 -0
  385. package/python/lib/python3.12/datetime.py +9 -0
  386. package/python/lib/python3.12/dbm/__init__.py +190 -0
  387. package/python/lib/python3.12/dbm/dumb.py +317 -0
  388. package/python/lib/python3.12/dbm/gnu.py +3 -0
  389. package/python/lib/python3.12/dbm/ndbm.py +3 -0
  390. package/python/lib/python3.12/decimal.py +108 -0
  391. package/python/lib/python3.12/difflib.py +2056 -0
  392. package/python/lib/python3.12/dis.py +805 -0
  393. package/python/lib/python3.12/doctest.py +2845 -0
  394. package/python/lib/python3.12/email/__init__.py +61 -0
  395. package/python/lib/python3.12/email/__pycache__/__init__.cpython-312.pyc +0 -0
  396. package/python/lib/python3.12/email/__pycache__/_encoded_words.cpython-312.pyc +0 -0
  397. package/python/lib/python3.12/email/__pycache__/_parseaddr.cpython-312.pyc +0 -0
  398. package/python/lib/python3.12/email/__pycache__/_policybase.cpython-312.pyc +0 -0
  399. package/python/lib/python3.12/email/__pycache__/base64mime.cpython-312.pyc +0 -0
  400. package/python/lib/python3.12/email/__pycache__/charset.cpython-312.pyc +0 -0
  401. package/python/lib/python3.12/email/__pycache__/encoders.cpython-312.pyc +0 -0
  402. package/python/lib/python3.12/email/__pycache__/errors.cpython-312.pyc +0 -0
  403. package/python/lib/python3.12/email/__pycache__/feedparser.cpython-312.pyc +0 -0
  404. package/python/lib/python3.12/email/__pycache__/header.cpython-312.pyc +0 -0
  405. package/python/lib/python3.12/email/__pycache__/iterators.cpython-312.pyc +0 -0
  406. package/python/lib/python3.12/email/__pycache__/message.cpython-312.pyc +0 -0
  407. package/python/lib/python3.12/email/__pycache__/parser.cpython-312.pyc +0 -0
  408. package/python/lib/python3.12/email/__pycache__/quoprimime.cpython-312.pyc +0 -0
  409. package/python/lib/python3.12/email/__pycache__/utils.cpython-312.pyc +0 -0
  410. package/python/lib/python3.12/email/_encoded_words.py +233 -0
  411. package/python/lib/python3.12/email/_header_value_parser.py +3108 -0
  412. package/python/lib/python3.12/email/_parseaddr.py +557 -0
  413. package/python/lib/python3.12/email/_policybase.py +382 -0
  414. package/python/lib/python3.12/email/architecture.rst +216 -0
  415. package/python/lib/python3.12/email/base64mime.py +115 -0
  416. package/python/lib/python3.12/email/charset.py +398 -0
  417. package/python/lib/python3.12/email/contentmanager.py +251 -0
  418. package/python/lib/python3.12/email/encoders.py +65 -0
  419. package/python/lib/python3.12/email/errors.py +117 -0
  420. package/python/lib/python3.12/email/feedparser.py +534 -0
  421. package/python/lib/python3.12/email/generator.py +530 -0
  422. package/python/lib/python3.12/email/header.py +573 -0
  423. package/python/lib/python3.12/email/headerregistry.py +604 -0
  424. package/python/lib/python3.12/email/iterators.py +68 -0
  425. package/python/lib/python3.12/email/message.py +1215 -0
  426. package/python/lib/python3.12/email/mime/__init__.py +0 -0
  427. package/python/lib/python3.12/email/mime/application.py +37 -0
  428. package/python/lib/python3.12/email/mime/audio.py +100 -0
  429. package/python/lib/python3.12/email/mime/base.py +29 -0
  430. package/python/lib/python3.12/email/mime/image.py +152 -0
  431. package/python/lib/python3.12/email/mime/message.py +33 -0
  432. package/python/lib/python3.12/email/mime/multipart.py +47 -0
  433. package/python/lib/python3.12/email/mime/nonmultipart.py +21 -0
  434. package/python/lib/python3.12/email/mime/text.py +40 -0
  435. package/python/lib/python3.12/email/parser.py +127 -0
  436. package/python/lib/python3.12/email/policy.py +232 -0
  437. package/python/lib/python3.12/email/quoprimime.py +300 -0
  438. package/python/lib/python3.12/email/utils.py +486 -0
  439. package/python/lib/python3.12/encodings/__init__.py +174 -0
  440. package/python/lib/python3.12/encodings/__pycache__/__init__.cpython-312.pyc +0 -0
  441. package/python/lib/python3.12/encodings/__pycache__/aliases.cpython-312.pyc +0 -0
  442. package/python/lib/python3.12/encodings/__pycache__/utf_8.cpython-312.pyc +0 -0
  443. package/python/lib/python3.12/encodings/aliases.py +551 -0
  444. package/python/lib/python3.12/encodings/ascii.py +50 -0
  445. package/python/lib/python3.12/encodings/base64_codec.py +55 -0
  446. package/python/lib/python3.12/encodings/big5.py +39 -0
  447. package/python/lib/python3.12/encodings/big5hkscs.py +39 -0
  448. package/python/lib/python3.12/encodings/bz2_codec.py +78 -0
  449. package/python/lib/python3.12/encodings/charmap.py +69 -0
  450. package/python/lib/python3.12/encodings/cp037.py +307 -0
  451. package/python/lib/python3.12/encodings/cp1006.py +307 -0
  452. package/python/lib/python3.12/encodings/cp1026.py +307 -0
  453. package/python/lib/python3.12/encodings/cp1125.py +698 -0
  454. package/python/lib/python3.12/encodings/cp1140.py +307 -0
  455. package/python/lib/python3.12/encodings/cp1250.py +307 -0
  456. package/python/lib/python3.12/encodings/cp1251.py +307 -0
  457. package/python/lib/python3.12/encodings/cp1252.py +307 -0
  458. package/python/lib/python3.12/encodings/cp1253.py +307 -0
  459. package/python/lib/python3.12/encodings/cp1254.py +307 -0
  460. package/python/lib/python3.12/encodings/cp1255.py +307 -0
  461. package/python/lib/python3.12/encodings/cp1256.py +307 -0
  462. package/python/lib/python3.12/encodings/cp1257.py +307 -0
  463. package/python/lib/python3.12/encodings/cp1258.py +307 -0
  464. package/python/lib/python3.12/encodings/cp273.py +307 -0
  465. package/python/lib/python3.12/encodings/cp424.py +307 -0
  466. package/python/lib/python3.12/encodings/cp437.py +698 -0
  467. package/python/lib/python3.12/encodings/cp500.py +307 -0
  468. package/python/lib/python3.12/encodings/cp720.py +309 -0
  469. package/python/lib/python3.12/encodings/cp737.py +698 -0
  470. package/python/lib/python3.12/encodings/cp775.py +697 -0
  471. package/python/lib/python3.12/encodings/cp850.py +698 -0
  472. package/python/lib/python3.12/encodings/cp852.py +698 -0
  473. package/python/lib/python3.12/encodings/cp855.py +698 -0
  474. package/python/lib/python3.12/encodings/cp856.py +307 -0
  475. package/python/lib/python3.12/encodings/cp857.py +694 -0
  476. package/python/lib/python3.12/encodings/cp858.py +698 -0
  477. package/python/lib/python3.12/encodings/cp860.py +698 -0
  478. package/python/lib/python3.12/encodings/cp861.py +698 -0
  479. package/python/lib/python3.12/encodings/cp862.py +698 -0
  480. package/python/lib/python3.12/encodings/cp863.py +698 -0
  481. package/python/lib/python3.12/encodings/cp864.py +690 -0
  482. package/python/lib/python3.12/encodings/cp865.py +698 -0
  483. package/python/lib/python3.12/encodings/cp866.py +698 -0
  484. package/python/lib/python3.12/encodings/cp869.py +689 -0
  485. package/python/lib/python3.12/encodings/cp874.py +307 -0
  486. package/python/lib/python3.12/encodings/cp875.py +307 -0
  487. package/python/lib/python3.12/encodings/cp932.py +39 -0
  488. package/python/lib/python3.12/encodings/cp949.py +39 -0
  489. package/python/lib/python3.12/encodings/cp950.py +39 -0
  490. package/python/lib/python3.12/encodings/euc_jis_2004.py +39 -0
  491. package/python/lib/python3.12/encodings/euc_jisx0213.py +39 -0
  492. package/python/lib/python3.12/encodings/euc_jp.py +39 -0
  493. package/python/lib/python3.12/encodings/euc_kr.py +39 -0
  494. package/python/lib/python3.12/encodings/gb18030.py +39 -0
  495. package/python/lib/python3.12/encodings/gb2312.py +39 -0
  496. package/python/lib/python3.12/encodings/gbk.py +39 -0
  497. package/python/lib/python3.12/encodings/hex_codec.py +55 -0
  498. package/python/lib/python3.12/encodings/hp_roman8.py +314 -0
  499. package/python/lib/python3.12/encodings/hz.py +39 -0
  500. package/python/lib/python3.12/encodings/idna.py +317 -0
  501. package/python/lib/python3.12/encodings/iso2022_jp.py +39 -0
  502. package/python/lib/python3.12/encodings/iso2022_jp_1.py +39 -0
  503. package/python/lib/python3.12/encodings/iso2022_jp_2.py +39 -0
  504. package/python/lib/python3.12/encodings/iso2022_jp_2004.py +39 -0
  505. package/python/lib/python3.12/encodings/iso2022_jp_3.py +39 -0
  506. package/python/lib/python3.12/encodings/iso2022_jp_ext.py +39 -0
  507. package/python/lib/python3.12/encodings/iso2022_kr.py +39 -0
  508. package/python/lib/python3.12/encodings/iso8859_1.py +307 -0
  509. package/python/lib/python3.12/encodings/iso8859_10.py +307 -0
  510. package/python/lib/python3.12/encodings/iso8859_11.py +307 -0
  511. package/python/lib/python3.12/encodings/iso8859_13.py +307 -0
  512. package/python/lib/python3.12/encodings/iso8859_14.py +307 -0
  513. package/python/lib/python3.12/encodings/iso8859_15.py +307 -0
  514. package/python/lib/python3.12/encodings/iso8859_16.py +307 -0
  515. package/python/lib/python3.12/encodings/iso8859_2.py +307 -0
  516. package/python/lib/python3.12/encodings/iso8859_3.py +307 -0
  517. package/python/lib/python3.12/encodings/iso8859_4.py +307 -0
  518. package/python/lib/python3.12/encodings/iso8859_5.py +307 -0
  519. package/python/lib/python3.12/encodings/iso8859_6.py +307 -0
  520. package/python/lib/python3.12/encodings/iso8859_7.py +307 -0
  521. package/python/lib/python3.12/encodings/iso8859_8.py +307 -0
  522. package/python/lib/python3.12/encodings/iso8859_9.py +307 -0
  523. package/python/lib/python3.12/encodings/johab.py +39 -0
  524. package/python/lib/python3.12/encodings/koi8_r.py +307 -0
  525. package/python/lib/python3.12/encodings/koi8_t.py +308 -0
  526. package/python/lib/python3.12/encodings/koi8_u.py +307 -0
  527. package/python/lib/python3.12/encodings/kz1048.py +307 -0
  528. package/python/lib/python3.12/encodings/latin_1.py +50 -0
  529. package/python/lib/python3.12/encodings/mac_arabic.py +698 -0
  530. package/python/lib/python3.12/encodings/mac_croatian.py +307 -0
  531. package/python/lib/python3.12/encodings/mac_cyrillic.py +307 -0
  532. package/python/lib/python3.12/encodings/mac_farsi.py +307 -0
  533. package/python/lib/python3.12/encodings/mac_greek.py +307 -0
  534. package/python/lib/python3.12/encodings/mac_iceland.py +307 -0
  535. package/python/lib/python3.12/encodings/mac_latin2.py +312 -0
  536. package/python/lib/python3.12/encodings/mac_roman.py +307 -0
  537. package/python/lib/python3.12/encodings/mac_romanian.py +307 -0
  538. package/python/lib/python3.12/encodings/mac_turkish.py +307 -0
  539. package/python/lib/python3.12/encodings/mbcs.py +47 -0
  540. package/python/lib/python3.12/encodings/oem.py +41 -0
  541. package/python/lib/python3.12/encodings/palmos.py +308 -0
  542. package/python/lib/python3.12/encodings/ptcp154.py +312 -0
  543. package/python/lib/python3.12/encodings/punycode.py +237 -0
  544. package/python/lib/python3.12/encodings/quopri_codec.py +56 -0
  545. package/python/lib/python3.12/encodings/raw_unicode_escape.py +46 -0
  546. package/python/lib/python3.12/encodings/rot_13.py +113 -0
  547. package/python/lib/python3.12/encodings/shift_jis.py +39 -0
  548. package/python/lib/python3.12/encodings/shift_jis_2004.py +39 -0
  549. package/python/lib/python3.12/encodings/shift_jisx0213.py +39 -0
  550. package/python/lib/python3.12/encodings/tis_620.py +307 -0
  551. package/python/lib/python3.12/encodings/undefined.py +49 -0
  552. package/python/lib/python3.12/encodings/unicode_escape.py +46 -0
  553. package/python/lib/python3.12/encodings/utf_16.py +155 -0
  554. package/python/lib/python3.12/encodings/utf_16_be.py +42 -0
  555. package/python/lib/python3.12/encodings/utf_16_le.py +42 -0
  556. package/python/lib/python3.12/encodings/utf_32.py +150 -0
  557. package/python/lib/python3.12/encodings/utf_32_be.py +37 -0
  558. package/python/lib/python3.12/encodings/utf_32_le.py +37 -0
  559. package/python/lib/python3.12/encodings/utf_7.py +38 -0
  560. package/python/lib/python3.12/encodings/utf_8.py +42 -0
  561. package/python/lib/python3.12/encodings/utf_8_sig.py +130 -0
  562. package/python/lib/python3.12/encodings/uu_codec.py +103 -0
  563. package/python/lib/python3.12/encodings/zlib_codec.py +77 -0
  564. package/python/lib/python3.12/ensurepip/__init__.py +291 -0
  565. package/python/lib/python3.12/ensurepip/__main__.py +5 -0
  566. package/python/lib/python3.12/ensurepip/_bundled/pip-25.0.1-py3-none-any.whl +0 -0
  567. package/python/lib/python3.12/ensurepip/_uninstall.py +31 -0
  568. package/python/lib/python3.12/enum.py +2108 -0
  569. package/python/lib/python3.12/filecmp.py +315 -0
  570. package/python/lib/python3.12/fileinput.py +442 -0
  571. package/python/lib/python3.12/fnmatch.py +185 -0
  572. package/python/lib/python3.12/fractions.py +990 -0
  573. package/python/lib/python3.12/ftplib.py +966 -0
  574. package/python/lib/python3.12/functools.py +1009 -0
  575. package/python/lib/python3.12/genericpath.py +176 -0
  576. package/python/lib/python3.12/getopt.py +215 -0
  577. package/python/lib/python3.12/getpass.py +185 -0
  578. package/python/lib/python3.12/gettext.py +646 -0
  579. package/python/lib/python3.12/glob.py +252 -0
  580. package/python/lib/python3.12/graphlib.py +250 -0
  581. package/python/lib/python3.12/gzip.py +711 -0
  582. package/python/lib/python3.12/hashlib.py +253 -0
  583. package/python/lib/python3.12/heapq.py +603 -0
  584. package/python/lib/python3.12/hmac.py +219 -0
  585. package/python/lib/python3.12/html/__init__.py +132 -0
  586. package/python/lib/python3.12/html/entities.py +2513 -0
  587. package/python/lib/python3.12/html/parser.py +535 -0
  588. package/python/lib/python3.12/http/__init__.py +200 -0
  589. package/python/lib/python3.12/http/__pycache__/__init__.cpython-312.pyc +0 -0
  590. package/python/lib/python3.12/http/__pycache__/client.cpython-312.pyc +0 -0
  591. package/python/lib/python3.12/http/client.py +1570 -0
  592. package/python/lib/python3.12/http/cookiejar.py +2121 -0
  593. package/python/lib/python3.12/http/cookies.py +615 -0
  594. package/python/lib/python3.12/http/server.py +1335 -0
  595. package/python/lib/python3.12/imaplib.py +1641 -0
  596. package/python/lib/python3.12/imghdr.py +180 -0
  597. package/python/lib/python3.12/importlib/__init__.py +138 -0
  598. package/python/lib/python3.12/importlib/_abc.py +39 -0
  599. package/python/lib/python3.12/importlib/_bootstrap.py +1551 -0
  600. package/python/lib/python3.12/importlib/_bootstrap_external.py +1749 -0
  601. package/python/lib/python3.12/importlib/abc.py +239 -0
  602. package/python/lib/python3.12/importlib/machinery.py +20 -0
  603. package/python/lib/python3.12/importlib/metadata/__init__.py +966 -0
  604. package/python/lib/python3.12/importlib/metadata/_adapters.py +89 -0
  605. package/python/lib/python3.12/importlib/metadata/_collections.py +30 -0
  606. package/python/lib/python3.12/importlib/metadata/_functools.py +104 -0
  607. package/python/lib/python3.12/importlib/metadata/_itertools.py +73 -0
  608. package/python/lib/python3.12/importlib/metadata/_meta.py +63 -0
  609. package/python/lib/python3.12/importlib/metadata/_text.py +99 -0
  610. package/python/lib/python3.12/importlib/readers.py +12 -0
  611. package/python/lib/python3.12/importlib/resources/__init__.py +38 -0
  612. package/python/lib/python3.12/importlib/resources/_adapters.py +168 -0
  613. package/python/lib/python3.12/importlib/resources/_common.py +208 -0
  614. package/python/lib/python3.12/importlib/resources/_itertools.py +38 -0
  615. package/python/lib/python3.12/importlib/resources/_legacy.py +98 -0
  616. package/python/lib/python3.12/importlib/resources/abc.py +173 -0
  617. package/python/lib/python3.12/importlib/resources/readers.py +146 -0
  618. package/python/lib/python3.12/importlib/resources/simple.py +106 -0
  619. package/python/lib/python3.12/importlib/simple.py +14 -0
  620. package/python/lib/python3.12/importlib/util.py +270 -0
  621. package/python/lib/python3.12/inspect.py +3433 -0
  622. package/python/lib/python3.12/io.py +99 -0
  623. package/python/lib/python3.12/ipaddress.py +2430 -0
  624. package/python/lib/python3.12/json/__init__.py +359 -0
  625. package/python/lib/python3.12/json/__pycache__/__init__.cpython-312.pyc +0 -0
  626. package/python/lib/python3.12/json/__pycache__/decoder.cpython-312.pyc +0 -0
  627. package/python/lib/python3.12/json/__pycache__/encoder.cpython-312.pyc +0 -0
  628. package/python/lib/python3.12/json/__pycache__/scanner.cpython-312.pyc +0 -0
  629. package/python/lib/python3.12/json/decoder.py +357 -0
  630. package/python/lib/python3.12/json/encoder.py +443 -0
  631. package/python/lib/python3.12/json/scanner.py +73 -0
  632. package/python/lib/python3.12/json/tool.py +85 -0
  633. package/python/lib/python3.12/keyword.py +64 -0
  634. package/python/lib/python3.12/lib-dynload/.empty +0 -0
  635. package/python/lib/python3.12/lib-dynload/_crypt.cpython-312-darwin.so +0 -0
  636. package/python/lib/python3.12/lib-dynload/_dbm.cpython-312-darwin.so +0 -0
  637. package/python/lib/python3.12/linecache.py +185 -0
  638. package/python/lib/python3.12/locale.py +1779 -0
  639. package/python/lib/python3.12/logging/__init__.py +2345 -0
  640. package/python/lib/python3.12/logging/config.py +1078 -0
  641. package/python/lib/python3.12/logging/handlers.py +1624 -0
  642. package/python/lib/python3.12/lzma.py +356 -0
  643. package/python/lib/python3.12/mailbox.py +2153 -0
  644. package/python/lib/python3.12/mailcap.py +302 -0
  645. package/python/lib/python3.12/mimetypes.py +656 -0
  646. package/python/lib/python3.12/modulefinder.py +666 -0
  647. package/python/lib/python3.12/multiprocessing/__init__.py +37 -0
  648. package/python/lib/python3.12/multiprocessing/connection.py +1178 -0
  649. package/python/lib/python3.12/multiprocessing/context.py +377 -0
  650. package/python/lib/python3.12/multiprocessing/dummy/__init__.py +126 -0
  651. package/python/lib/python3.12/multiprocessing/dummy/connection.py +75 -0
  652. package/python/lib/python3.12/multiprocessing/forkserver.py +350 -0
  653. package/python/lib/python3.12/multiprocessing/heap.py +337 -0
  654. package/python/lib/python3.12/multiprocessing/managers.py +1387 -0
  655. package/python/lib/python3.12/multiprocessing/pool.py +957 -0
  656. package/python/lib/python3.12/multiprocessing/popen_fork.py +83 -0
  657. package/python/lib/python3.12/multiprocessing/popen_forkserver.py +74 -0
  658. package/python/lib/python3.12/multiprocessing/popen_spawn_posix.py +72 -0
  659. package/python/lib/python3.12/multiprocessing/popen_spawn_win32.py +145 -0
  660. package/python/lib/python3.12/multiprocessing/process.py +439 -0
  661. package/python/lib/python3.12/multiprocessing/queues.py +401 -0
  662. package/python/lib/python3.12/multiprocessing/reduction.py +281 -0
  663. package/python/lib/python3.12/multiprocessing/resource_sharer.py +154 -0
  664. package/python/lib/python3.12/multiprocessing/resource_tracker.py +294 -0
  665. package/python/lib/python3.12/multiprocessing/shared_memory.py +534 -0
  666. package/python/lib/python3.12/multiprocessing/sharedctypes.py +240 -0
  667. package/python/lib/python3.12/multiprocessing/spawn.py +307 -0
  668. package/python/lib/python3.12/multiprocessing/synchronize.py +404 -0
  669. package/python/lib/python3.12/multiprocessing/util.py +494 -0
  670. package/python/lib/python3.12/netrc.py +192 -0
  671. package/python/lib/python3.12/nntplib.py +1093 -0
  672. package/python/lib/python3.12/ntpath.py +869 -0
  673. package/python/lib/python3.12/nturl2path.py +69 -0
  674. package/python/lib/python3.12/numbers.py +418 -0
  675. package/python/lib/python3.12/opcode.py +493 -0
  676. package/python/lib/python3.12/operator.py +467 -0
  677. package/python/lib/python3.12/optparse.py +1681 -0
  678. package/python/lib/python3.12/os.py +1159 -0
  679. package/python/lib/python3.12/pathlib.py +1435 -0
  680. package/python/lib/python3.12/pdb.py +1987 -0
  681. package/python/lib/python3.12/pickle.py +1866 -0
  682. package/python/lib/python3.12/pickletools.py +2904 -0
  683. package/python/lib/python3.12/pipes.py +250 -0
  684. package/python/lib/python3.12/pkgutil.py +529 -0
  685. package/python/lib/python3.12/platform.py +1359 -0
  686. package/python/lib/python3.12/plistlib.py +920 -0
  687. package/python/lib/python3.12/poplib.py +478 -0
  688. package/python/lib/python3.12/posixpath.py +577 -0
  689. package/python/lib/python3.12/pprint.py +658 -0
  690. package/python/lib/python3.12/profile.py +615 -0
  691. package/python/lib/python3.12/pstats.py +778 -0
  692. package/python/lib/python3.12/pty.py +211 -0
  693. package/python/lib/python3.12/py_compile.py +212 -0
  694. package/python/lib/python3.12/pyclbr.py +314 -0
  695. package/python/lib/python3.12/pydoc.py +2950 -0
  696. package/python/lib/python3.12/pydoc_data/__init__.py +0 -0
  697. package/python/lib/python3.12/pydoc_data/_pydoc.css +112 -0
  698. package/python/lib/python3.12/pydoc_data/topics.py +12500 -0
  699. package/python/lib/python3.12/queue.py +326 -0
  700. package/python/lib/python3.12/quopri.py +237 -0
  701. package/python/lib/python3.12/random.py +996 -0
  702. package/python/lib/python3.12/re/__init__.py +385 -0
  703. package/python/lib/python3.12/re/__pycache__/__init__.cpython-312.pyc +0 -0
  704. package/python/lib/python3.12/re/__pycache__/_casefix.cpython-312.pyc +0 -0
  705. package/python/lib/python3.12/re/__pycache__/_compiler.cpython-312.pyc +0 -0
  706. package/python/lib/python3.12/re/__pycache__/_constants.cpython-312.pyc +0 -0
  707. package/python/lib/python3.12/re/__pycache__/_parser.cpython-312.pyc +0 -0
  708. package/python/lib/python3.12/re/_casefix.py +106 -0
  709. package/python/lib/python3.12/re/_compiler.py +770 -0
  710. package/python/lib/python3.12/re/_constants.py +220 -0
  711. package/python/lib/python3.12/re/_parser.py +1080 -0
  712. package/python/lib/python3.12/reprlib.py +214 -0
  713. package/python/lib/python3.12/rlcompleter.py +219 -0
  714. package/python/lib/python3.12/runpy.py +319 -0
  715. package/python/lib/python3.12/sched.py +167 -0
  716. package/python/lib/python3.12/secrets.py +71 -0
  717. package/python/lib/python3.12/selectors.py +623 -0
  718. package/python/lib/python3.12/shelve.py +243 -0
  719. package/python/lib/python3.12/shlex.py +345 -0
  720. package/python/lib/python3.12/shutil.py +1566 -0
  721. package/python/lib/python3.12/signal.py +94 -0
  722. package/python/lib/python3.12/site-packages/README.txt +2 -0
  723. package/python/lib/python3.12/site-packages/pip/__init__.py +13 -0
  724. package/python/lib/python3.12/site-packages/pip/__main__.py +24 -0
  725. package/python/lib/python3.12/site-packages/pip/__pip-runner__.py +50 -0
  726. package/python/lib/python3.12/site-packages/pip/_internal/__init__.py +18 -0
  727. package/python/lib/python3.12/site-packages/pip/_internal/build_env.py +606 -0
  728. package/python/lib/python3.12/site-packages/pip/_internal/cache.py +291 -0
  729. package/python/lib/python3.12/site-packages/pip/_internal/cli/__init__.py +3 -0
  730. package/python/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py +184 -0
  731. package/python/lib/python3.12/site-packages/pip/_internal/cli/base_command.py +264 -0
  732. package/python/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py +1298 -0
  733. package/python/lib/python3.12/site-packages/pip/_internal/cli/command_context.py +28 -0
  734. package/python/lib/python3.12/site-packages/pip/_internal/cli/index_command.py +212 -0
  735. package/python/lib/python3.12/site-packages/pip/_internal/cli/main.py +85 -0
  736. package/python/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py +136 -0
  737. package/python/lib/python3.12/site-packages/pip/_internal/cli/parser.py +358 -0
  738. package/python/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py +153 -0
  739. package/python/lib/python3.12/site-packages/pip/_internal/cli/req_command.py +472 -0
  740. package/python/lib/python3.12/site-packages/pip/_internal/cli/spinners.py +235 -0
  741. package/python/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py +6 -0
  742. package/python/lib/python3.12/site-packages/pip/_internal/commands/__init__.py +139 -0
  743. package/python/lib/python3.12/site-packages/pip/_internal/commands/cache.py +255 -0
  744. package/python/lib/python3.12/site-packages/pip/_internal/commands/check.py +66 -0
  745. package/python/lib/python3.12/site-packages/pip/_internal/commands/completion.py +136 -0
  746. package/python/lib/python3.12/site-packages/pip/_internal/commands/configuration.py +288 -0
  747. package/python/lib/python3.12/site-packages/pip/_internal/commands/debug.py +196 -0
  748. package/python/lib/python3.12/site-packages/pip/_internal/commands/download.py +146 -0
  749. package/python/lib/python3.12/site-packages/pip/_internal/commands/freeze.py +107 -0
  750. package/python/lib/python3.12/site-packages/pip/_internal/commands/hash.py +58 -0
  751. package/python/lib/python3.12/site-packages/pip/_internal/commands/help.py +40 -0
  752. package/python/lib/python3.12/site-packages/pip/_internal/commands/index.py +166 -0
  753. package/python/lib/python3.12/site-packages/pip/_internal/commands/inspect.py +92 -0
  754. package/python/lib/python3.12/site-packages/pip/_internal/commands/install.py +904 -0
  755. package/python/lib/python3.12/site-packages/pip/_internal/commands/list.py +403 -0
  756. package/python/lib/python3.12/site-packages/pip/_internal/commands/lock.py +175 -0
  757. package/python/lib/python3.12/site-packages/pip/_internal/commands/search.py +178 -0
  758. package/python/lib/python3.12/site-packages/pip/_internal/commands/show.py +231 -0
  759. package/python/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py +113 -0
  760. package/python/lib/python3.12/site-packages/pip/_internal/commands/wheel.py +171 -0
  761. package/python/lib/python3.12/site-packages/pip/_internal/configuration.py +396 -0
  762. package/python/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py +21 -0
  763. package/python/lib/python3.12/site-packages/pip/_internal/distributions/base.py +55 -0
  764. package/python/lib/python3.12/site-packages/pip/_internal/distributions/installed.py +33 -0
  765. package/python/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py +164 -0
  766. package/python/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py +44 -0
  767. package/python/lib/python3.12/site-packages/pip/_internal/exceptions.py +971 -0
  768. package/python/lib/python3.12/site-packages/pip/_internal/index/__init__.py +1 -0
  769. package/python/lib/python3.12/site-packages/pip/_internal/index/collector.py +488 -0
  770. package/python/lib/python3.12/site-packages/pip/_internal/index/package_finder.py +1113 -0
  771. package/python/lib/python3.12/site-packages/pip/_internal/index/sources.py +287 -0
  772. package/python/lib/python3.12/site-packages/pip/_internal/locations/__init__.py +438 -0
  773. package/python/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py +173 -0
  774. package/python/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py +218 -0
  775. package/python/lib/python3.12/site-packages/pip/_internal/locations/base.py +82 -0
  776. package/python/lib/python3.12/site-packages/pip/_internal/main.py +12 -0
  777. package/python/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py +169 -0
  778. package/python/lib/python3.12/site-packages/pip/_internal/metadata/_json.py +87 -0
  779. package/python/lib/python3.12/site-packages/pip/_internal/metadata/base.py +685 -0
  780. package/python/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
  781. package/python/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
  782. package/python/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py +235 -0
  783. package/python/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
  784. package/python/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
  785. package/python/lib/python3.12/site-packages/pip/_internal/models/__init__.py +1 -0
  786. package/python/lib/python3.12/site-packages/pip/_internal/models/candidate.py +23 -0
  787. package/python/lib/python3.12/site-packages/pip/_internal/models/direct_url.py +42 -0
  788. package/python/lib/python3.12/site-packages/pip/_internal/models/format_control.py +78 -0
  789. package/python/lib/python3.12/site-packages/pip/_internal/models/index.py +28 -0
  790. package/python/lib/python3.12/site-packages/pip/_internal/models/installation_report.py +57 -0
  791. package/python/lib/python3.12/site-packages/pip/_internal/models/link.py +617 -0
  792. package/python/lib/python3.12/site-packages/pip/_internal/models/release_control.py +91 -0
  793. package/python/lib/python3.12/site-packages/pip/_internal/models/scheme.py +23 -0
  794. package/python/lib/python3.12/site-packages/pip/_internal/models/search_scope.py +124 -0
  795. package/python/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py +36 -0
  796. package/python/lib/python3.12/site-packages/pip/_internal/models/target_python.py +122 -0
  797. package/python/lib/python3.12/site-packages/pip/_internal/models/wheel.py +80 -0
  798. package/python/lib/python3.12/site-packages/pip/_internal/network/__init__.py +1 -0
  799. package/python/lib/python3.12/site-packages/pip/_internal/network/auth.py +570 -0
  800. package/python/lib/python3.12/site-packages/pip/_internal/network/cache.py +128 -0
  801. package/python/lib/python3.12/site-packages/pip/_internal/network/download.py +340 -0
  802. package/python/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py +215 -0
  803. package/python/lib/python3.12/site-packages/pip/_internal/network/session.py +537 -0
  804. package/python/lib/python3.12/site-packages/pip/_internal/network/utils.py +98 -0
  805. package/python/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py +61 -0
  806. package/python/lib/python3.12/site-packages/pip/_internal/operations/__init__.py +0 -0
  807. package/python/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  808. package/python/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
  809. package/python/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  810. package/python/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
  811. package/python/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py +38 -0
  812. package/python/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
  813. package/python/lib/python3.12/site-packages/pip/_internal/operations/check.py +175 -0
  814. package/python/lib/python3.12/site-packages/pip/_internal/operations/freeze.py +259 -0
  815. package/python/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py +1 -0
  816. package/python/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py +759 -0
  817. package/python/lib/python3.12/site-packages/pip/_internal/operations/prepare.py +751 -0
  818. package/python/lib/python3.12/site-packages/pip/_internal/pyproject.py +123 -0
  819. package/python/lib/python3.12/site-packages/pip/_internal/req/__init__.py +103 -0
  820. package/python/lib/python3.12/site-packages/pip/_internal/req/constructors.py +677 -0
  821. package/python/lib/python3.12/site-packages/pip/_internal/req/pep723.py +41 -0
  822. package/python/lib/python3.12/site-packages/pip/_internal/req/req_dependency_group.py +86 -0
  823. package/python/lib/python3.12/site-packages/pip/_internal/req/req_file.py +622 -0
  824. package/python/lib/python3.12/site-packages/pip/_internal/req/req_install.py +838 -0
  825. package/python/lib/python3.12/site-packages/pip/_internal/req/req_set.py +81 -0
  826. package/python/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py +639 -0
  827. package/python/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py +0 -0
  828. package/python/lib/python3.12/site-packages/pip/_internal/resolution/base.py +20 -0
  829. package/python/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  830. package/python/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
  831. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  832. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py +164 -0
  833. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py +599 -0
  834. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py +914 -0
  835. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
  836. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py +306 -0
  837. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py +98 -0
  838. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py +251 -0
  839. package/python/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py +332 -0
  840. package/python/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py +246 -0
  841. package/python/lib/python3.12/site-packages/pip/_internal/utils/__init__.py +0 -0
  842. package/python/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  843. package/python/lib/python3.12/site-packages/pip/_internal/utils/_log.py +38 -0
  844. package/python/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py +52 -0
  845. package/python/lib/python3.12/site-packages/pip/_internal/utils/compat.py +85 -0
  846. package/python/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
  847. package/python/lib/python3.12/site-packages/pip/_internal/utils/datetime.py +28 -0
  848. package/python/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py +139 -0
  849. package/python/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py +92 -0
  850. package/python/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py +81 -0
  851. package/python/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py +88 -0
  852. package/python/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py +201 -0
  853. package/python/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py +24 -0
  854. package/python/lib/python3.12/site-packages/pip/_internal/utils/glibc.py +102 -0
  855. package/python/lib/python3.12/site-packages/pip/_internal/utils/hashes.py +150 -0
  856. package/python/lib/python3.12/site-packages/pip/_internal/utils/logging.py +396 -0
  857. package/python/lib/python3.12/site-packages/pip/_internal/utils/misc.py +771 -0
  858. package/python/lib/python3.12/site-packages/pip/_internal/utils/packaging.py +44 -0
  859. package/python/lib/python3.12/site-packages/pip/_internal/utils/pylock.py +283 -0
  860. package/python/lib/python3.12/site-packages/pip/_internal/utils/retry.py +45 -0
  861. package/python/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py +248 -0
  862. package/python/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py +294 -0
  863. package/python/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py +381 -0
  864. package/python/lib/python3.12/site-packages/pip/_internal/utils/urls.py +55 -0
  865. package/python/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py +105 -0
  866. package/python/lib/python3.12/site-packages/pip/_internal/utils/wheel.py +132 -0
  867. package/python/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py +15 -0
  868. package/python/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py +130 -0
  869. package/python/lib/python3.12/site-packages/pip/_internal/vcs/git.py +571 -0
  870. package/python/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py +186 -0
  871. package/python/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py +335 -0
  872. package/python/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py +695 -0
  873. package/python/lib/python3.12/site-packages/pip/_internal/wheel_builder.py +261 -0
  874. package/python/lib/python3.12/site-packages/pip/_vendor/README.rst +178 -0
  875. package/python/lib/python3.12/site-packages/pip/_vendor/__init__.py +117 -0
  876. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  877. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py +32 -0
  878. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
  879. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py +167 -0
  880. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
  881. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
  882. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
  883. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
  884. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
  885. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py +121 -0
  886. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
  887. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  888. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
  889. package/python/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
  890. package/python/lib/python3.12/site-packages/pip/_vendor/certifi/LICENSE +20 -0
  891. package/python/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  892. package/python/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  893. package/python/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem +4494 -0
  894. package/python/lib/python3.12/site-packages/pip/_vendor/certifi/core.py +83 -0
  895. package/python/lib/python3.12/site-packages/pip/_vendor/certifi/py.typed +0 -0
  896. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/LICENSE.txt +284 -0
  897. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py +33 -0
  898. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py +1137 -0
  899. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py +358 -0
  900. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py +447 -0
  901. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  902. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/t64-arm.exe +0 -0
  903. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  904. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/util.py +1984 -0
  905. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  906. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/w64-arm.exe +0 -0
  907. package/python/lib/python3.12/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  908. package/python/lib/python3.12/site-packages/pip/_vendor/distro/LICENSE +202 -0
  909. package/python/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py +54 -0
  910. package/python/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py +4 -0
  911. package/python/lib/python3.12/site-packages/pip/_vendor/distro/distro.py +1403 -0
  912. package/python/lib/python3.12/site-packages/pip/_vendor/distro/py.typed +0 -0
  913. package/python/lib/python3.12/site-packages/pip/_vendor/idna/LICENSE.md +31 -0
  914. package/python/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py +45 -0
  915. package/python/lib/python3.12/site-packages/pip/_vendor/idna/codec.py +122 -0
  916. package/python/lib/python3.12/site-packages/pip/_vendor/idna/compat.py +15 -0
  917. package/python/lib/python3.12/site-packages/pip/_vendor/idna/core.py +437 -0
  918. package/python/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py +4309 -0
  919. package/python/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py +57 -0
  920. package/python/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py +1 -0
  921. package/python/lib/python3.12/site-packages/pip/_vendor/idna/py.typed +0 -0
  922. package/python/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py +8841 -0
  923. package/python/lib/python3.12/site-packages/pip/_vendor/msgpack/COPYING +14 -0
  924. package/python/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
  925. package/python/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  926. package/python/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py +170 -0
  927. package/python/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
  928. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE +3 -0
  929. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  930. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/LICENSE.BSD +23 -0
  931. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py +15 -0
  932. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/_elffile.py +108 -0
  933. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
  934. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
  935. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/_parser.py +393 -0
  936. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py +33 -0
  937. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/_tokenizer.py +193 -0
  938. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/dependency_groups.py +302 -0
  939. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/direct_url.py +325 -0
  940. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/errors.py +94 -0
  941. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/__init__.py +186 -0
  942. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/licenses/_spdx.py +799 -0
  943. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py +492 -0
  944. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/metadata.py +964 -0
  945. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/py.typed +0 -0
  946. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/pylock.py +905 -0
  947. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py +129 -0
  948. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py +1943 -0
  949. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py +932 -0
  950. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py +296 -0
  951. package/python/lib/python3.12/site-packages/pip/_vendor/packaging/version.py +1231 -0
  952. package/python/lib/python3.12/site-packages/pip/_vendor/pkg_resources/LICENSE +17 -0
  953. package/python/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
  954. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/LICENSE +21 -0
  955. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
  956. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
  957. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py +249 -0
  958. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py +299 -0
  959. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py +146 -0
  960. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  961. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
  962. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py +34 -0
  963. package/python/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py +278 -0
  964. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/LICENSE +25 -0
  965. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  966. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  967. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/console.py +70 -0
  968. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py +70 -0
  969. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  970. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py +129 -0
  971. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
  972. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  973. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/lexer.py +963 -0
  974. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  975. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
  976. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
  977. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  978. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/plugin.py +72 -0
  979. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  980. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  981. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
  982. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/style.py +203 -0
  983. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
  984. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
  985. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/token.py +214 -0
  986. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  987. package/python/lib/python3.12/site-packages/pip/_vendor/pygments/util.py +324 -0
  988. package/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  989. package/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
  990. package/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
  991. package/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
  992. package/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
  993. package/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  994. package/python/lib/python3.12/site-packages/pip/_vendor/requests/LICENSE +175 -0
  995. package/python/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py +178 -0
  996. package/python/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py +14 -0
  997. package/python/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py +51 -0
  998. package/python/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py +697 -0
  999. package/python/lib/python3.12/site-packages/pip/_vendor/requests/api.py +157 -0
  1000. package/python/lib/python3.12/site-packages/pip/_vendor/requests/auth.py +314 -0
  1001. package/python/lib/python3.12/site-packages/pip/_vendor/requests/certs.py +18 -0
  1002. package/python/lib/python3.12/site-packages/pip/_vendor/requests/compat.py +90 -0
  1003. package/python/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py +561 -0
  1004. package/python/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py +152 -0
  1005. package/python/lib/python3.12/site-packages/pip/_vendor/requests/help.py +124 -0
  1006. package/python/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py +34 -0
  1007. package/python/lib/python3.12/site-packages/pip/_vendor/requests/models.py +1041 -0
  1008. package/python/lib/python3.12/site-packages/pip/_vendor/requests/packages.py +25 -0
  1009. package/python/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py +834 -0
  1010. package/python/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  1011. package/python/lib/python3.12/site-packages/pip/_vendor/requests/structures.py +99 -0
  1012. package/python/lib/python3.12/site-packages/pip/_vendor/requests/utils.py +1083 -0
  1013. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/LICENSE +13 -0
  1014. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
  1015. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
  1016. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  1017. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
  1018. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
  1019. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
  1020. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
  1021. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
  1022. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +627 -0
  1023. package/python/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
  1024. package/python/lib/python3.12/site-packages/pip/_vendor/rich/LICENSE +19 -0
  1025. package/python/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py +177 -0
  1026. package/python/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py +245 -0
  1027. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
  1028. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  1029. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  1030. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  1031. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py +10 -0
  1032. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  1033. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py +268 -0
  1034. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  1035. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py +43 -0
  1036. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  1037. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  1038. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py +17 -0
  1039. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py +153 -0
  1040. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  1041. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py +16 -0
  1042. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py +19 -0
  1043. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
  1044. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py +71 -0
  1045. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  1046. package/python/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py +93 -0
  1047. package/python/lib/python3.12/site-packages/pip/_vendor/rich/abc.py +33 -0
  1048. package/python/lib/python3.12/site-packages/pip/_vendor/rich/align.py +306 -0
  1049. package/python/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py +241 -0
  1050. package/python/lib/python3.12/site-packages/pip/_vendor/rich/bar.py +93 -0
  1051. package/python/lib/python3.12/site-packages/pip/_vendor/rich/box.py +474 -0
  1052. package/python/lib/python3.12/site-packages/pip/_vendor/rich/cells.py +174 -0
  1053. package/python/lib/python3.12/site-packages/pip/_vendor/rich/color.py +621 -0
  1054. package/python/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  1055. package/python/lib/python3.12/site-packages/pip/_vendor/rich/columns.py +187 -0
  1056. package/python/lib/python3.12/site-packages/pip/_vendor/rich/console.py +2680 -0
  1057. package/python/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py +37 -0
  1058. package/python/lib/python3.12/site-packages/pip/_vendor/rich/containers.py +167 -0
  1059. package/python/lib/python3.12/site-packages/pip/_vendor/rich/control.py +219 -0
  1060. package/python/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py +193 -0
  1061. package/python/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py +39 -0
  1062. package/python/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py +91 -0
  1063. package/python/lib/python3.12/site-packages/pip/_vendor/rich/errors.py +34 -0
  1064. package/python/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  1065. package/python/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py +88 -0
  1066. package/python/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  1067. package/python/lib/python3.12/site-packages/pip/_vendor/rich/json.py +139 -0
  1068. package/python/lib/python3.12/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  1069. package/python/lib/python3.12/site-packages/pip/_vendor/rich/layout.py +442 -0
  1070. package/python/lib/python3.12/site-packages/pip/_vendor/rich/live.py +400 -0
  1071. package/python/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py +106 -0
  1072. package/python/lib/python3.12/site-packages/pip/_vendor/rich/logging.py +297 -0
  1073. package/python/lib/python3.12/site-packages/pip/_vendor/rich/markup.py +251 -0
  1074. package/python/lib/python3.12/site-packages/pip/_vendor/rich/measure.py +151 -0
  1075. package/python/lib/python3.12/site-packages/pip/_vendor/rich/padding.py +141 -0
  1076. package/python/lib/python3.12/site-packages/pip/_vendor/rich/pager.py +34 -0
  1077. package/python/lib/python3.12/site-packages/pip/_vendor/rich/palette.py +100 -0
  1078. package/python/lib/python3.12/site-packages/pip/_vendor/rich/panel.py +317 -0
  1079. package/python/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py +1016 -0
  1080. package/python/lib/python3.12/site-packages/pip/_vendor/rich/progress.py +1715 -0
  1081. package/python/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
  1082. package/python/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py +400 -0
  1083. package/python/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py +42 -0
  1084. package/python/lib/python3.12/site-packages/pip/_vendor/rich/py.typed +0 -0
  1085. package/python/lib/python3.12/site-packages/pip/_vendor/rich/region.py +10 -0
  1086. package/python/lib/python3.12/site-packages/pip/_vendor/rich/repr.py +149 -0
  1087. package/python/lib/python3.12/site-packages/pip/_vendor/rich/rule.py +130 -0
  1088. package/python/lib/python3.12/site-packages/pip/_vendor/rich/scope.py +86 -0
  1089. package/python/lib/python3.12/site-packages/pip/_vendor/rich/screen.py +54 -0
  1090. package/python/lib/python3.12/site-packages/pip/_vendor/rich/segment.py +752 -0
  1091. package/python/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py +132 -0
  1092. package/python/lib/python3.12/site-packages/pip/_vendor/rich/status.py +131 -0
  1093. package/python/lib/python3.12/site-packages/pip/_vendor/rich/style.py +792 -0
  1094. package/python/lib/python3.12/site-packages/pip/_vendor/rich/styled.py +42 -0
  1095. package/python/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py +985 -0
  1096. package/python/lib/python3.12/site-packages/pip/_vendor/rich/table.py +1006 -0
  1097. package/python/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  1098. package/python/lib/python3.12/site-packages/pip/_vendor/rich/text.py +1361 -0
  1099. package/python/lib/python3.12/site-packages/pip/_vendor/rich/theme.py +115 -0
  1100. package/python/lib/python3.12/site-packages/pip/_vendor/rich/themes.py +5 -0
  1101. package/python/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py +899 -0
  1102. package/python/lib/python3.12/site-packages/pip/_vendor/rich/tree.py +257 -0
  1103. package/python/lib/python3.12/site-packages/pip/_vendor/tomli/LICENSE +21 -0
  1104. package/python/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py +8 -0
  1105. package/python/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py +788 -0
  1106. package/python/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py +115 -0
  1107. package/python/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py +10 -0
  1108. package/python/lib/python3.12/site-packages/pip/_vendor/tomli/py.typed +1 -0
  1109. package/python/lib/python3.12/site-packages/pip/_vendor/tomli_w/LICENSE +21 -0
  1110. package/python/lib/python3.12/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  1111. package/python/lib/python3.12/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  1112. package/python/lib/python3.12/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  1113. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/LICENSE +21 -0
  1114. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  1115. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py +341 -0
  1116. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  1117. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
  1118. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
  1119. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py +567 -0
  1120. package/python/lib/python3.12/site-packages/pip/_vendor/truststore/py.typed +0 -0
  1121. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/LICENSE.txt +21 -0
  1122. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py +211 -0
  1123. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/_base_connection.py +165 -0
  1124. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py +487 -0
  1125. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/_request_methods.py +278 -0
  1126. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py +34 -0
  1127. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py +1099 -0
  1128. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py +1178 -0
  1129. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  1130. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/emscripten/__init__.py +17 -0
  1131. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/emscripten/connection.py +260 -0
  1132. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/emscripten/emscripten_fetch_worker.js +110 -0
  1133. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/emscripten/fetch.py +726 -0
  1134. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/emscripten/request.py +22 -0
  1135. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/emscripten/response.py +277 -0
  1136. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +564 -0
  1137. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py +228 -0
  1138. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py +335 -0
  1139. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py +341 -0
  1140. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py +89 -0
  1141. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/http2/__init__.py +53 -0
  1142. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/http2/connection.py +356 -0
  1143. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/http2/probe.py +87 -0
  1144. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py +651 -0
  1145. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/py.typed +2 -0
  1146. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py +1474 -0
  1147. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py +42 -0
  1148. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py +137 -0
  1149. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py +43 -0
  1150. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py +254 -0
  1151. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py +101 -0
  1152. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py +549 -0
  1153. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py +527 -0
  1154. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  1155. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py +271 -0
  1156. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py +275 -0
  1157. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py +469 -0
  1158. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/util.py +42 -0
  1159. package/python/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py +124 -0
  1160. package/python/lib/python3.12/site-packages/pip/_vendor/vendor.txt +18 -0
  1161. package/python/lib/python3.12/site-packages/pip/py.typed +4 -0
  1162. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/INSTALLER +1 -0
  1163. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/METADATA +109 -0
  1164. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/RECORD +866 -0
  1165. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/REQUESTED +0 -0
  1166. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/WHEEL +4 -0
  1167. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/direct_url.json +1 -0
  1168. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/entry_points.txt +4 -0
  1169. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/AUTHORS.txt +868 -0
  1170. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/LICENSE.txt +20 -0
  1171. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  1172. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/certifi/LICENSE +20 -0
  1173. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt +284 -0
  1174. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/distro/LICENSE +202 -0
  1175. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md +31 -0
  1176. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/msgpack/COPYING +14 -0
  1177. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE +3 -0
  1178. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  1179. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD +23 -0
  1180. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE +17 -0
  1181. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE +21 -0
  1182. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/pygments/LICENSE +25 -0
  1183. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  1184. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/requests/LICENSE +175 -0
  1185. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE +13 -0
  1186. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/rich/LICENSE +19 -0
  1187. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE +21 -0
  1188. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE +21 -0
  1189. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/truststore/LICENSE +21 -0
  1190. package/python/lib/python3.12/site-packages/pip-26.1.2.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt +21 -0
  1191. package/python/lib/python3.12/site.py +693 -0
  1192. package/python/lib/python3.12/smtplib.py +1109 -0
  1193. package/python/lib/python3.12/sndhdr.py +271 -0
  1194. package/python/lib/python3.12/socket.py +983 -0
  1195. package/python/lib/python3.12/socketserver.py +863 -0
  1196. package/python/lib/python3.12/sqlite3/__init__.py +70 -0
  1197. package/python/lib/python3.12/sqlite3/__main__.py +127 -0
  1198. package/python/lib/python3.12/sqlite3/__pycache__/__init__.cpython-312.pyc +0 -0
  1199. package/python/lib/python3.12/sqlite3/__pycache__/dbapi2.cpython-312.pyc +0 -0
  1200. package/python/lib/python3.12/sqlite3/dbapi2.py +108 -0
  1201. package/python/lib/python3.12/sqlite3/dump.py +89 -0
  1202. package/python/lib/python3.12/sre_compile.py +7 -0
  1203. package/python/lib/python3.12/sre_constants.py +7 -0
  1204. package/python/lib/python3.12/sre_parse.py +7 -0
  1205. package/python/lib/python3.12/ssl.py +1488 -0
  1206. package/python/lib/python3.12/stat.py +195 -0
  1207. package/python/lib/python3.12/statistics.py +1454 -0
  1208. package/python/lib/python3.12/string.py +309 -0
  1209. package/python/lib/python3.12/stringprep.py +272 -0
  1210. package/python/lib/python3.12/struct.py +15 -0
  1211. package/python/lib/python3.12/subprocess.py +2216 -0
  1212. package/python/lib/python3.12/sunau.py +533 -0
  1213. package/python/lib/python3.12/symtable.py +362 -0
  1214. package/python/lib/python3.12/sysconfig.py +894 -0
  1215. package/python/lib/python3.12/tabnanny.py +340 -0
  1216. package/python/lib/python3.12/tarfile.py +3031 -0
  1217. package/python/lib/python3.12/telnetlib.py +680 -0
  1218. package/python/lib/python3.12/tempfile.py +956 -0
  1219. package/python/lib/python3.12/textwrap.py +491 -0
  1220. package/python/lib/python3.12/this.py +28 -0
  1221. package/python/lib/python3.12/threading.py +1708 -0
  1222. package/python/lib/python3.12/timeit.py +381 -0
  1223. package/python/lib/python3.12/token.py +143 -0
  1224. package/python/lib/python3.12/tokenize.py +594 -0
  1225. package/python/lib/python3.12/tomllib/__init__.py +10 -0
  1226. package/python/lib/python3.12/tomllib/_parser.py +691 -0
  1227. package/python/lib/python3.12/tomllib/_re.py +107 -0
  1228. package/python/lib/python3.12/tomllib/_types.py +10 -0
  1229. package/python/lib/python3.12/trace.py +748 -0
  1230. package/python/lib/python3.12/traceback.py +1187 -0
  1231. package/python/lib/python3.12/tracemalloc.py +560 -0
  1232. package/python/lib/python3.12/tty.py +73 -0
  1233. package/python/lib/python3.12/turtle.py +4207 -0
  1234. package/python/lib/python3.12/types.py +333 -0
  1235. package/python/lib/python3.12/typing.py +3494 -0
  1236. package/python/lib/python3.12/unittest/__init__.py +85 -0
  1237. package/python/lib/python3.12/unittest/__main__.py +18 -0
  1238. package/python/lib/python3.12/unittest/_log.py +86 -0
  1239. package/python/lib/python3.12/unittest/async_case.py +143 -0
  1240. package/python/lib/python3.12/unittest/case.py +1456 -0
  1241. package/python/lib/python3.12/unittest/loader.py +497 -0
  1242. package/python/lib/python3.12/unittest/main.py +291 -0
  1243. package/python/lib/python3.12/unittest/mock.py +3054 -0
  1244. package/python/lib/python3.12/unittest/result.py +256 -0
  1245. package/python/lib/python3.12/unittest/runner.py +292 -0
  1246. package/python/lib/python3.12/unittest/signals.py +71 -0
  1247. package/python/lib/python3.12/unittest/suite.py +379 -0
  1248. package/python/lib/python3.12/unittest/util.py +170 -0
  1249. package/python/lib/python3.12/urllib/__init__.py +0 -0
  1250. package/python/lib/python3.12/urllib/__pycache__/__init__.cpython-312.pyc +0 -0
  1251. package/python/lib/python3.12/urllib/__pycache__/error.cpython-312.pyc +0 -0
  1252. package/python/lib/python3.12/urllib/__pycache__/parse.cpython-312.pyc +0 -0
  1253. package/python/lib/python3.12/urllib/__pycache__/request.cpython-312.pyc +0 -0
  1254. package/python/lib/python3.12/urllib/__pycache__/response.cpython-312.pyc +0 -0
  1255. package/python/lib/python3.12/urllib/error.py +74 -0
  1256. package/python/lib/python3.12/urllib/parse.py +1262 -0
  1257. package/python/lib/python3.12/urllib/request.py +2816 -0
  1258. package/python/lib/python3.12/urllib/response.py +84 -0
  1259. package/python/lib/python3.12/urllib/robotparser.py +275 -0
  1260. package/python/lib/python3.12/uu.py +216 -0
  1261. package/python/lib/python3.12/uuid.py +793 -0
  1262. package/python/lib/python3.12/venv/__init__.py +608 -0
  1263. package/python/lib/python3.12/venv/__main__.py +10 -0
  1264. package/python/lib/python3.12/venv/scripts/common/Activate.ps1 +247 -0
  1265. package/python/lib/python3.12/venv/scripts/common/activate +76 -0
  1266. package/python/lib/python3.12/venv/scripts/posix/activate.csh +27 -0
  1267. package/python/lib/python3.12/venv/scripts/posix/activate.fish +69 -0
  1268. package/python/lib/python3.12/warnings.py +598 -0
  1269. package/python/lib/python3.12/wave.py +653 -0
  1270. package/python/lib/python3.12/weakref.py +674 -0
  1271. package/python/lib/python3.12/webbrowser.py +689 -0
  1272. package/python/lib/python3.12/wsgiref/__init__.py +25 -0
  1273. package/python/lib/python3.12/wsgiref/handlers.py +573 -0
  1274. package/python/lib/python3.12/wsgiref/headers.py +192 -0
  1275. package/python/lib/python3.12/wsgiref/simple_server.py +165 -0
  1276. package/python/lib/python3.12/wsgiref/types.py +54 -0
  1277. package/python/lib/python3.12/wsgiref/util.py +159 -0
  1278. package/python/lib/python3.12/wsgiref/validate.py +438 -0
  1279. package/python/lib/python3.12/xdrlib.py +242 -0
  1280. package/python/lib/python3.12/xml/__init__.py +20 -0
  1281. package/python/lib/python3.12/xml/__pycache__/__init__.cpython-312.pyc +0 -0
  1282. package/python/lib/python3.12/xml/dom/NodeFilter.py +27 -0
  1283. package/python/lib/python3.12/xml/dom/__init__.py +140 -0
  1284. package/python/lib/python3.12/xml/dom/domreg.py +99 -0
  1285. package/python/lib/python3.12/xml/dom/expatbuilder.py +962 -0
  1286. package/python/lib/python3.12/xml/dom/minicompat.py +109 -0
  1287. package/python/lib/python3.12/xml/dom/minidom.py +2008 -0
  1288. package/python/lib/python3.12/xml/dom/pulldom.py +336 -0
  1289. package/python/lib/python3.12/xml/dom/xmlbuilder.py +389 -0
  1290. package/python/lib/python3.12/xml/etree/ElementInclude.py +186 -0
  1291. package/python/lib/python3.12/xml/etree/ElementPath.py +423 -0
  1292. package/python/lib/python3.12/xml/etree/ElementTree.py +2085 -0
  1293. package/python/lib/python3.12/xml/etree/__init__.py +33 -0
  1294. package/python/lib/python3.12/xml/etree/cElementTree.py +3 -0
  1295. package/python/lib/python3.12/xml/parsers/__init__.py +8 -0
  1296. package/python/lib/python3.12/xml/parsers/__pycache__/__init__.cpython-312.pyc +0 -0
  1297. package/python/lib/python3.12/xml/parsers/__pycache__/expat.cpython-312.pyc +0 -0
  1298. package/python/lib/python3.12/xml/parsers/expat.py +8 -0
  1299. package/python/lib/python3.12/xml/sax/__init__.py +94 -0
  1300. package/python/lib/python3.12/xml/sax/_exceptions.py +127 -0
  1301. package/python/lib/python3.12/xml/sax/expatreader.py +454 -0
  1302. package/python/lib/python3.12/xml/sax/handler.py +387 -0
  1303. package/python/lib/python3.12/xml/sax/saxutils.py +369 -0
  1304. package/python/lib/python3.12/xml/sax/xmlreader.py +378 -0
  1305. package/python/lib/python3.12/xmlrpc/__init__.py +1 -0
  1306. package/python/lib/python3.12/xmlrpc/client.py +1529 -0
  1307. package/python/lib/python3.12/xmlrpc/server.py +1002 -0
  1308. package/python/lib/python3.12/zipapp.py +206 -0
  1309. package/python/lib/python3.12/zipfile/__init__.py +2340 -0
  1310. package/python/lib/python3.12/zipfile/__main__.py +4 -0
  1311. package/python/lib/python3.12/zipfile/_path/__init__.py +412 -0
  1312. package/python/lib/python3.12/zipfile/_path/glob.py +53 -0
  1313. package/python/lib/python3.12/zipimport.py +712 -0
  1314. package/python/lib/python3.12/zoneinfo/__init__.py +31 -0
  1315. package/python/lib/python3.12/zoneinfo/_common.py +164 -0
  1316. package/python/lib/python3.12/zoneinfo/_tzpath.py +181 -0
  1317. package/python/lib/python3.12/zoneinfo/_zoneinfo.py +772 -0
@@ -0,0 +1,1943 @@
1
+ # This file is dual licensed under the terms of the Apache License, Version
2
+ # 2.0, and the BSD License. See the LICENSE file in the root of this repository
3
+ # for complete details.
4
+ """
5
+ .. testsetup::
6
+
7
+ from pip._vendor.packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
8
+ from pip._vendor.packaging.version import Version
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import abc
14
+ import enum
15
+ import functools
16
+ import itertools
17
+ import re
18
+ import sys
19
+ import typing
20
+ from typing import (
21
+ TYPE_CHECKING,
22
+ Any,
23
+ Callable,
24
+ Final,
25
+ Iterable,
26
+ Iterator,
27
+ Sequence,
28
+ TypeVar,
29
+ Union,
30
+ )
31
+
32
+ from .utils import canonicalize_version
33
+ from .version import InvalidVersion, Version
34
+
35
+ if sys.version_info >= (3, 10):
36
+ from typing import TypeGuard # pragma: no cover
37
+ elif TYPE_CHECKING:
38
+ from typing_extensions import TypeGuard
39
+
40
+ __all__ = [
41
+ "BaseSpecifier",
42
+ "InvalidSpecifier",
43
+ "Specifier",
44
+ "SpecifierSet",
45
+ ]
46
+
47
+
48
+ def __dir__() -> list[str]:
49
+ return __all__
50
+
51
+
52
+ def _validate_spec(spec: object, /) -> TypeGuard[tuple[str, str]]:
53
+ return (
54
+ isinstance(spec, tuple)
55
+ and len(spec) == 2
56
+ and isinstance(spec[0], str)
57
+ and isinstance(spec[1], str)
58
+ )
59
+
60
+
61
+ def _validate_pre(pre: object, /) -> TypeGuard[bool | None]:
62
+ return pre is None or isinstance(pre, bool)
63
+
64
+
65
+ T = TypeVar("T")
66
+ UnparsedVersion = Union[Version, str]
67
+ UnparsedVersionVar = TypeVar("UnparsedVersionVar", bound=UnparsedVersion)
68
+ CallableOperator = Callable[[Version, str], bool]
69
+
70
+ # The smallest possible PEP 440 version. No valid version is less than this.
71
+ _MIN_VERSION: Final[Version] = Version("0.dev0")
72
+
73
+
74
+ def _trim_release(release: tuple[int, ...]) -> tuple[int, ...]:
75
+ """Strip trailing zeros from a release tuple for normalized comparison."""
76
+ end = len(release)
77
+ while end > 1 and release[end - 1] == 0:
78
+ end -= 1
79
+ return release if end == len(release) else release[:end]
80
+
81
+
82
+ class _BoundaryKind(enum.Enum):
83
+ """Where a boundary marker sits in the version ordering."""
84
+
85
+ AFTER_LOCALS = enum.auto() # after V+local, before V.post0
86
+ AFTER_POSTS = enum.auto() # after V.postN, before next release
87
+
88
+
89
+ @functools.total_ordering
90
+ class _BoundaryVersion:
91
+ """A point on the version line between two real PEP 440 versions.
92
+
93
+ Some specifier semantics imply boundaries between real versions:
94
+ ``<=1.0`` includes ``1.0+local`` and ``>1.0`` excludes
95
+ ``1.0.post0``. No real :class:`Version` falls on those boundaries,
96
+ so this class creates values that sort between the real versions
97
+ on either side.
98
+
99
+ Two kinds exist, shown relative to a base version V::
100
+
101
+ V < V+local < AFTER_LOCALS(V) < V.post0 < AFTER_POSTS(V)
102
+
103
+ ``AFTER_LOCALS`` sits after V and every V+local, but before
104
+ V.post0. Upper bound of ``<=V``, ``==V``, ``!=V``.
105
+
106
+ ``AFTER_POSTS`` sits after every V.postN, but before the next
107
+ release segment. Lower bound of ``>V`` (final or pre-release V)
108
+ to exclude post-releases per PEP 440.
109
+ """
110
+
111
+ __slots__ = ("_kind", "_trimmed_release", "version")
112
+
113
+ def __init__(self, version: Version, kind: _BoundaryKind) -> None:
114
+ self.version = version
115
+ self._kind = kind
116
+ self._trimmed_release = _trim_release(version.release)
117
+
118
+ def _is_family(self, other: Version) -> bool:
119
+ """Is ``other`` a version that this boundary sorts above?"""
120
+ v = self.version
121
+ if not (
122
+ other.epoch == v.epoch
123
+ and _trim_release(other.release) == self._trimmed_release
124
+ and other.pre == v.pre
125
+ ):
126
+ return False
127
+ if self._kind == _BoundaryKind.AFTER_LOCALS:
128
+ # Local family: exact same public version (any local label).
129
+ return other.post == v.post and other.dev == v.dev
130
+ # Post family: same base + any post-release (or identical).
131
+ return other.dev == v.dev or other.post is not None
132
+
133
+ def __eq__(self, other: object) -> bool:
134
+ if isinstance(other, _BoundaryVersion):
135
+ return self.version == other.version and self._kind == other._kind
136
+ return NotImplemented
137
+
138
+ def __lt__(self, other: _BoundaryVersion | Version) -> bool:
139
+ if isinstance(other, _BoundaryVersion):
140
+ if self.version != other.version:
141
+ return self.version < other.version
142
+ return self._kind.value < other._kind.value
143
+ return not self._is_family(other) and self.version < other
144
+
145
+ def __hash__(self) -> int:
146
+ return hash((self.version, self._kind))
147
+
148
+ def __repr__(self) -> str:
149
+ return f"{self.__class__.__name__}({self.version!r}, {self._kind.name})"
150
+
151
+
152
+ @functools.total_ordering
153
+ class _LowerBound:
154
+ """Lower bound of a version range.
155
+
156
+ A version *v* of ``None`` means unbounded below (-inf).
157
+ At equal versions, ``[v`` sorts before ``(v`` because an inclusive
158
+ bound starts earlier.
159
+ """
160
+
161
+ __slots__ = ("inclusive", "version")
162
+
163
+ def __init__(self, version: _VersionOrBoundary, inclusive: bool) -> None:
164
+ self.version = version
165
+ self.inclusive = inclusive
166
+
167
+ def __eq__(self, other: object) -> bool:
168
+ if not isinstance(other, _LowerBound):
169
+ return NotImplemented # pragma: no cover
170
+ return self.version == other.version and self.inclusive == other.inclusive
171
+
172
+ def __lt__(self, other: _LowerBound) -> bool:
173
+ if not isinstance(other, _LowerBound): # pragma: no cover
174
+ return NotImplemented
175
+ # -inf < anything (except -inf).
176
+ if self.version is None:
177
+ return other.version is not None
178
+ if other.version is None:
179
+ return False
180
+ if self.version != other.version:
181
+ return self.version < other.version
182
+ # [v < (v: inclusive starts earlier.
183
+ return self.inclusive and not other.inclusive
184
+
185
+ def __hash__(self) -> int:
186
+ return hash((self.version, self.inclusive))
187
+
188
+ def __repr__(self) -> str:
189
+ bracket = "[" if self.inclusive else "("
190
+ return f"<{self.__class__.__name__} {bracket}{self.version!r}>"
191
+
192
+
193
+ @functools.total_ordering
194
+ class _UpperBound:
195
+ """Upper bound of a version range.
196
+
197
+ A version *v* of ``None`` means unbounded above (+inf).
198
+ At equal versions, ``v)`` sorts before ``v]`` because an exclusive
199
+ bound ends earlier.
200
+ """
201
+
202
+ __slots__ = ("inclusive", "version")
203
+
204
+ def __init__(self, version: _VersionOrBoundary, inclusive: bool) -> None:
205
+ self.version = version
206
+ self.inclusive = inclusive
207
+
208
+ def __eq__(self, other: object) -> bool:
209
+ if not isinstance(other, _UpperBound):
210
+ return NotImplemented # pragma: no cover
211
+ return self.version == other.version and self.inclusive == other.inclusive
212
+
213
+ def __lt__(self, other: _UpperBound) -> bool:
214
+ if not isinstance(other, _UpperBound): # pragma: no cover
215
+ return NotImplemented
216
+ # Nothing < +inf (except +inf itself).
217
+ if self.version is None:
218
+ return False
219
+ if other.version is None:
220
+ return True
221
+ if self.version != other.version:
222
+ return self.version < other.version
223
+ # v) < v]: exclusive ends earlier.
224
+ return not self.inclusive and other.inclusive
225
+
226
+ def __hash__(self) -> int:
227
+ return hash((self.version, self.inclusive))
228
+
229
+ def __repr__(self) -> str:
230
+ bracket = "]" if self.inclusive else ")"
231
+ return f"<{self.__class__.__name__} {self.version!r}{bracket}>"
232
+
233
+
234
+ if typing.TYPE_CHECKING:
235
+ _VersionOrBoundary = Union[Version, _BoundaryVersion, None]
236
+
237
+ #: A single contiguous version range, represented as a
238
+ #: (lower bound, upper bound) pair.
239
+ _VersionRange = tuple[_LowerBound, _UpperBound]
240
+
241
+ _NEG_INF = _LowerBound(None, False)
242
+ _POS_INF = _UpperBound(None, False)
243
+ _FULL_RANGE: tuple[_VersionRange] = ((_NEG_INF, _POS_INF),)
244
+
245
+
246
+ def _range_is_empty(lower: _LowerBound, upper: _UpperBound) -> bool:
247
+ """True when the range defined by *lower* and *upper* contains no versions."""
248
+ if lower.version is None or upper.version is None:
249
+ return False
250
+ if lower.version == upper.version:
251
+ return not (lower.inclusive and upper.inclusive)
252
+ return lower.version > upper.version
253
+
254
+
255
+ def _intersect_ranges(
256
+ left: Sequence[_VersionRange],
257
+ right: Sequence[_VersionRange],
258
+ ) -> list[_VersionRange]:
259
+ """Intersect two sorted, non-overlapping range lists (two-pointer merge)."""
260
+ result: list[_VersionRange] = []
261
+ left_index = right_index = 0
262
+ while left_index < len(left) and right_index < len(right):
263
+ left_lower, left_upper = left[left_index]
264
+ right_lower, right_upper = right[right_index]
265
+
266
+ lower = max(left_lower, right_lower)
267
+ upper = min(left_upper, right_upper)
268
+
269
+ if not _range_is_empty(lower, upper):
270
+ result.append((lower, upper))
271
+
272
+ # Advance whichever side has the smaller upper bound.
273
+ if left_upper < right_upper:
274
+ left_index += 1
275
+ else:
276
+ right_index += 1
277
+
278
+ return result
279
+
280
+
281
+ def _next_prefix_dev0(version: Version) -> Version:
282
+ """Smallest version in the next prefix: 1.2 -> 1.3.dev0."""
283
+ release = (*version.release[:-1], version.release[-1] + 1)
284
+ return Version.from_parts(epoch=version.epoch, release=release, dev=0)
285
+
286
+
287
+ def _base_dev0(version: Version) -> Version:
288
+ """The .dev0 of a version's base release: 1.2 -> 1.2.dev0."""
289
+ return Version.from_parts(epoch=version.epoch, release=version.release, dev=0)
290
+
291
+
292
+ def _coerce_version(version: UnparsedVersion) -> Version | None:
293
+ if not isinstance(version, Version):
294
+ try:
295
+ version = Version(version)
296
+ except InvalidVersion:
297
+ return None
298
+ return version
299
+
300
+
301
+ def _public_version(version: Version) -> Version:
302
+ if version.local is None:
303
+ return version
304
+ return version.__replace__(local=None)
305
+
306
+
307
+ def _post_base(version: Version) -> Version:
308
+ """The version that *version* is a post-release of.
309
+
310
+ 1.0.post1 -> 1.0, 1.0a1.post0 -> 1.0a1, 1.0.post0.dev1 -> 1.0.
311
+ """
312
+ return version.__replace__(post=None, dev=None, local=None)
313
+
314
+
315
+ def _earliest_prerelease(version: Version) -> Version:
316
+ """Earliest pre-release of *version*.
317
+
318
+ 1.2 -> 1.2.dev0, 1.2.post1 -> 1.2.post1.dev0.
319
+ """
320
+ return version.__replace__(dev=0, local=None)
321
+
322
+
323
+ def _nearest_non_prerelease(
324
+ v: _VersionOrBoundary,
325
+ ) -> Version | None:
326
+ """Smallest non-pre-release version at or above *v*, or None."""
327
+ if v is None:
328
+ return None
329
+ if isinstance(v, _BoundaryVersion):
330
+ inner = v.version
331
+ if inner.is_prerelease:
332
+ # AFTER_LOCALS(1.0a1) -> nearest non-pre is 1.0
333
+ return inner.__replace__(pre=None, dev=None, local=None)
334
+ # AFTER_LOCALS(1.0) -> nearest non-pre is 1.0.post0
335
+ # AFTER_LOCALS(1.0.post0) -> nearest non-pre is 1.0.post1
336
+ k = (inner.post + 1) if inner.post is not None else 0
337
+ return inner.__replace__(post=k, local=None)
338
+ if not v.is_prerelease:
339
+ return v
340
+ # Strip pre/dev to get the final or post-release form.
341
+ return v.__replace__(pre=None, dev=None, local=None)
342
+
343
+
344
+ class InvalidSpecifier(ValueError):
345
+ """
346
+ Raised when attempting to create a :class:`Specifier` with a specifier
347
+ string that is invalid.
348
+
349
+ >>> Specifier("lolwat")
350
+ Traceback (most recent call last):
351
+ ...
352
+ packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat'
353
+ """
354
+
355
+
356
+ class BaseSpecifier(metaclass=abc.ABCMeta):
357
+ __slots__ = ()
358
+ __match_args__ = ("_str",)
359
+
360
+ @property
361
+ def _str(self) -> str:
362
+ """Internal property for match_args"""
363
+ return str(self)
364
+
365
+ @abc.abstractmethod
366
+ def __str__(self) -> str:
367
+ """
368
+ Returns the str representation of this Specifier-like object. This
369
+ should be representative of the Specifier itself.
370
+ """
371
+
372
+ @abc.abstractmethod
373
+ def __hash__(self) -> int:
374
+ """
375
+ Returns a hash value for this Specifier-like object.
376
+ """
377
+
378
+ @abc.abstractmethod
379
+ def __eq__(self, other: object) -> bool:
380
+ """
381
+ Returns a boolean representing whether or not the two Specifier-like
382
+ objects are equal.
383
+
384
+ :param other: The other object to check against.
385
+ """
386
+
387
+ @property
388
+ @abc.abstractmethod
389
+ def prereleases(self) -> bool | None:
390
+ """Whether or not pre-releases as a whole are allowed.
391
+
392
+ This can be set to either ``True`` or ``False`` to explicitly enable or disable
393
+ prereleases or it can be set to ``None`` (the default) to use default semantics.
394
+ """
395
+
396
+ @prereleases.setter # noqa: B027
397
+ def prereleases(self, value: bool) -> None:
398
+ """Setter for :attr:`prereleases`.
399
+
400
+ :param value: The value to set.
401
+ """
402
+
403
+ @abc.abstractmethod
404
+ def contains(self, item: str, prereleases: bool | None = None) -> bool:
405
+ """
406
+ Determines if the given item is contained within this specifier.
407
+ """
408
+
409
+ @typing.overload
410
+ def filter(
411
+ self,
412
+ iterable: Iterable[UnparsedVersionVar],
413
+ prereleases: bool | None = None,
414
+ key: None = ...,
415
+ ) -> Iterator[UnparsedVersionVar]: ...
416
+
417
+ @typing.overload
418
+ def filter(
419
+ self,
420
+ iterable: Iterable[T],
421
+ prereleases: bool | None = None,
422
+ key: Callable[[T], UnparsedVersion] = ...,
423
+ ) -> Iterator[T]: ...
424
+
425
+ @abc.abstractmethod
426
+ def filter(
427
+ self,
428
+ iterable: Iterable[Any],
429
+ prereleases: bool | None = None,
430
+ key: Callable[[Any], UnparsedVersion] | None = None,
431
+ ) -> Iterator[Any]:
432
+ """
433
+ Takes an iterable of items and filters them so that only items which
434
+ are contained within this specifier are allowed in it.
435
+ """
436
+
437
+
438
+ class Specifier(BaseSpecifier):
439
+ """This class abstracts handling of version specifiers.
440
+
441
+ .. tip::
442
+
443
+ It is generally not required to instantiate this manually. You should instead
444
+ prefer to work with :class:`SpecifierSet` instead, which can parse
445
+ comma-separated version specifiers (which is what package metadata contains).
446
+
447
+ Instances are safe to serialize with :mod:`pickle`. They use a stable
448
+ format so the same pickle can be loaded in future packaging releases.
449
+
450
+ .. versionchanged:: 26.2
451
+
452
+ Added a stable pickle format. Pickles created with packaging 26.2+ can
453
+ be unpickled with future releases. Backward compatibility with pickles
454
+ from pip._vendor.packaging < 26.2 is supported but may be removed in a future
455
+ release.
456
+ """
457
+
458
+ __slots__ = (
459
+ "_prereleases",
460
+ "_ranges",
461
+ "_spec",
462
+ "_spec_version",
463
+ "_wildcard_split",
464
+ )
465
+
466
+ _specifier_regex_str = r"""
467
+ (?:
468
+ (?:
469
+ # The identity operators allow for an escape hatch that will
470
+ # do an exact string match of the version you wish to install.
471
+ # This will not be parsed by PEP 440 and we cannot determine
472
+ # any semantic meaning from it. This operator is discouraged
473
+ # but included entirely as an escape hatch.
474
+ === # Only match for the identity operator
475
+ \s*
476
+ [^\s;)]* # The arbitrary version can be just about anything,
477
+ # we match everything except for whitespace, a
478
+ # semi-colon for marker support, and a closing paren
479
+ # since versions can be enclosed in them.
480
+ )
481
+ |
482
+ (?:
483
+ # The (non)equality operators allow for wild card and local
484
+ # versions to be specified so we have to define these two
485
+ # operators separately to enable that.
486
+ (?:==|!=) # Only match for equals and not equals
487
+
488
+ \s*
489
+ v?
490
+ (?:[0-9]+!)? # epoch
491
+ [0-9]+(?:\.[0-9]+)* # release
492
+
493
+ # You cannot use a wild card and a pre-release, post-release, a dev or
494
+ # local version together so group them with a | and make them optional.
495
+ (?:
496
+ \.\* # Wild card syntax of .*
497
+ |
498
+ (?a: # pre release
499
+ [-_\.]?
500
+ (alpha|beta|preview|pre|a|b|c|rc)
501
+ [-_\.]?
502
+ [0-9]*
503
+ )?
504
+ (?a: # post release
505
+ (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
506
+ )?
507
+ (?a:[-_\.]?dev[-_\.]?[0-9]*)? # dev release
508
+ (?a:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
509
+ )?
510
+ )
511
+ |
512
+ (?:
513
+ # The compatible operator requires at least two digits in the
514
+ # release segment.
515
+ (?:~=) # Only match for the compatible operator
516
+
517
+ \s*
518
+ v?
519
+ (?:[0-9]+!)? # epoch
520
+ [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *)
521
+ (?: # pre release
522
+ [-_\.]?
523
+ (alpha|beta|preview|pre|a|b|c|rc)
524
+ [-_\.]?
525
+ [0-9]*
526
+ )?
527
+ (?: # post release
528
+ (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
529
+ )?
530
+ (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release
531
+ )
532
+ |
533
+ (?:
534
+ # All other operators only allow a sub set of what the
535
+ # (non)equality operators do. Specifically they do not allow
536
+ # local versions to be specified nor do they allow the prefix
537
+ # matching wild cards.
538
+ (?:<=|>=|<|>)
539
+
540
+ \s*
541
+ v?
542
+ (?:[0-9]+!)? # epoch
543
+ [0-9]+(?:\.[0-9]+)* # release
544
+ (?a: # pre release
545
+ [-_\.]?
546
+ (alpha|beta|preview|pre|a|b|c|rc)
547
+ [-_\.]?
548
+ [0-9]*
549
+ )?
550
+ (?a: # post release
551
+ (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
552
+ )?
553
+ (?a:[-_\.]?dev[-_\.]?[0-9]*)? # dev release
554
+ )
555
+ )
556
+ """
557
+
558
+ _regex = re.compile(
559
+ r"\s*" + _specifier_regex_str + r"\s*", re.VERBOSE | re.IGNORECASE
560
+ )
561
+
562
+ _operators: Final = {
563
+ "~=": "compatible",
564
+ "==": "equal",
565
+ "!=": "not_equal",
566
+ "<=": "less_than_equal",
567
+ ">=": "greater_than_equal",
568
+ "<": "less_than",
569
+ ">": "greater_than",
570
+ "===": "arbitrary",
571
+ }
572
+
573
+ def __init__(self, spec: str = "", prereleases: bool | None = None) -> None:
574
+ """Initialize a Specifier instance.
575
+
576
+ :param spec:
577
+ The string representation of a specifier which will be parsed and
578
+ normalized before use.
579
+ :param prereleases:
580
+ This tells the specifier if it should accept prerelease versions if
581
+ applicable or not. The default of ``None`` will autodetect it from the
582
+ given specifiers.
583
+ :raises InvalidSpecifier:
584
+ If the given specifier is invalid (i.e. bad syntax).
585
+ """
586
+ if not self._regex.fullmatch(spec):
587
+ raise InvalidSpecifier(f"Invalid specifier: {spec!r}")
588
+
589
+ spec = spec.strip()
590
+ if spec.startswith("==="):
591
+ operator, version = spec[:3], spec[3:].strip()
592
+ elif spec.startswith(("~=", "==", "!=", "<=", ">=")):
593
+ operator, version = spec[:2], spec[2:].strip()
594
+ else:
595
+ operator, version = spec[:1], spec[1:].strip()
596
+
597
+ self._spec: tuple[str, str] = (operator, version)
598
+
599
+ # Store whether or not this Specifier should accept prereleases
600
+ self._prereleases = prereleases
601
+
602
+ # Specifier version cache
603
+ self._spec_version: tuple[str, Version] | None = None
604
+
605
+ # Populated on first wildcard (==X.*) comparison
606
+ self._wildcard_split: tuple[list[str], int] | None = None
607
+
608
+ # Version range cache (populated by _to_ranges)
609
+ self._ranges: Sequence[_VersionRange] | None = None
610
+
611
+ def _get_spec_version(self, version: str) -> Version | None:
612
+ """One element cache, as only one spec Version is needed per Specifier."""
613
+ if self._spec_version is not None and self._spec_version[0] == version:
614
+ return self._spec_version[1]
615
+
616
+ version_specifier = _coerce_version(version)
617
+ if version_specifier is None:
618
+ return None
619
+
620
+ self._spec_version = (version, version_specifier)
621
+ return version_specifier
622
+
623
+ def _require_spec_version(self, version: str) -> Version:
624
+ """Get spec version, asserting it's valid (not for === operator).
625
+
626
+ This method should only be called for operators where version
627
+ strings are guaranteed to be valid PEP 440 versions (not ===).
628
+ """
629
+ spec_version = self._get_spec_version(version)
630
+ assert spec_version is not None
631
+ return spec_version
632
+
633
+ def _to_ranges(self) -> Sequence[_VersionRange]:
634
+ """Convert this specifier to sorted, non-overlapping version ranges.
635
+
636
+ Each standard operator maps to one or two ranges. ``===`` is
637
+ modeled as full range (actual check done separately). Cached.
638
+ """
639
+ if self._ranges is not None:
640
+ return self._ranges
641
+
642
+ op = self.operator
643
+ ver_str = self.version
644
+
645
+ if op == "===":
646
+ self._ranges = _FULL_RANGE
647
+ return _FULL_RANGE
648
+
649
+ if ver_str.endswith(".*"):
650
+ result = self._wildcard_ranges(op, ver_str)
651
+ else:
652
+ result = self._standard_ranges(op, ver_str)
653
+
654
+ self._ranges = result
655
+ return result
656
+
657
+ def _wildcard_ranges(self, op: str, ver_str: str) -> list[_VersionRange]:
658
+ # ==1.2.* -> [1.2.dev0, 1.3.dev0); !=1.2.* -> complement.
659
+ base = self._require_spec_version(ver_str[:-2])
660
+ lower = _base_dev0(base)
661
+ upper = _next_prefix_dev0(base)
662
+ if op == "==":
663
+ return [(_LowerBound(lower, True), _UpperBound(upper, False))]
664
+ # !=
665
+ return [
666
+ (_NEG_INF, _UpperBound(lower, False)),
667
+ (_LowerBound(upper, True), _POS_INF),
668
+ ]
669
+
670
+ def _standard_ranges(self, op: str, ver_str: str) -> list[_VersionRange]:
671
+ v = self._require_spec_version(ver_str)
672
+
673
+ if op == ">=":
674
+ return [(_LowerBound(v, True), _POS_INF)]
675
+
676
+ if op == "<=":
677
+ return [
678
+ (
679
+ _NEG_INF,
680
+ _UpperBound(_BoundaryVersion(v, _BoundaryKind.AFTER_LOCALS), True),
681
+ )
682
+ ]
683
+
684
+ if op == ">":
685
+ if v.dev is not None:
686
+ # >V.devN: dev versions have no post-releases, so the
687
+ # next real version is V.dev(N+1).
688
+ lower_ver = v.__replace__(dev=v.dev + 1, local=None)
689
+ return [(_LowerBound(lower_ver, True), _POS_INF)]
690
+ if v.post is not None:
691
+ # >V.postN: next real version is V.post(N+1).dev0.
692
+ lower_ver = v.__replace__(post=v.post + 1, dev=0, local=None)
693
+ return [(_LowerBound(lower_ver, True), _POS_INF)]
694
+ # >V (final or pre-release): skip V+local and all V.postN.
695
+ return [
696
+ (
697
+ _LowerBound(_BoundaryVersion(v, _BoundaryKind.AFTER_POSTS), False),
698
+ _POS_INF,
699
+ )
700
+ ]
701
+
702
+ if op == "<":
703
+ # <V excludes prereleases of V when V is not a prerelease.
704
+ # V.dev0 is the earliest prerelease of V (final, post, etc.).
705
+ bound = v if v.is_prerelease else v.__replace__(dev=0, local=None)
706
+ if bound <= _MIN_VERSION:
707
+ return []
708
+ return [(_NEG_INF, _UpperBound(bound, False))]
709
+
710
+ # ==, !=: local versions of V match when spec has no local segment.
711
+ has_local = "+" in ver_str
712
+ after_locals = _BoundaryVersion(v, _BoundaryKind.AFTER_LOCALS)
713
+ upper = v if has_local else after_locals
714
+
715
+ if op == "==":
716
+ return [(_LowerBound(v, True), _UpperBound(upper, True))]
717
+
718
+ if op == "!=":
719
+ return [
720
+ (_NEG_INF, _UpperBound(v, False)),
721
+ (_LowerBound(upper, False), _POS_INF),
722
+ ]
723
+
724
+ if op == "~=":
725
+ prefix = v.__replace__(release=v.release[:-1])
726
+ return [
727
+ (_LowerBound(v, True), _UpperBound(_next_prefix_dev0(prefix), False))
728
+ ]
729
+
730
+ raise ValueError(f"Unknown operator: {op!r}") # pragma: no cover
731
+
732
+ @property
733
+ def prereleases(self) -> bool | None:
734
+ # If there is an explicit prereleases set for this, then we'll just
735
+ # blindly use that.
736
+ if self._prereleases is not None:
737
+ return self._prereleases
738
+
739
+ # Only the "!=" operator does not imply prereleases when
740
+ # the version in the specifier is a prerelease.
741
+ operator, version_str = self._spec
742
+ if operator == "!=":
743
+ return False
744
+
745
+ # The == specifier with trailing .* cannot include prereleases
746
+ # e.g. "==1.0a1.*" is not valid.
747
+ if operator == "==" and version_str.endswith(".*"):
748
+ return False
749
+
750
+ # "===" can have arbitrary string versions, so we cannot parse
751
+ # those, we take prereleases as unknown (None) for those.
752
+ version = self._get_spec_version(version_str)
753
+ if version is None:
754
+ return None
755
+
756
+ # For all other operators, use the check if spec Version
757
+ # object implies pre-releases.
758
+ return version.is_prerelease
759
+
760
+ @prereleases.setter
761
+ def prereleases(self, value: bool | None) -> None:
762
+ self._prereleases = value
763
+
764
+ def __getstate__(self) -> tuple[tuple[str, str], bool | None]:
765
+ # Return state as a 2-item tuple for compactness:
766
+ # ((operator, version), prereleases)
767
+ # Cache members are excluded and will be recomputed on demand.
768
+ return (self._spec, self._prereleases)
769
+
770
+ def __setstate__(self, state: object) -> None:
771
+ # Always discard cached values - they will be recomputed on demand.
772
+ self._spec_version = None
773
+ self._wildcard_split = None
774
+ self._ranges = None
775
+
776
+ if isinstance(state, tuple):
777
+ if len(state) == 2:
778
+ # New format (26.2+): ((operator, version), prereleases)
779
+ spec, prereleases = state
780
+ if _validate_spec(spec) and _validate_pre(prereleases):
781
+ self._spec = spec
782
+ self._prereleases = prereleases
783
+ return
784
+ if len(state) == 2 and isinstance(state[1], dict):
785
+ # Format (packaging 26.0-26.1): (None, {slot: value}).
786
+ _, slot_dict = state
787
+ spec = slot_dict.get("_spec")
788
+ prereleases = slot_dict.get("_prereleases", "invalid")
789
+ if _validate_spec(spec) and _validate_pre(prereleases):
790
+ self._spec = spec
791
+ self._prereleases = prereleases
792
+ return
793
+ if isinstance(state, dict):
794
+ # Old format (packaging <= 25.x, no __slots__): state is a plain dict.
795
+ spec = state.get("_spec")
796
+ prereleases = state.get("_prereleases", "invalid")
797
+ if _validate_spec(spec) and _validate_pre(prereleases):
798
+ self._spec = spec
799
+ self._prereleases = prereleases
800
+ return
801
+
802
+ raise TypeError(f"Cannot restore Specifier from {state!r}")
803
+
804
+ @property
805
+ def operator(self) -> str:
806
+ """The operator of this specifier.
807
+
808
+ >>> Specifier("==1.2.3").operator
809
+ '=='
810
+ """
811
+ return self._spec[0]
812
+
813
+ @property
814
+ def version(self) -> str:
815
+ """The version of this specifier.
816
+
817
+ >>> Specifier("==1.2.3").version
818
+ '1.2.3'
819
+ """
820
+ return self._spec[1]
821
+
822
+ def __repr__(self) -> str:
823
+ """A representation of the Specifier that shows all internal state.
824
+
825
+ >>> Specifier('>=1.0.0')
826
+ <Specifier('>=1.0.0')>
827
+ >>> Specifier('>=1.0.0', prereleases=False)
828
+ <Specifier('>=1.0.0', prereleases=False)>
829
+ >>> Specifier('>=1.0.0', prereleases=True)
830
+ <Specifier('>=1.0.0', prereleases=True)>
831
+ """
832
+ pre = (
833
+ f", prereleases={self.prereleases!r}"
834
+ if self._prereleases is not None
835
+ else ""
836
+ )
837
+
838
+ return f"<{self.__class__.__name__}({str(self)!r}{pre})>"
839
+
840
+ def __str__(self) -> str:
841
+ """A string representation of the Specifier that can be round-tripped.
842
+
843
+ >>> str(Specifier('>=1.0.0'))
844
+ '>=1.0.0'
845
+ >>> str(Specifier('>=1.0.0', prereleases=False))
846
+ '>=1.0.0'
847
+ """
848
+ return "{}{}".format(*self._spec)
849
+
850
+ @property
851
+ def _canonical_spec(self) -> tuple[str, str]:
852
+ operator, version = self._spec
853
+ if operator == "===" or version.endswith(".*"):
854
+ return operator, version
855
+
856
+ spec_version = self._require_spec_version(version)
857
+
858
+ canonical_version = canonicalize_version(
859
+ spec_version, strip_trailing_zero=(operator != "~=")
860
+ )
861
+
862
+ return operator, canonical_version
863
+
864
+ def __hash__(self) -> int:
865
+ return hash(self._canonical_spec)
866
+
867
+ def __eq__(self, other: object) -> bool:
868
+ """Whether or not the two Specifier-like objects are equal.
869
+
870
+ :param other: The other object to check against.
871
+
872
+ The value of :attr:`prereleases` is ignored.
873
+
874
+ >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0")
875
+ True
876
+ >>> (Specifier("==1.2.3", prereleases=False) ==
877
+ ... Specifier("==1.2.3", prereleases=True))
878
+ True
879
+ >>> Specifier("==1.2.3") == "==1.2.3"
880
+ True
881
+ >>> Specifier("==1.2.3") == Specifier("==1.2.4")
882
+ False
883
+ >>> Specifier("==1.2.3") == Specifier("~=1.2.3")
884
+ False
885
+ """
886
+ if isinstance(other, str):
887
+ try:
888
+ other = self.__class__(str(other))
889
+ except InvalidSpecifier:
890
+ return NotImplemented
891
+ elif not isinstance(other, self.__class__):
892
+ return NotImplemented
893
+
894
+ return self._canonical_spec == other._canonical_spec
895
+
896
+ def _get_operator(self, op: str) -> CallableOperator:
897
+ operator_callable: CallableOperator = getattr(
898
+ self, f"_compare_{self._operators[op]}"
899
+ )
900
+ return operator_callable
901
+
902
+ def _compare_compatible(self, prospective: Version, spec: str) -> bool:
903
+ # Compatible releases have an equivalent combination of >= and ==. That
904
+ # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to
905
+ # implement this in terms of the other specifiers instead of
906
+ # implementing it ourselves. The only thing we need to do is construct
907
+ # the other specifiers.
908
+
909
+ # We want everything but the last item in the version, but we want to
910
+ # ignore suffix segments.
911
+ prefix = _version_join(
912
+ list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1]
913
+ )
914
+
915
+ # Add the prefix notation to the end of our string
916
+ prefix += ".*"
917
+
918
+ return (self._compare_greater_than_equal(prospective, spec)) and (
919
+ self._compare_equal(prospective, prefix)
920
+ )
921
+
922
+ def _get_wildcard_split(self, spec: str) -> tuple[list[str], int]:
923
+ """Cached split of a wildcard spec into components and numeric length.
924
+
925
+ >>> Specifier("==1.*")._get_wildcard_split("1.*")
926
+ (['0', '1'], 2)
927
+ >>> Specifier("==3.10.*")._get_wildcard_split("3.10.*")
928
+ (['0', '3', '10'], 3)
929
+ """
930
+ wildcard_split = self._wildcard_split
931
+ if wildcard_split is None:
932
+ normalized = canonicalize_version(spec[:-2], strip_trailing_zero=False)
933
+ split_spec = _version_split(normalized)
934
+ wildcard_split = (split_spec, _numeric_prefix_len(split_spec))
935
+ self._wildcard_split = wildcard_split
936
+ return wildcard_split
937
+
938
+ def _compare_equal(self, prospective: Version, spec: str) -> bool:
939
+ # We need special logic to handle prefix matching
940
+ if spec.endswith(".*"):
941
+ split_spec, spec_numeric_len = self._get_wildcard_split(spec)
942
+
943
+ # In the case of prefix matching we want to ignore local segment.
944
+ normalized_prospective = canonicalize_version(
945
+ _public_version(prospective), strip_trailing_zero=False
946
+ )
947
+ # Split the prospective version out by bangs and dots, and pretend
948
+ # that there is an implicit dot in between a release segment and
949
+ # a pre-release segment.
950
+ split_prospective = _version_split(normalized_prospective)
951
+
952
+ # 0-pad the prospective version before shortening it to get the correct
953
+ # shortened version.
954
+ padded_prospective = _left_pad(split_prospective, spec_numeric_len)
955
+
956
+ # Shorten the prospective version to be the same length as the spec
957
+ # so that we can determine if the specifier is a prefix of the
958
+ # prospective version or not.
959
+ shortened_prospective = padded_prospective[: len(split_spec)]
960
+
961
+ return shortened_prospective == split_spec
962
+ else:
963
+ # Convert our spec string into a Version
964
+ spec_version = self._require_spec_version(spec)
965
+
966
+ # If the specifier does not have a local segment, then we want to
967
+ # act as if the prospective version also does not have a local
968
+ # segment.
969
+ if not spec_version.local:
970
+ prospective = _public_version(prospective)
971
+
972
+ return prospective == spec_version
973
+
974
+ def _compare_not_equal(self, prospective: Version, spec: str) -> bool:
975
+ return not self._compare_equal(prospective, spec)
976
+
977
+ def _compare_less_than_equal(self, prospective: Version, spec: str) -> bool:
978
+ # NB: Local version identifiers are NOT permitted in the version
979
+ # specifier, so local version labels can be universally removed from
980
+ # the prospective version.
981
+ return _public_version(prospective) <= self._require_spec_version(spec)
982
+
983
+ def _compare_greater_than_equal(self, prospective: Version, spec: str) -> bool:
984
+ # NB: Local version identifiers are NOT permitted in the version
985
+ # specifier, so local version labels can be universally removed from
986
+ # the prospective version.
987
+ return _public_version(prospective) >= self._require_spec_version(spec)
988
+
989
+ def _compare_less_than(self, prospective: Version, spec_str: str) -> bool:
990
+ # Convert our spec to a Version instance, since we'll want to work with
991
+ # it as a version.
992
+ spec = self._require_spec_version(spec_str)
993
+
994
+ # Check to see if the prospective version is less than the spec
995
+ # version. If it's not we can short circuit and just return False now
996
+ # instead of doing extra unneeded work.
997
+ if not prospective < spec:
998
+ return False
999
+
1000
+ # The spec says: "<V MUST NOT allow a pre-release of the specified
1001
+ # version unless the specified version is itself a pre-release."
1002
+ if (
1003
+ not spec.is_prerelease
1004
+ and prospective.is_prerelease
1005
+ and prospective >= _earliest_prerelease(spec)
1006
+ ):
1007
+ return False
1008
+
1009
+ # If we've gotten to here, it means that prospective version is both
1010
+ # less than the spec version *and* it's not a pre-release of the same
1011
+ # version in the spec.
1012
+ return True
1013
+
1014
+ def _compare_greater_than(self, prospective: Version, spec_str: str) -> bool:
1015
+ # Convert our spec to a Version instance, since we'll want to work with
1016
+ # it as a version.
1017
+ spec = self._require_spec_version(spec_str)
1018
+
1019
+ # Check to see if the prospective version is greater than the spec
1020
+ # version. If it's not we can short circuit and just return False now
1021
+ # instead of doing extra unneeded work.
1022
+ if not prospective > spec:
1023
+ return False
1024
+
1025
+ # The spec says: ">V MUST NOT allow a post-release of the specified
1026
+ # version unless the specified version is itself a post-release."
1027
+ if (
1028
+ not spec.is_postrelease
1029
+ and prospective.is_postrelease
1030
+ and _post_base(prospective) == spec
1031
+ ):
1032
+ return False
1033
+
1034
+ # Per the spec: ">V MUST NOT match a local version of the specified
1035
+ # version". A "local version of V" is any version whose public part
1036
+ # equals V. So >1.0a1 must not match 1.0a1+local, but must still
1037
+ # match 1.0a2+local.
1038
+ if prospective.local is not None and _public_version(prospective) == spec:
1039
+ return False
1040
+
1041
+ # If we've gotten to here, it means that prospective version is both
1042
+ # greater than the spec version *and* it's not a pre-release of the
1043
+ # same version in the spec.
1044
+ return True
1045
+
1046
+ def _compare_arbitrary(self, prospective: Version | str, spec: str) -> bool:
1047
+ return str(prospective).lower() == str(spec).lower()
1048
+
1049
+ def __contains__(self, item: str | Version) -> bool:
1050
+ """Return whether or not the item is contained in this specifier.
1051
+
1052
+ :param item: The item to check for.
1053
+
1054
+ This is used for the ``in`` operator and behaves the same as
1055
+ :meth:`contains` with no ``prereleases`` argument passed.
1056
+
1057
+ >>> "1.2.3" in Specifier(">=1.2.3")
1058
+ True
1059
+ >>> Version("1.2.3") in Specifier(">=1.2.3")
1060
+ True
1061
+ >>> "1.0.0" in Specifier(">=1.2.3")
1062
+ False
1063
+ >>> "1.3.0a1" in Specifier(">=1.2.3")
1064
+ True
1065
+ >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True)
1066
+ True
1067
+ """
1068
+ return self.contains(item)
1069
+
1070
+ def contains(self, item: UnparsedVersion, prereleases: bool | None = None) -> bool:
1071
+ """Return whether or not the item is contained in this specifier.
1072
+
1073
+ :param item:
1074
+ The item to check for, which can be a version string or a
1075
+ :class:`Version` instance.
1076
+ :param prereleases:
1077
+ Whether or not to match prereleases with this Specifier. If set to
1078
+ ``None`` (the default), it will follow the recommendation from
1079
+ :pep:`440` and match prereleases, as there are no other versions.
1080
+
1081
+ >>> Specifier(">=1.2.3").contains("1.2.3")
1082
+ True
1083
+ >>> Specifier(">=1.2.3").contains(Version("1.2.3"))
1084
+ True
1085
+ >>> Specifier(">=1.2.3").contains("1.0.0")
1086
+ False
1087
+ >>> Specifier(">=1.2.3").contains("1.3.0a1")
1088
+ True
1089
+ >>> Specifier(">=1.2.3", prereleases=False).contains("1.3.0a1")
1090
+ False
1091
+ >>> Specifier(">=1.2.3").contains("1.3.0a1")
1092
+ True
1093
+ """
1094
+
1095
+ return bool(list(self.filter([item], prereleases=prereleases)))
1096
+
1097
+ @typing.overload
1098
+ def filter(
1099
+ self,
1100
+ iterable: Iterable[UnparsedVersionVar],
1101
+ prereleases: bool | None = None,
1102
+ key: None = ...,
1103
+ ) -> Iterator[UnparsedVersionVar]: ...
1104
+
1105
+ @typing.overload
1106
+ def filter(
1107
+ self,
1108
+ iterable: Iterable[T],
1109
+ prereleases: bool | None = None,
1110
+ key: Callable[[T], UnparsedVersion] = ...,
1111
+ ) -> Iterator[T]: ...
1112
+
1113
+ def filter(
1114
+ self,
1115
+ iterable: Iterable[Any],
1116
+ prereleases: bool | None = None,
1117
+ key: Callable[[Any], UnparsedVersion] | None = None,
1118
+ ) -> Iterator[Any]:
1119
+ """Filter items in the given iterable, that match the specifier.
1120
+
1121
+ :param iterable:
1122
+ An iterable that can contain version strings and :class:`Version` instances.
1123
+ The items in the iterable will be filtered according to the specifier.
1124
+ :param prereleases:
1125
+ Whether or not to allow prereleases in the returned iterator. If set to
1126
+ ``None`` (the default), it will follow the recommendation from :pep:`440`
1127
+ and match prereleases if there are no other versions.
1128
+ :param key:
1129
+ A callable that takes a single argument (an item from the iterable) and
1130
+ returns a version string or :class:`Version` instance to be used for
1131
+ filtering.
1132
+
1133
+ >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
1134
+ ['1.3']
1135
+ >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")]))
1136
+ ['1.2.3', '1.3', <Version('1.4')>]
1137
+ >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"]))
1138
+ ['1.5a1']
1139
+ >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
1140
+ ['1.3', '1.5a1']
1141
+ >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
1142
+ ['1.3', '1.5a1']
1143
+ >>> list(Specifier(">=1.2.3").filter(
1144
+ ... [{"ver": "1.2"}, {"ver": "1.3"}],
1145
+ ... key=lambda x: x["ver"]))
1146
+ [{'ver': '1.3'}]
1147
+ """
1148
+ prereleases_versions = []
1149
+ found_non_prereleases = False
1150
+
1151
+ # Determine if to include prereleases by default
1152
+ include_prereleases = (
1153
+ prereleases if prereleases is not None else self.prereleases
1154
+ )
1155
+
1156
+ # Get the matching operator
1157
+ operator_callable = self._get_operator(self.operator)
1158
+
1159
+ # Filter versions
1160
+ for version in iterable:
1161
+ parsed_version = _coerce_version(version if key is None else key(version))
1162
+ match = False
1163
+ if parsed_version is None:
1164
+ # === operator can match arbitrary (non-version) strings
1165
+ if self.operator == "===" and self._compare_arbitrary(
1166
+ version, self.version
1167
+ ):
1168
+ yield version
1169
+ elif self.operator == "===":
1170
+ match = self._compare_arbitrary(
1171
+ version if key is None else key(version), self.version
1172
+ )
1173
+ else:
1174
+ match = operator_callable(parsed_version, self.version)
1175
+
1176
+ if match and parsed_version is not None:
1177
+ # If it's not a prerelease or prereleases are allowed, yield it directly
1178
+ if not parsed_version.is_prerelease or include_prereleases:
1179
+ found_non_prereleases = True
1180
+ yield version
1181
+ # Otherwise collect prereleases for potential later use
1182
+ elif prereleases is None and self._prereleases is not False:
1183
+ prereleases_versions.append(version)
1184
+
1185
+ # If no non-prereleases were found and prereleases weren't
1186
+ # explicitly forbidden, yield the collected prereleases
1187
+ if (
1188
+ not found_non_prereleases
1189
+ and prereleases is None
1190
+ and self._prereleases is not False
1191
+ ):
1192
+ yield from prereleases_versions
1193
+
1194
+
1195
+ _prefix_regex = re.compile(r"([0-9]+)((?:a|b|c|rc)[0-9]+)")
1196
+
1197
+
1198
+ def _pep440_filter_prereleases(
1199
+ iterable: Iterable[Any], key: Callable[[Any], UnparsedVersion] | None
1200
+ ) -> Iterator[Any]:
1201
+ """Filter per PEP 440: exclude prereleases unless no finals exist."""
1202
+ # Two lists used:
1203
+ # * all_nonfinal to preserve order if no finals exist
1204
+ # * arbitrary_strings for streaming when first final found
1205
+ all_nonfinal: list[Any] = []
1206
+ arbitrary_strings: list[Any] = []
1207
+
1208
+ found_final = False
1209
+ for item in iterable:
1210
+ parsed = _coerce_version(item if key is None else key(item))
1211
+
1212
+ if parsed is None:
1213
+ # Arbitrary strings are always included as it is not
1214
+ # possible to determine if they are prereleases,
1215
+ # and they have already passed all specifiers.
1216
+ if found_final:
1217
+ yield item
1218
+ else:
1219
+ arbitrary_strings.append(item)
1220
+ all_nonfinal.append(item)
1221
+ continue
1222
+
1223
+ if not parsed.is_prerelease:
1224
+ # Final release found - flush arbitrary strings, then yield
1225
+ if not found_final:
1226
+ yield from arbitrary_strings
1227
+ found_final = True
1228
+ yield item
1229
+ continue
1230
+
1231
+ # Prerelease - buffer if no finals yet, otherwise skip
1232
+ if not found_final:
1233
+ all_nonfinal.append(item)
1234
+
1235
+ # No finals found - yield all buffered items
1236
+ if not found_final:
1237
+ yield from all_nonfinal
1238
+
1239
+
1240
+ def _version_split(version: str) -> list[str]:
1241
+ """Split version into components.
1242
+
1243
+ The split components are intended for version comparison. The logic does
1244
+ not attempt to retain the original version string, so joining the
1245
+ components back with :func:`_version_join` may not produce the original
1246
+ version string.
1247
+ """
1248
+ result: list[str] = []
1249
+
1250
+ epoch, _, rest = version.rpartition("!")
1251
+ result.append(epoch or "0")
1252
+
1253
+ for item in rest.split("."):
1254
+ match = _prefix_regex.fullmatch(item)
1255
+ if match:
1256
+ result.extend(match.groups())
1257
+ else:
1258
+ result.append(item)
1259
+ return result
1260
+
1261
+
1262
+ def _version_join(components: list[str]) -> str:
1263
+ """Join split version components into a version string.
1264
+
1265
+ This function assumes the input came from :func:`_version_split`, where the
1266
+ first component must be the epoch (either empty or numeric), and all other
1267
+ components numeric.
1268
+ """
1269
+ epoch, *rest = components
1270
+ return f"{epoch}!{'.'.join(rest)}"
1271
+
1272
+
1273
+ def _is_not_suffix(segment: str) -> bool:
1274
+ return not any(
1275
+ segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post")
1276
+ )
1277
+
1278
+
1279
+ def _numeric_prefix_len(split: list[str]) -> int:
1280
+ """Count leading numeric components in a :func:`_version_split` result.
1281
+
1282
+ >>> _numeric_prefix_len(["0", "1", "2", "a1"])
1283
+ 3
1284
+ """
1285
+ count = 0
1286
+ for segment in split:
1287
+ if not segment.isdigit():
1288
+ break
1289
+ count += 1
1290
+ return count
1291
+
1292
+
1293
+ def _left_pad(split: list[str], target_numeric_len: int) -> list[str]:
1294
+ """Pad a :func:`_version_split` result with ``"0"`` segments to reach
1295
+ ``target_numeric_len`` numeric components. Suffix segments are preserved.
1296
+
1297
+ >>> _left_pad(["0", "1", "a1"], 4)
1298
+ ['0', '1', '0', '0', 'a1']
1299
+ """
1300
+ numeric_len = _numeric_prefix_len(split)
1301
+ pad_needed = target_numeric_len - numeric_len
1302
+ if pad_needed <= 0:
1303
+ return split
1304
+ return [*split[:numeric_len], *(["0"] * pad_needed), *split[numeric_len:]]
1305
+
1306
+
1307
+ def _operator_cost(op_entry: tuple[CallableOperator, str, str]) -> int:
1308
+ """Sort key for Cost Based Ordering of specifier operators in _filter_versions.
1309
+
1310
+ Operators run sequentially on a shrinking candidate set, so operators that
1311
+ reject the most versions should run first to minimize work for later ones.
1312
+
1313
+ Tier 0: Exact equality (==, ===), likely to narrow candidates to one version
1314
+ Tier 1: Range checks (>=, <=, >, <), cheap and usually reject a large portion
1315
+ Tier 2: Wildcard equality (==.*) and compatible release (~=), more expensive
1316
+ Tier 3: Exact !=, cheap but rarely rejects
1317
+ Tier 4: Wildcard !=.*, expensive and rarely rejects
1318
+ """
1319
+ _, ver, op = op_entry
1320
+ if op == "==":
1321
+ return 0 if not ver.endswith(".*") else 2
1322
+ if op in (">=", "<=", ">", "<"):
1323
+ return 1
1324
+ if op == "~=":
1325
+ return 2
1326
+ if op == "!=":
1327
+ return 3 if not ver.endswith(".*") else 4
1328
+ if op == "===":
1329
+ return 0
1330
+
1331
+ raise ValueError(f"Unknown operator: {op!r}") # pragma: no cover
1332
+
1333
+
1334
+ class SpecifierSet(BaseSpecifier):
1335
+ """This class abstracts handling of a set of version specifiers.
1336
+
1337
+ It can be passed a single specifier (``>=3.0``), a comma-separated list of
1338
+ specifiers (``>=3.0,!=3.1``), or no specifier at all.
1339
+
1340
+ Instances are safe to serialize with :mod:`pickle`. They use a stable
1341
+ format so the same pickle can be loaded in future packaging
1342
+ releases.
1343
+
1344
+ .. versionchanged:: 26.2
1345
+
1346
+ Added a stable pickle format. Pickles created with
1347
+ packaging 26.2+ can be unpickled with future releases.
1348
+ Backward compatibility with pickles from
1349
+ packaging < 26.2 is supported but may be removed in a future
1350
+ release.
1351
+ """
1352
+
1353
+ __slots__ = (
1354
+ "_canonicalized",
1355
+ "_has_arbitrary",
1356
+ "_is_unsatisfiable",
1357
+ "_prereleases",
1358
+ "_resolved_ops",
1359
+ "_specs",
1360
+ )
1361
+
1362
+ def __init__(
1363
+ self,
1364
+ specifiers: str | Iterable[Specifier] = "",
1365
+ prereleases: bool | None = None,
1366
+ ) -> None:
1367
+ """Initialize a SpecifierSet instance.
1368
+
1369
+ :param specifiers:
1370
+ The string representation of a specifier or a comma-separated list of
1371
+ specifiers which will be parsed and normalized before use.
1372
+ May also be an iterable of ``Specifier`` instances, which will be used
1373
+ as is.
1374
+ :param prereleases:
1375
+ This tells the SpecifierSet if it should accept prerelease versions if
1376
+ applicable or not. The default of ``None`` will autodetect it from the
1377
+ given specifiers.
1378
+
1379
+ :raises InvalidSpecifier:
1380
+ If the given ``specifiers`` are not parseable than this exception will be
1381
+ raised.
1382
+ """
1383
+
1384
+ if isinstance(specifiers, str):
1385
+ # Split on `,` to break each individual specifier into its own item, and
1386
+ # strip each item to remove leading/trailing whitespace.
1387
+ split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()]
1388
+
1389
+ self._specs: tuple[Specifier, ...] = tuple(map(Specifier, split_specifiers))
1390
+ # Fast substring check; avoids iterating parsed specs.
1391
+ self._has_arbitrary = "===" in specifiers
1392
+ else:
1393
+ self._specs = tuple(specifiers)
1394
+ # Substring check works for both Specifier objects and plain
1395
+ # strings (setuptools passes lists of strings).
1396
+ self._has_arbitrary = any("===" in str(s) for s in self._specs)
1397
+
1398
+ self._canonicalized = len(self._specs) <= 1
1399
+ self._resolved_ops: list[tuple[CallableOperator, str, str]] | None = None
1400
+
1401
+ # Store our prereleases value so we can use it later to determine if
1402
+ # we accept prereleases or not.
1403
+ self._prereleases = prereleases
1404
+
1405
+ self._is_unsatisfiable: bool | None = None
1406
+
1407
+ def _canonical_specs(self) -> tuple[Specifier, ...]:
1408
+ """Deduplicate, sort, and cache specs for order-sensitive operations."""
1409
+ if not self._canonicalized:
1410
+ self._specs = tuple(dict.fromkeys(sorted(self._specs, key=str)))
1411
+ self._canonicalized = True
1412
+ self._resolved_ops = None
1413
+ self._is_unsatisfiable = None
1414
+ return self._specs
1415
+
1416
+ @property
1417
+ def prereleases(self) -> bool | None:
1418
+ # If we have been given an explicit prerelease modifier, then we'll
1419
+ # pass that through here.
1420
+ if self._prereleases is not None:
1421
+ return self._prereleases
1422
+
1423
+ # If we don't have any specifiers, and we don't have a forced value,
1424
+ # then we'll just return None since we don't know if this should have
1425
+ # pre-releases or not.
1426
+ if not self._specs:
1427
+ return None
1428
+
1429
+ # Otherwise we'll see if any of the given specifiers accept
1430
+ # prereleases, if any of them do we'll return True, otherwise False.
1431
+ if any(s.prereleases for s in self._specs):
1432
+ return True
1433
+
1434
+ return None
1435
+
1436
+ @prereleases.setter
1437
+ def prereleases(self, value: bool | None) -> None:
1438
+ self._prereleases = value
1439
+ self._is_unsatisfiable = None
1440
+
1441
+ def __getstate__(self) -> tuple[tuple[Specifier, ...], bool | None]:
1442
+ # Return state as a 2-item tuple for compactness:
1443
+ # (specs, prereleases)
1444
+ # Cache members are excluded and will be recomputed on demand.
1445
+ return (self._specs, self._prereleases)
1446
+
1447
+ def __setstate__(self, state: object) -> None:
1448
+ # Always discard cached values - they will be recomputed on demand.
1449
+ self._resolved_ops = None
1450
+ self._is_unsatisfiable = None
1451
+
1452
+ if isinstance(state, tuple):
1453
+ if len(state) == 2:
1454
+ # New format (26.2+): (specs, prereleases)
1455
+ specs, prereleases = state
1456
+ if (
1457
+ isinstance(specs, tuple)
1458
+ and all(isinstance(s, Specifier) for s in specs)
1459
+ and _validate_pre(prereleases)
1460
+ ):
1461
+ self._specs = specs
1462
+ self._prereleases = prereleases
1463
+ self._canonicalized = len(specs) <= 1
1464
+ self._has_arbitrary = any("===" in str(s) for s in specs)
1465
+ return
1466
+ if len(state) == 2 and isinstance(state[1], dict):
1467
+ # Format (packaging 26.0-26.1): (None, {slot: value}).
1468
+ _, slot_dict = state
1469
+ specs = slot_dict.get("_specs", ())
1470
+ prereleases = slot_dict.get("_prereleases")
1471
+ # Convert frozenset to tuple (26.0 stored as frozenset)
1472
+ if isinstance(specs, frozenset):
1473
+ specs = tuple(sorted(specs, key=str))
1474
+ if (
1475
+ isinstance(specs, tuple)
1476
+ and all(isinstance(s, Specifier) for s in specs)
1477
+ and _validate_pre(prereleases)
1478
+ ):
1479
+ self._specs = specs
1480
+ self._prereleases = prereleases
1481
+ self._canonicalized = len(self._specs) <= 1
1482
+ self._has_arbitrary = any("===" in str(s) for s in self._specs)
1483
+ return
1484
+ if isinstance(state, dict):
1485
+ # Old format (packaging <= 25.x, no __slots__): state is a plain dict.
1486
+ specs = state.get("_specs", ())
1487
+ prereleases = state.get("_prereleases")
1488
+ # Convert frozenset to tuple (26.0 stored as frozenset)
1489
+ if isinstance(specs, frozenset):
1490
+ specs = tuple(sorted(specs, key=str))
1491
+ if (
1492
+ isinstance(specs, tuple)
1493
+ and all(isinstance(s, Specifier) for s in specs)
1494
+ and _validate_pre(prereleases)
1495
+ ):
1496
+ self._specs = specs
1497
+ self._prereleases = prereleases
1498
+ self._canonicalized = len(self._specs) <= 1
1499
+ self._has_arbitrary = any("===" in str(s) for s in self._specs)
1500
+ return
1501
+
1502
+ raise TypeError(f"Cannot restore SpecifierSet from {state!r}")
1503
+
1504
+ def __repr__(self) -> str:
1505
+ """A representation of the specifier set that shows all internal state.
1506
+
1507
+ Note that the ordering of the individual specifiers within the set may not
1508
+ match the input string.
1509
+
1510
+ >>> SpecifierSet('>=1.0.0,!=2.0.0')
1511
+ <SpecifierSet('!=2.0.0,>=1.0.0')>
1512
+ >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False)
1513
+ <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=False)>
1514
+ >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True)
1515
+ <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=True)>
1516
+ """
1517
+ pre = (
1518
+ f", prereleases={self.prereleases!r}"
1519
+ if self._prereleases is not None
1520
+ else ""
1521
+ )
1522
+
1523
+ return f"<{self.__class__.__name__}({str(self)!r}{pre})>"
1524
+
1525
+ def __str__(self) -> str:
1526
+ """A string representation of the specifier set that can be round-tripped.
1527
+
1528
+ Note that the ordering of the individual specifiers within the set may not
1529
+ match the input string.
1530
+
1531
+ >>> str(SpecifierSet(">=1.0.0,!=1.0.1"))
1532
+ '!=1.0.1,>=1.0.0'
1533
+ >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False))
1534
+ '!=1.0.1,>=1.0.0'
1535
+ """
1536
+ return ",".join(str(s) for s in self._canonical_specs())
1537
+
1538
+ def __hash__(self) -> int:
1539
+ return hash(self._canonical_specs())
1540
+
1541
+ def __and__(self, other: SpecifierSet | str) -> SpecifierSet:
1542
+ """Return a SpecifierSet which is a combination of the two sets.
1543
+
1544
+ :param other: The other object to combine with.
1545
+
1546
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1'
1547
+ <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
1548
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1')
1549
+ <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
1550
+ """
1551
+ if isinstance(other, str):
1552
+ other = SpecifierSet(other)
1553
+ elif not isinstance(other, SpecifierSet):
1554
+ return NotImplemented
1555
+
1556
+ specifier = SpecifierSet()
1557
+ specifier._specs = self._specs + other._specs
1558
+ specifier._canonicalized = len(specifier._specs) <= 1
1559
+ specifier._has_arbitrary = self._has_arbitrary or other._has_arbitrary
1560
+ specifier._resolved_ops = None
1561
+
1562
+ # Combine prerelease settings: use common or non-None value
1563
+ if self._prereleases is None or self._prereleases == other._prereleases:
1564
+ specifier._prereleases = other._prereleases
1565
+ elif other._prereleases is None:
1566
+ specifier._prereleases = self._prereleases
1567
+ else:
1568
+ raise ValueError(
1569
+ "Cannot combine SpecifierSets with True and False prerelease overrides."
1570
+ )
1571
+
1572
+ return specifier
1573
+
1574
+ def __eq__(self, other: object) -> bool:
1575
+ """Whether or not the two SpecifierSet-like objects are equal.
1576
+
1577
+ :param other: The other object to check against.
1578
+
1579
+ The value of :attr:`prereleases` is ignored.
1580
+
1581
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1")
1582
+ True
1583
+ >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) ==
1584
+ ... SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True))
1585
+ True
1586
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1"
1587
+ True
1588
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0")
1589
+ False
1590
+ >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2")
1591
+ False
1592
+ """
1593
+ if isinstance(other, (str, Specifier)):
1594
+ other = SpecifierSet(str(other))
1595
+ elif not isinstance(other, SpecifierSet):
1596
+ return NotImplemented
1597
+
1598
+ return self._canonical_specs() == other._canonical_specs()
1599
+
1600
+ def __len__(self) -> int:
1601
+ """Returns the number of specifiers in this specifier set."""
1602
+ return len(self._specs)
1603
+
1604
+ def __iter__(self) -> Iterator[Specifier]:
1605
+ """
1606
+ Returns an iterator over all the underlying :class:`Specifier` instances
1607
+ in this specifier set.
1608
+
1609
+ >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str)
1610
+ [<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>]
1611
+ """
1612
+ return iter(self._specs)
1613
+
1614
+ def _get_ranges(self) -> Sequence[_VersionRange]:
1615
+ """Intersect all specifiers into a single list of version ranges.
1616
+
1617
+ Returns an empty list when unsatisfiable. ``===`` specs are
1618
+ modeled as full range; string matching is checked separately
1619
+ by :meth:`_check_arbitrary_unsatisfiable`.
1620
+ """
1621
+ specs = self._specs
1622
+
1623
+ result: Sequence[_VersionRange] | None = None
1624
+ for s in specs:
1625
+ if result is None:
1626
+ result = s._to_ranges()
1627
+ else:
1628
+ result = _intersect_ranges(result, s._to_ranges())
1629
+ if not result:
1630
+ break
1631
+
1632
+ if result is None: # pragma: no cover
1633
+ raise RuntimeError("_get_ranges called with no specs")
1634
+ return result
1635
+
1636
+ def is_unsatisfiable(self) -> bool:
1637
+ """Check whether this specifier set can never be satisfied.
1638
+
1639
+ Returns True if no version can satisfy all specifiers simultaneously.
1640
+
1641
+ >>> SpecifierSet(">=2.0,<1.0").is_unsatisfiable()
1642
+ True
1643
+ >>> SpecifierSet(">=1.0,<2.0").is_unsatisfiable()
1644
+ False
1645
+ >>> SpecifierSet("").is_unsatisfiable()
1646
+ False
1647
+ >>> SpecifierSet("==1.0,!=1.0").is_unsatisfiable()
1648
+ True
1649
+ """
1650
+ cached = self._is_unsatisfiable
1651
+ if cached is not None:
1652
+ return cached
1653
+
1654
+ if not self._specs:
1655
+ self._is_unsatisfiable = False
1656
+ return False
1657
+
1658
+ result = not self._get_ranges()
1659
+
1660
+ if not result:
1661
+ result = self._check_arbitrary_unsatisfiable()
1662
+
1663
+ if not result and self.prereleases is False:
1664
+ result = self._check_prerelease_only_ranges()
1665
+
1666
+ self._is_unsatisfiable = result
1667
+ return result
1668
+
1669
+ def _check_prerelease_only_ranges(self) -> bool:
1670
+ """With prereleases=False, check if every range contains only
1671
+ pre-release versions (which would be excluded from matching)."""
1672
+ for lower, upper in self._get_ranges():
1673
+ nearest = _nearest_non_prerelease(lower.version)
1674
+ if nearest is None:
1675
+ return False
1676
+ if upper.version is None or nearest < upper.version:
1677
+ return False
1678
+ if nearest == upper.version and upper.inclusive:
1679
+ return False
1680
+ return True
1681
+
1682
+ def _check_arbitrary_unsatisfiable(self) -> bool:
1683
+ """Check === (arbitrary equality) specs for unsatisfiability.
1684
+
1685
+ === uses case-insensitive string comparison, so the only candidate
1686
+ that can match ``===V`` is the literal string V. This method
1687
+ checks whether that candidate is excluded by other specifiers.
1688
+ """
1689
+ arbitrary = [s for s in self._specs if s.operator == "==="]
1690
+ if not arbitrary:
1691
+ return False
1692
+
1693
+ # Multiple === must agree on the same string (case-insensitive).
1694
+ first = arbitrary[0].version.lower()
1695
+ if any(s.version.lower() != first for s in arbitrary[1:]):
1696
+ return True
1697
+
1698
+ # The sole candidate is the === version string. Check whether
1699
+ # it can satisfy every standard spec.
1700
+ candidate = _coerce_version(arbitrary[0].version)
1701
+
1702
+ # With prereleases=False, a prerelease candidate is excluded
1703
+ # by contains() before the === string check even runs.
1704
+ if (
1705
+ self.prereleases is False
1706
+ and candidate is not None
1707
+ and candidate.is_prerelease
1708
+ ):
1709
+ return True
1710
+
1711
+ standard = [s for s in self._specs if s.operator != "==="]
1712
+ if not standard:
1713
+ return False
1714
+
1715
+ if candidate is None:
1716
+ # Unparsable string cannot satisfy any standard spec.
1717
+ return True
1718
+
1719
+ return not all(s.contains(candidate) for s in standard)
1720
+
1721
+ def __contains__(self, item: UnparsedVersion) -> bool:
1722
+ """Return whether or not the item is contained in this specifier.
1723
+
1724
+ :param item: The item to check for.
1725
+
1726
+ This is used for the ``in`` operator and behaves the same as
1727
+ :meth:`contains` with no ``prereleases`` argument passed.
1728
+
1729
+ >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1")
1730
+ True
1731
+ >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1")
1732
+ True
1733
+ >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1")
1734
+ False
1735
+ >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1")
1736
+ True
1737
+ >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)
1738
+ True
1739
+ """
1740
+ return self.contains(item)
1741
+
1742
+ def contains(
1743
+ self,
1744
+ item: UnparsedVersion,
1745
+ prereleases: bool | None = None,
1746
+ installed: bool | None = None,
1747
+ ) -> bool:
1748
+ """Return whether or not the item is contained in this SpecifierSet.
1749
+
1750
+ :param item:
1751
+ The item to check for, which can be a version string or a
1752
+ :class:`Version` instance.
1753
+ :param prereleases:
1754
+ Whether or not to match prereleases with this SpecifierSet. If set to
1755
+ ``None`` (the default), it will follow the recommendation from :pep:`440`
1756
+ and match prereleases, as there are no other versions.
1757
+ :param installed:
1758
+ Whether or not the item is installed. If set to ``True``, it will
1759
+ accept prerelease versions even if the specifier does not allow them.
1760
+
1761
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3")
1762
+ True
1763
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3"))
1764
+ True
1765
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1")
1766
+ False
1767
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1")
1768
+ True
1769
+ >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False).contains("1.3.0a1")
1770
+ False
1771
+ >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True)
1772
+ True
1773
+ """
1774
+ version = _coerce_version(item)
1775
+
1776
+ if version is not None and installed and version.is_prerelease:
1777
+ prereleases = True
1778
+
1779
+ # When item is a string and === is involved, keep it as-is
1780
+ # so the comparison isn't done against the normalized form.
1781
+ if version is None or (self._has_arbitrary and not isinstance(item, Version)):
1782
+ check_item = item
1783
+ else:
1784
+ check_item = version
1785
+ return bool(list(self.filter([check_item], prereleases=prereleases)))
1786
+
1787
+ @typing.overload
1788
+ def filter(
1789
+ self,
1790
+ iterable: Iterable[UnparsedVersionVar],
1791
+ prereleases: bool | None = None,
1792
+ key: None = ...,
1793
+ ) -> Iterator[UnparsedVersionVar]: ...
1794
+
1795
+ @typing.overload
1796
+ def filter(
1797
+ self,
1798
+ iterable: Iterable[T],
1799
+ prereleases: bool | None = None,
1800
+ key: Callable[[T], UnparsedVersion] = ...,
1801
+ ) -> Iterator[T]: ...
1802
+
1803
+ def filter(
1804
+ self,
1805
+ iterable: Iterable[Any],
1806
+ prereleases: bool | None = None,
1807
+ key: Callable[[Any], UnparsedVersion] | None = None,
1808
+ ) -> Iterator[Any]:
1809
+ """Filter items in the given iterable, that match the specifiers in this set.
1810
+
1811
+ :param iterable:
1812
+ An iterable that can contain version strings and :class:`Version` instances.
1813
+ The items in the iterable will be filtered according to the specifier.
1814
+ :param prereleases:
1815
+ Whether or not to allow prereleases in the returned iterator. If set to
1816
+ ``None`` (the default), it will follow the recommendation from :pep:`440`
1817
+ and match prereleases if there are no other versions.
1818
+ :param key:
1819
+ A callable that takes a single argument (an item from the iterable) and
1820
+ returns a version string or :class:`Version` instance to be used for
1821
+ filtering.
1822
+
1823
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
1824
+ ['1.3']
1825
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")]))
1826
+ ['1.3', <Version('1.4')>]
1827
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"]))
1828
+ ['1.5a1']
1829
+ >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
1830
+ ['1.3', '1.5a1']
1831
+ >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
1832
+ ['1.3', '1.5a1']
1833
+ >>> list(SpecifierSet(">=1.2.3").filter(
1834
+ ... [{"ver": "1.2"}, {"ver": "1.3"}],
1835
+ ... key=lambda x: x["ver"]))
1836
+ [{'ver': '1.3'}]
1837
+
1838
+ An "empty" SpecifierSet will filter items based on the presence of prerelease
1839
+ versions in the set.
1840
+
1841
+ >>> list(SpecifierSet("").filter(["1.3", "1.5a1"]))
1842
+ ['1.3']
1843
+ >>> list(SpecifierSet("").filter(["1.5a1"]))
1844
+ ['1.5a1']
1845
+ >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"]))
1846
+ ['1.3', '1.5a1']
1847
+ >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True))
1848
+ ['1.3', '1.5a1']
1849
+ """
1850
+ # Determine if we're forcing a prerelease or not, if we're not forcing
1851
+ # one for this particular filter call, then we'll use whatever the
1852
+ # SpecifierSet thinks for whether or not we should support prereleases.
1853
+ if prereleases is None and self.prereleases is not None:
1854
+ prereleases = self.prereleases
1855
+
1856
+ # Filter versions that match all specifiers using Cost Based Ordering.
1857
+ if self._specs:
1858
+ # When prereleases is None, we need to let all versions through
1859
+ # the individual filters, then decide about prereleases at the end
1860
+ # based on whether any non-prereleases matched ALL specs.
1861
+
1862
+ # Fast path: single specifier, delegate directly.
1863
+ if len(self._specs) == 1:
1864
+ filtered = self._specs[0].filter(
1865
+ iterable,
1866
+ prereleases=True if prereleases is None else prereleases,
1867
+ key=key,
1868
+ )
1869
+ else:
1870
+ filtered = self._filter_versions(
1871
+ iterable,
1872
+ key,
1873
+ prereleases=True if prereleases is None else prereleases,
1874
+ )
1875
+
1876
+ if prereleases is not None:
1877
+ return filtered
1878
+
1879
+ return _pep440_filter_prereleases(filtered, key)
1880
+
1881
+ # Handle Empty SpecifierSet.
1882
+ if prereleases is True:
1883
+ return iter(iterable)
1884
+
1885
+ if prereleases is False:
1886
+ return (
1887
+ item
1888
+ for item in iterable
1889
+ if (
1890
+ (version := _coerce_version(item if key is None else key(item)))
1891
+ is None
1892
+ or not version.is_prerelease
1893
+ )
1894
+ )
1895
+
1896
+ # PEP 440: exclude prereleases unless no final releases matched
1897
+ return _pep440_filter_prereleases(iterable, key)
1898
+
1899
+ def _filter_versions(
1900
+ self,
1901
+ iterable: Iterable[Any],
1902
+ key: Callable[[Any], UnparsedVersion] | None,
1903
+ prereleases: bool | None = None,
1904
+ ) -> Iterator[Any]:
1905
+ """Filter versions against all specifiers in a single pass.
1906
+
1907
+ Uses Cost Based Ordering: specifiers are sorted by _operator_cost so
1908
+ that cheap range operators reject versions early, avoiding expensive
1909
+ wildcard or compatible operators on versions that would have been
1910
+ rejected anyway.
1911
+ """
1912
+ # Pre-resolve operators and sort (cached after first call).
1913
+ if self._resolved_ops is None:
1914
+ self._resolved_ops = sorted(
1915
+ (
1916
+ (spec._get_operator(spec.operator), spec.version, spec.operator)
1917
+ for spec in self._specs
1918
+ ),
1919
+ key=_operator_cost,
1920
+ )
1921
+ ops = self._resolved_ops
1922
+ exclude_prereleases = prereleases is False
1923
+
1924
+ for item in iterable:
1925
+ parsed = _coerce_version(item if key is None else key(item))
1926
+
1927
+ if parsed is None:
1928
+ # Only === can match non-parseable versions.
1929
+ if all(
1930
+ op == "===" and str(item).lower() == ver.lower()
1931
+ for _, ver, op in ops
1932
+ ):
1933
+ yield item
1934
+ elif exclude_prereleases and parsed.is_prerelease:
1935
+ pass
1936
+ elif all(
1937
+ str(item if key is None else key(item)).lower() == ver.lower()
1938
+ if op == "==="
1939
+ else op_fn(parsed, ver)
1940
+ for op_fn, ver, op in ops
1941
+ ):
1942
+ # Short-circuits on the first failing operator.
1943
+ yield item