xplia 1.0.1__py3-none-any.whl

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 (870) hide show
  1. venv/Lib/site-packages/_distutils_hack/__init__.py +222 -0
  2. venv/Lib/site-packages/_distutils_hack/override.py +1 -0
  3. venv/Lib/site-packages/pip/__init__.py +13 -0
  4. venv/Lib/site-packages/pip/__main__.py +24 -0
  5. venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
  6. venv/Lib/site-packages/pip/_internal/__init__.py +19 -0
  7. venv/Lib/site-packages/pip/_internal/build_env.py +311 -0
  8. venv/Lib/site-packages/pip/_internal/cache.py +292 -0
  9. venv/Lib/site-packages/pip/_internal/cli/__init__.py +4 -0
  10. venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +171 -0
  11. venv/Lib/site-packages/pip/_internal/cli/base_command.py +236 -0
  12. venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1074 -0
  13. venv/Lib/site-packages/pip/_internal/cli/command_context.py +27 -0
  14. venv/Lib/site-packages/pip/_internal/cli/main.py +79 -0
  15. venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
  16. venv/Lib/site-packages/pip/_internal/cli/parser.py +294 -0
  17. venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +68 -0
  18. venv/Lib/site-packages/pip/_internal/cli/req_command.py +508 -0
  19. venv/Lib/site-packages/pip/_internal/cli/spinners.py +159 -0
  20. venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
  21. venv/Lib/site-packages/pip/_internal/commands/__init__.py +132 -0
  22. venv/Lib/site-packages/pip/_internal/commands/cache.py +222 -0
  23. venv/Lib/site-packages/pip/_internal/commands/check.py +54 -0
  24. venv/Lib/site-packages/pip/_internal/commands/completion.py +121 -0
  25. venv/Lib/site-packages/pip/_internal/commands/configuration.py +282 -0
  26. venv/Lib/site-packages/pip/_internal/commands/debug.py +199 -0
  27. venv/Lib/site-packages/pip/_internal/commands/download.py +147 -0
  28. venv/Lib/site-packages/pip/_internal/commands/freeze.py +108 -0
  29. venv/Lib/site-packages/pip/_internal/commands/hash.py +59 -0
  30. venv/Lib/site-packages/pip/_internal/commands/help.py +41 -0
  31. venv/Lib/site-packages/pip/_internal/commands/index.py +139 -0
  32. venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
  33. venv/Lib/site-packages/pip/_internal/commands/install.py +778 -0
  34. venv/Lib/site-packages/pip/_internal/commands/list.py +368 -0
  35. venv/Lib/site-packages/pip/_internal/commands/search.py +174 -0
  36. venv/Lib/site-packages/pip/_internal/commands/show.py +189 -0
  37. venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
  38. venv/Lib/site-packages/pip/_internal/commands/wheel.py +183 -0
  39. venv/Lib/site-packages/pip/_internal/configuration.py +381 -0
  40. venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
  41. venv/Lib/site-packages/pip/_internal/distributions/base.py +39 -0
  42. venv/Lib/site-packages/pip/_internal/distributions/installed.py +23 -0
  43. venv/Lib/site-packages/pip/_internal/distributions/sdist.py +150 -0
  44. venv/Lib/site-packages/pip/_internal/distributions/wheel.py +34 -0
  45. venv/Lib/site-packages/pip/_internal/exceptions.py +733 -0
  46. venv/Lib/site-packages/pip/_internal/index/__init__.py +2 -0
  47. venv/Lib/site-packages/pip/_internal/index/collector.py +505 -0
  48. venv/Lib/site-packages/pip/_internal/index/package_finder.py +1029 -0
  49. venv/Lib/site-packages/pip/_internal/index/sources.py +223 -0
  50. venv/Lib/site-packages/pip/_internal/locations/__init__.py +467 -0
  51. venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
  52. venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +213 -0
  53. venv/Lib/site-packages/pip/_internal/locations/base.py +81 -0
  54. venv/Lib/site-packages/pip/_internal/main.py +12 -0
  55. venv/Lib/site-packages/pip/_internal/metadata/__init__.py +127 -0
  56. venv/Lib/site-packages/pip/_internal/metadata/_json.py +84 -0
  57. venv/Lib/site-packages/pip/_internal/metadata/base.py +688 -0
  58. venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +4 -0
  59. venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +55 -0
  60. venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +224 -0
  61. venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +188 -0
  62. venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +270 -0
  63. venv/Lib/site-packages/pip/_internal/models/__init__.py +2 -0
  64. venv/Lib/site-packages/pip/_internal/models/candidate.py +34 -0
  65. venv/Lib/site-packages/pip/_internal/models/direct_url.py +237 -0
  66. venv/Lib/site-packages/pip/_internal/models/format_control.py +80 -0
  67. venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
  68. venv/Lib/site-packages/pip/_internal/models/installation_report.py +53 -0
  69. venv/Lib/site-packages/pip/_internal/models/link.py +581 -0
  70. venv/Lib/site-packages/pip/_internal/models/scheme.py +31 -0
  71. venv/Lib/site-packages/pip/_internal/models/search_scope.py +132 -0
  72. venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +51 -0
  73. venv/Lib/site-packages/pip/_internal/models/target_python.py +110 -0
  74. venv/Lib/site-packages/pip/_internal/models/wheel.py +92 -0
  75. venv/Lib/site-packages/pip/_internal/network/__init__.py +2 -0
  76. venv/Lib/site-packages/pip/_internal/network/auth.py +561 -0
  77. venv/Lib/site-packages/pip/_internal/network/cache.py +69 -0
  78. venv/Lib/site-packages/pip/_internal/network/download.py +186 -0
  79. venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +210 -0
  80. venv/Lib/site-packages/pip/_internal/network/session.py +519 -0
  81. venv/Lib/site-packages/pip/_internal/network/utils.py +96 -0
  82. venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +60 -0
  83. venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  84. venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  85. venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +124 -0
  86. venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +39 -0
  87. venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
  88. venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +74 -0
  89. venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +37 -0
  90. venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +46 -0
  91. venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +102 -0
  92. venv/Lib/site-packages/pip/_internal/operations/check.py +187 -0
  93. venv/Lib/site-packages/pip/_internal/operations/freeze.py +255 -0
  94. venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +2 -0
  95. venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +46 -0
  96. venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +740 -0
  97. venv/Lib/site-packages/pip/_internal/operations/prepare.py +743 -0
  98. venv/Lib/site-packages/pip/_internal/pyproject.py +179 -0
  99. venv/Lib/site-packages/pip/_internal/req/__init__.py +92 -0
  100. venv/Lib/site-packages/pip/_internal/req/constructors.py +506 -0
  101. venv/Lib/site-packages/pip/_internal/req/req_file.py +552 -0
  102. venv/Lib/site-packages/pip/_internal/req/req_install.py +874 -0
  103. venv/Lib/site-packages/pip/_internal/req/req_set.py +119 -0
  104. venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +650 -0
  105. venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  106. venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
  107. venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  108. venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +600 -0
  109. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  110. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +141 -0
  111. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +555 -0
  112. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +730 -0
  113. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +155 -0
  114. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +255 -0
  115. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +80 -0
  116. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +165 -0
  117. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +299 -0
  118. venv/Lib/site-packages/pip/_internal/self_outdated_check.py +242 -0
  119. venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  120. venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  121. venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
  122. venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
  123. venv/Lib/site-packages/pip/_internal/utils/compat.py +63 -0
  124. venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +165 -0
  125. venv/Lib/site-packages/pip/_internal/utils/datetime.py +11 -0
  126. venv/Lib/site-packages/pip/_internal/utils/deprecation.py +120 -0
  127. venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
  128. venv/Lib/site-packages/pip/_internal/utils/egg_link.py +72 -0
  129. venv/Lib/site-packages/pip/_internal/utils/encoding.py +36 -0
  130. venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +84 -0
  131. venv/Lib/site-packages/pip/_internal/utils/filesystem.py +153 -0
  132. venv/Lib/site-packages/pip/_internal/utils/filetypes.py +27 -0
  133. venv/Lib/site-packages/pip/_internal/utils/glibc.py +88 -0
  134. venv/Lib/site-packages/pip/_internal/utils/hashes.py +151 -0
  135. venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +35 -0
  136. venv/Lib/site-packages/pip/_internal/utils/logging.py +348 -0
  137. venv/Lib/site-packages/pip/_internal/utils/misc.py +735 -0
  138. venv/Lib/site-packages/pip/_internal/utils/models.py +39 -0
  139. venv/Lib/site-packages/pip/_internal/utils/packaging.py +57 -0
  140. venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +146 -0
  141. venv/Lib/site-packages/pip/_internal/utils/subprocess.py +260 -0
  142. venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +246 -0
  143. venv/Lib/site-packages/pip/_internal/utils/unpacking.py +257 -0
  144. venv/Lib/site-packages/pip/_internal/utils/urls.py +62 -0
  145. venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +104 -0
  146. venv/Lib/site-packages/pip/_internal/utils/wheel.py +136 -0
  147. venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  148. venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +112 -0
  149. venv/Lib/site-packages/pip/_internal/vcs/git.py +526 -0
  150. venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +163 -0
  151. venv/Lib/site-packages/pip/_internal/vcs/subversion.py +324 -0
  152. venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +705 -0
  153. venv/Lib/site-packages/pip/_internal/wheel_builder.py +355 -0
  154. venv/Lib/site-packages/pip/_vendor/__init__.py +120 -0
  155. venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +18 -0
  156. venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +61 -0
  157. venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +137 -0
  158. venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +65 -0
  159. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +9 -0
  160. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +188 -0
  161. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +39 -0
  162. venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +32 -0
  163. venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +439 -0
  164. venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +111 -0
  165. venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +139 -0
  166. venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +190 -0
  167. venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +33 -0
  168. venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  169. venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  170. venv/Lib/site-packages/pip/_vendor/certifi/core.py +108 -0
  171. venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +115 -0
  172. venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
  173. venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +47 -0
  174. venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +261 -0
  175. venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
  176. venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +147 -0
  177. venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +0 -0
  178. venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +112 -0
  179. venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +90 -0
  180. venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachinedict.py +19 -0
  181. venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
  182. venv/Lib/site-packages/pip/_vendor/chardet/enums.py +85 -0
  183. venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +102 -0
  184. venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +261 -0
  185. venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +102 -0
  186. venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +196 -0
  187. venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
  188. venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +388 -0
  189. venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +47 -0
  190. venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +284 -0
  191. venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +47 -0
  192. venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +316 -0
  193. venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
  194. venv/Lib/site-packages/pip/_vendor/chardet/johabfreq.py +2382 -0
  195. venv/Lib/site-packages/pip/_vendor/chardet/johabprober.py +47 -0
  196. venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +238 -0
  197. venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +4649 -0
  198. venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +4397 -0
  199. venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +4380 -0
  200. venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +4649 -0
  201. venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +5725 -0
  202. venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +4380 -0
  203. venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +4380 -0
  204. venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +147 -0
  205. venv/Lib/site-packages/pip/_vendor/chardet/macromanprober.py +162 -0
  206. venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +95 -0
  207. venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +57 -0
  208. venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +661 -0
  209. venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +0 -0
  210. venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +352 -0
  211. venv/Lib/site-packages/pip/_vendor/chardet/resultdict.py +16 -0
  212. venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +162 -0
  213. venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +88 -0
  214. venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +105 -0
  215. venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +362 -0
  216. venv/Lib/site-packages/pip/_vendor/chardet/utf1632prober.py +225 -0
  217. venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +82 -0
  218. venv/Lib/site-packages/pip/_vendor/chardet/version.py +9 -0
  219. venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +7 -0
  220. venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +102 -0
  221. venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +277 -0
  222. venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +121 -0
  223. venv/Lib/site-packages/pip/_vendor/colorama/tests/__init__.py +1 -0
  224. venv/Lib/site-packages/pip/_vendor/colorama/tests/ansi_test.py +76 -0
  225. venv/Lib/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py +294 -0
  226. venv/Lib/site-packages/pip/_vendor/colorama/tests/initialise_test.py +189 -0
  227. venv/Lib/site-packages/pip/_vendor/colorama/tests/isatty_test.py +57 -0
  228. venv/Lib/site-packages/pip/_vendor/colorama/tests/utils.py +49 -0
  229. venv/Lib/site-packages/pip/_vendor/colorama/tests/winterm_test.py +131 -0
  230. venv/Lib/site-packages/pip/_vendor/colorama/win32.py +180 -0
  231. venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +195 -0
  232. venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +23 -0
  233. venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1116 -0
  234. venv/Lib/site-packages/pip/_vendor/distlib/database.py +1350 -0
  235. venv/Lib/site-packages/pip/_vendor/distlib/index.py +508 -0
  236. venv/Lib/site-packages/pip/_vendor/distlib/locators.py +1300 -0
  237. venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +393 -0
  238. venv/Lib/site-packages/pip/_vendor/distlib/markers.py +152 -0
  239. venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +1076 -0
  240. venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
  241. venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +437 -0
  242. venv/Lib/site-packages/pip/_vendor/distlib/util.py +1932 -0
  243. venv/Lib/site-packages/pip/_vendor/distlib/version.py +739 -0
  244. venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +1082 -0
  245. venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
  246. venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
  247. venv/Lib/site-packages/pip/_vendor/distro/distro.py +1399 -0
  248. venv/Lib/site-packages/pip/_vendor/idna/__init__.py +44 -0
  249. venv/Lib/site-packages/pip/_vendor/idna/codec.py +112 -0
  250. venv/Lib/site-packages/pip/_vendor/idna/compat.py +13 -0
  251. venv/Lib/site-packages/pip/_vendor/idna/core.py +400 -0
  252. venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +2151 -0
  253. venv/Lib/site-packages/pip/_vendor/idna/intranges.py +54 -0
  254. venv/Lib/site-packages/pip/_vendor/idna/package_data.py +2 -0
  255. venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8600 -0
  256. venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +57 -0
  257. venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  258. venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +193 -0
  259. venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +1010 -0
  260. venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +26 -0
  261. venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +25 -0
  262. venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +301 -0
  263. venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +136 -0
  264. venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
  265. venv/Lib/site-packages/pip/_vendor/packaging/markers.py +304 -0
  266. venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +146 -0
  267. venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +802 -0
  268. venv/Lib/site-packages/pip/_vendor/packaging/tags.py +487 -0
  269. venv/Lib/site-packages/pip/_vendor/packaging/utils.py +136 -0
  270. venv/Lib/site-packages/pip/_vendor/packaging/version.py +504 -0
  271. venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3361 -0
  272. venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +566 -0
  273. venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +53 -0
  274. venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +210 -0
  275. venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +223 -0
  276. venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +91 -0
  277. venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +223 -0
  278. venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +4 -0
  279. venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +255 -0
  280. venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  281. venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  282. venv/Lib/site-packages/pip/_vendor/pygments/cmdline.py +668 -0
  283. venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
  284. venv/Lib/site-packages/pip/_vendor/pygments/filter.py +71 -0
  285. venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  286. venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +124 -0
  287. venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +158 -0
  288. venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  289. venv/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py +108 -0
  290. venv/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py +170 -0
  291. venv/Lib/site-packages/pip/_vendor/pygments/formatters/html.py +989 -0
  292. venv/Lib/site-packages/pip/_vendor/pygments/formatters/img.py +645 -0
  293. venv/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py +154 -0
  294. venv/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py +521 -0
  295. venv/Lib/site-packages/pip/_vendor/pygments/formatters/other.py +161 -0
  296. venv/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py +83 -0
  297. venv/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py +146 -0
  298. venv/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py +188 -0
  299. venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py +127 -0
  300. venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py +338 -0
  301. venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +943 -0
  302. venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  303. venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +559 -0
  304. venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1198 -0
  305. venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  306. venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +88 -0
  307. venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  308. venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  309. venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +217 -0
  310. venv/Lib/site-packages/pip/_vendor/pygments/style.py +197 -0
  311. venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +103 -0
  312. venv/Lib/site-packages/pip/_vendor/pygments/token.py +213 -0
  313. venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  314. venv/Lib/site-packages/pip/_vendor/pygments/util.py +330 -0
  315. venv/Lib/site-packages/pip/_vendor/pyparsing/__init__.py +322 -0
  316. venv/Lib/site-packages/pip/_vendor/pyparsing/actions.py +217 -0
  317. venv/Lib/site-packages/pip/_vendor/pyparsing/common.py +432 -0
  318. venv/Lib/site-packages/pip/_vendor/pyparsing/core.py +6115 -0
  319. venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__init__.py +656 -0
  320. venv/Lib/site-packages/pip/_vendor/pyparsing/exceptions.py +299 -0
  321. venv/Lib/site-packages/pip/_vendor/pyparsing/helpers.py +1100 -0
  322. venv/Lib/site-packages/pip/_vendor/pyparsing/results.py +796 -0
  323. venv/Lib/site-packages/pip/_vendor/pyparsing/testing.py +331 -0
  324. venv/Lib/site-packages/pip/_vendor/pyparsing/unicode.py +361 -0
  325. venv/Lib/site-packages/pip/_vendor/pyparsing/util.py +284 -0
  326. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +23 -0
  327. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_compat.py +8 -0
  328. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +330 -0
  329. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +18 -0
  330. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +353 -0
  331. venv/Lib/site-packages/pip/_vendor/requests/__init__.py +182 -0
  332. venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  333. venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
  334. venv/Lib/site-packages/pip/_vendor/requests/adapters.py +538 -0
  335. venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
  336. venv/Lib/site-packages/pip/_vendor/requests/auth.py +315 -0
  337. venv/Lib/site-packages/pip/_vendor/requests/certs.py +24 -0
  338. venv/Lib/site-packages/pip/_vendor/requests/compat.py +67 -0
  339. venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
  340. venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +141 -0
  341. venv/Lib/site-packages/pip/_vendor/requests/help.py +131 -0
  342. venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
  343. venv/Lib/site-packages/pip/_vendor/requests/models.py +1034 -0
  344. venv/Lib/site-packages/pip/_vendor/requests/packages.py +16 -0
  345. venv/Lib/site-packages/pip/_vendor/requests/sessions.py +833 -0
  346. venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  347. venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
  348. venv/Lib/site-packages/pip/_vendor/requests/utils.py +1094 -0
  349. venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +26 -0
  350. venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
  351. venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +6 -0
  352. venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +133 -0
  353. venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +43 -0
  354. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +547 -0
  355. venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +170 -0
  356. venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
  357. venv/Lib/site-packages/pip/_vendor/rich/__main__.py +274 -0
  358. venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +451 -0
  359. venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  360. venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  361. venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  362. venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
  363. venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  364. venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +270 -0
  365. venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  366. venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
  367. venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  368. venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  369. venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
  370. venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +160 -0
  371. venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  372. venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
  373. venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
  374. venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +662 -0
  375. venv/Lib/site-packages/pip/_vendor/rich/_windows.py +72 -0
  376. venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  377. venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +56 -0
  378. venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
  379. venv/Lib/site-packages/pip/_vendor/rich/align.py +311 -0
  380. venv/Lib/site-packages/pip/_vendor/rich/ansi.py +240 -0
  381. venv/Lib/site-packages/pip/_vendor/rich/bar.py +94 -0
  382. venv/Lib/site-packages/pip/_vendor/rich/box.py +517 -0
  383. venv/Lib/site-packages/pip/_vendor/rich/cells.py +154 -0
  384. venv/Lib/site-packages/pip/_vendor/rich/color.py +622 -0
  385. venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  386. venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
  387. venv/Lib/site-packages/pip/_vendor/rich/console.py +2633 -0
  388. venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
  389. venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
  390. venv/Lib/site-packages/pip/_vendor/rich/control.py +225 -0
  391. venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +190 -0
  392. venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +37 -0
  393. venv/Lib/site-packages/pip/_vendor/rich/emoji.py +96 -0
  394. venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
  395. venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  396. venv/Lib/site-packages/pip/_vendor/rich/filesize.py +89 -0
  397. venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  398. venv/Lib/site-packages/pip/_vendor/rich/json.py +140 -0
  399. venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  400. venv/Lib/site-packages/pip/_vendor/rich/layout.py +443 -0
  401. venv/Lib/site-packages/pip/_vendor/rich/live.py +375 -0
  402. venv/Lib/site-packages/pip/_vendor/rich/live_render.py +113 -0
  403. venv/Lib/site-packages/pip/_vendor/rich/logging.py +289 -0
  404. venv/Lib/site-packages/pip/_vendor/rich/markup.py +246 -0
  405. venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
  406. venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
  407. venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
  408. venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
  409. venv/Lib/site-packages/pip/_vendor/rich/panel.py +308 -0
  410. venv/Lib/site-packages/pip/_vendor/rich/pretty.py +994 -0
  411. venv/Lib/site-packages/pip/_vendor/rich/progress.py +1702 -0
  412. venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +224 -0
  413. venv/Lib/site-packages/pip/_vendor/rich/prompt.py +376 -0
  414. venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
  415. venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
  416. venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
  417. venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
  418. venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
  419. venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
  420. venv/Lib/site-packages/pip/_vendor/rich/segment.py +739 -0
  421. venv/Lib/site-packages/pip/_vendor/rich/spinner.py +137 -0
  422. venv/Lib/site-packages/pip/_vendor/rich/status.py +132 -0
  423. venv/Lib/site-packages/pip/_vendor/rich/style.py +796 -0
  424. venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
  425. venv/Lib/site-packages/pip/_vendor/rich/syntax.py +948 -0
  426. venv/Lib/site-packages/pip/_vendor/rich/table.py +1002 -0
  427. venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  428. venv/Lib/site-packages/pip/_vendor/rich/text.py +1307 -0
  429. venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
  430. venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
  431. venv/Lib/site-packages/pip/_vendor/rich/traceback.py +756 -0
  432. venv/Lib/site-packages/pip/_vendor/rich/tree.py +251 -0
  433. venv/Lib/site-packages/pip/_vendor/six.py +998 -0
  434. venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py +608 -0
  435. venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py +94 -0
  436. venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py +76 -0
  437. venv/Lib/site-packages/pip/_vendor/tenacity/after.py +51 -0
  438. venv/Lib/site-packages/pip/_vendor/tenacity/before.py +46 -0
  439. venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py +71 -0
  440. venv/Lib/site-packages/pip/_vendor/tenacity/nap.py +43 -0
  441. venv/Lib/site-packages/pip/_vendor/tenacity/retry.py +272 -0
  442. venv/Lib/site-packages/pip/_vendor/tenacity/stop.py +103 -0
  443. venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py +59 -0
  444. venv/Lib/site-packages/pip/_vendor/tenacity/wait.py +228 -0
  445. venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +11 -0
  446. venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +691 -0
  447. venv/Lib/site-packages/pip/_vendor/tomli/_re.py +107 -0
  448. venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
  449. venv/Lib/site-packages/pip/_vendor/typing_extensions.py +3072 -0
  450. venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
  451. venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +337 -0
  452. venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  453. venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
  454. venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1132 -0
  455. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  456. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  457. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  458. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  459. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
  460. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  461. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  462. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
  463. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +921 -0
  464. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  465. venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  466. venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  467. venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  468. venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  469. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  470. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  471. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
  472. venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
  473. venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +537 -0
  474. venv/Lib/site-packages/pip/_vendor/urllib3/request.py +170 -0
  475. venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
  476. venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  477. venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
  478. venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
  479. venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  480. venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
  481. venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  482. venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +620 -0
  483. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +495 -0
  484. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  485. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  486. venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  487. venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  488. venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  489. venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
  490. venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +231 -0
  491. venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
  492. venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +153 -0
  493. venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
  494. venv/Lib/site-packages/pip/py.typed +4 -0
  495. venv/Lib/site-packages/pkg_resources/__init__.py +3296 -0
  496. venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +0 -0
  497. venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +608 -0
  498. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__init__.py +36 -0
  499. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_adapters.py +170 -0
  500. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_common.py +104 -0
  501. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_compat.py +98 -0
  502. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_itertools.py +35 -0
  503. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_legacy.py +121 -0
  504. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/abc.py +137 -0
  505. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/readers.py +122 -0
  506. venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/simple.py +116 -0
  507. venv/Lib/site-packages/pkg_resources/_vendor/jaraco/__init__.py +0 -0
  508. venv/Lib/site-packages/pkg_resources/_vendor/jaraco/context.py +213 -0
  509. venv/Lib/site-packages/pkg_resources/_vendor/jaraco/functools.py +525 -0
  510. venv/Lib/site-packages/pkg_resources/_vendor/jaraco/text/__init__.py +599 -0
  511. venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/__init__.py +4 -0
  512. venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/more.py +4316 -0
  513. venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/recipes.py +698 -0
  514. venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +26 -0
  515. venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +25 -0
  516. venv/Lib/site-packages/pkg_resources/_vendor/packaging/_manylinux.py +301 -0
  517. venv/Lib/site-packages/pkg_resources/_vendor/packaging/_musllinux.py +136 -0
  518. venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +61 -0
  519. venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +304 -0
  520. venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +146 -0
  521. venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +802 -0
  522. venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py +487 -0
  523. venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +136 -0
  524. venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +504 -0
  525. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__init__.py +331 -0
  526. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/actions.py +207 -0
  527. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/common.py +424 -0
  528. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/core.py +5814 -0
  529. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/diagram/__init__.py +642 -0
  530. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/exceptions.py +267 -0
  531. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/helpers.py +1088 -0
  532. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/results.py +760 -0
  533. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/testing.py +331 -0
  534. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/unicode.py +352 -0
  535. venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/util.py +235 -0
  536. venv/Lib/site-packages/pkg_resources/_vendor/zipp.py +329 -0
  537. venv/Lib/site-packages/pkg_resources/extern/__init__.py +76 -0
  538. venv/Lib/site-packages/setuptools/__init__.py +247 -0
  539. venv/Lib/site-packages/setuptools/_deprecation_warning.py +7 -0
  540. venv/Lib/site-packages/setuptools/_distutils/__init__.py +24 -0
  541. venv/Lib/site-packages/setuptools/_distutils/_collections.py +56 -0
  542. venv/Lib/site-packages/setuptools/_distutils/_functools.py +20 -0
  543. venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
  544. venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +572 -0
  545. venv/Lib/site-packages/setuptools/_distutils/archive_util.py +280 -0
  546. venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py +408 -0
  547. venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +1220 -0
  548. venv/Lib/site-packages/setuptools/_distutils/cmd.py +436 -0
  549. venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +25 -0
  550. venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +55 -0
  551. venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +157 -0
  552. venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +144 -0
  553. venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +615 -0
  554. venv/Lib/site-packages/setuptools/_distutils/command/build.py +153 -0
  555. venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +208 -0
  556. venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +787 -0
  557. venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +407 -0
  558. venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +173 -0
  559. venv/Lib/site-packages/setuptools/_distutils/command/check.py +151 -0
  560. venv/Lib/site-packages/setuptools/_distutils/command/clean.py +76 -0
  561. venv/Lib/site-packages/setuptools/_distutils/command/config.py +377 -0
  562. venv/Lib/site-packages/setuptools/_distutils/command/install.py +814 -0
  563. venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +84 -0
  564. venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +91 -0
  565. venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +45 -0
  566. venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +238 -0
  567. venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +61 -0
  568. venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py +31 -0
  569. venv/Lib/site-packages/setuptools/_distutils/command/register.py +319 -0
  570. venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +531 -0
  571. venv/Lib/site-packages/setuptools/_distutils/command/upload.py +205 -0
  572. venv/Lib/site-packages/setuptools/_distutils/config.py +139 -0
  573. venv/Lib/site-packages/setuptools/_distutils/core.py +291 -0
  574. venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +364 -0
  575. venv/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
  576. venv/Lib/site-packages/setuptools/_distutils/dep_util.py +96 -0
  577. venv/Lib/site-packages/setuptools/_distutils/dir_util.py +243 -0
  578. venv/Lib/site-packages/setuptools/_distutils/dist.py +1286 -0
  579. venv/Lib/site-packages/setuptools/_distutils/errors.py +127 -0
  580. venv/Lib/site-packages/setuptools/_distutils/extension.py +248 -0
  581. venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +470 -0
  582. venv/Lib/site-packages/setuptools/_distutils/file_util.py +249 -0
  583. venv/Lib/site-packages/setuptools/_distutils/filelist.py +371 -0
  584. venv/Lib/site-packages/setuptools/_distutils/log.py +80 -0
  585. venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py +832 -0
  586. venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py +695 -0
  587. venv/Lib/site-packages/setuptools/_distutils/py38compat.py +8 -0
  588. venv/Lib/site-packages/setuptools/_distutils/py39compat.py +22 -0
  589. venv/Lib/site-packages/setuptools/_distutils/spawn.py +109 -0
  590. venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +558 -0
  591. venv/Lib/site-packages/setuptools/_distutils/text_file.py +287 -0
  592. venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +401 -0
  593. venv/Lib/site-packages/setuptools/_distutils/util.py +513 -0
  594. venv/Lib/site-packages/setuptools/_distutils/version.py +358 -0
  595. venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
  596. venv/Lib/site-packages/setuptools/_entry_points.py +86 -0
  597. venv/Lib/site-packages/setuptools/_imp.py +82 -0
  598. venv/Lib/site-packages/setuptools/_importlib.py +47 -0
  599. venv/Lib/site-packages/setuptools/_itertools.py +23 -0
  600. venv/Lib/site-packages/setuptools/_path.py +29 -0
  601. venv/Lib/site-packages/setuptools/_reqs.py +19 -0
  602. venv/Lib/site-packages/setuptools/_vendor/__init__.py +0 -0
  603. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1047 -0
  604. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +68 -0
  605. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
  606. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +71 -0
  607. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
  608. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
  609. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +48 -0
  610. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
  611. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +36 -0
  612. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +170 -0
  613. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +104 -0
  614. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_compat.py +98 -0
  615. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +35 -0
  616. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_legacy.py +121 -0
  617. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +137 -0
  618. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +122 -0
  619. venv/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +116 -0
  620. venv/Lib/site-packages/setuptools/_vendor/jaraco/__init__.py +0 -0
  621. venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py +213 -0
  622. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools.py +525 -0
  623. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +599 -0
  624. venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +4 -0
  625. venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +3824 -0
  626. venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +620 -0
  627. venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +488 -0
  628. venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +26 -0
  629. venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +25 -0
  630. venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +301 -0
  631. venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +136 -0
  632. venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
  633. venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +304 -0
  634. venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +146 -0
  635. venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +802 -0
  636. venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +487 -0
  637. venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +136 -0
  638. venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +504 -0
  639. venv/Lib/site-packages/setuptools/_vendor/pyparsing/__init__.py +331 -0
  640. venv/Lib/site-packages/setuptools/_vendor/pyparsing/actions.py +207 -0
  641. venv/Lib/site-packages/setuptools/_vendor/pyparsing/common.py +424 -0
  642. venv/Lib/site-packages/setuptools/_vendor/pyparsing/core.py +5814 -0
  643. venv/Lib/site-packages/setuptools/_vendor/pyparsing/diagram/__init__.py +642 -0
  644. venv/Lib/site-packages/setuptools/_vendor/pyparsing/exceptions.py +267 -0
  645. venv/Lib/site-packages/setuptools/_vendor/pyparsing/helpers.py +1088 -0
  646. venv/Lib/site-packages/setuptools/_vendor/pyparsing/results.py +760 -0
  647. venv/Lib/site-packages/setuptools/_vendor/pyparsing/testing.py +331 -0
  648. venv/Lib/site-packages/setuptools/_vendor/pyparsing/unicode.py +352 -0
  649. venv/Lib/site-packages/setuptools/_vendor/pyparsing/util.py +235 -0
  650. venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
  651. venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
  652. venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
  653. venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
  654. venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py +2296 -0
  655. venv/Lib/site-packages/setuptools/_vendor/zipp.py +329 -0
  656. venv/Lib/site-packages/setuptools/archive_util.py +213 -0
  657. venv/Lib/site-packages/setuptools/build_meta.py +511 -0
  658. venv/Lib/site-packages/setuptools/command/__init__.py +12 -0
  659. venv/Lib/site-packages/setuptools/command/alias.py +78 -0
  660. venv/Lib/site-packages/setuptools/command/bdist_egg.py +457 -0
  661. venv/Lib/site-packages/setuptools/command/bdist_rpm.py +40 -0
  662. venv/Lib/site-packages/setuptools/command/build.py +146 -0
  663. venv/Lib/site-packages/setuptools/command/build_clib.py +101 -0
  664. venv/Lib/site-packages/setuptools/command/build_ext.py +383 -0
  665. venv/Lib/site-packages/setuptools/command/build_py.py +368 -0
  666. venv/Lib/site-packages/setuptools/command/develop.py +193 -0
  667. venv/Lib/site-packages/setuptools/command/dist_info.py +142 -0
  668. venv/Lib/site-packages/setuptools/command/easy_install.py +2312 -0
  669. venv/Lib/site-packages/setuptools/command/editable_wheel.py +844 -0
  670. venv/Lib/site-packages/setuptools/command/egg_info.py +763 -0
  671. venv/Lib/site-packages/setuptools/command/install.py +139 -0
  672. venv/Lib/site-packages/setuptools/command/install_egg_info.py +63 -0
  673. venv/Lib/site-packages/setuptools/command/install_lib.py +122 -0
  674. venv/Lib/site-packages/setuptools/command/install_scripts.py +70 -0
  675. venv/Lib/site-packages/setuptools/command/py36compat.py +134 -0
  676. venv/Lib/site-packages/setuptools/command/register.py +18 -0
  677. venv/Lib/site-packages/setuptools/command/rotate.py +64 -0
  678. venv/Lib/site-packages/setuptools/command/saveopts.py +22 -0
  679. venv/Lib/site-packages/setuptools/command/sdist.py +210 -0
  680. venv/Lib/site-packages/setuptools/command/setopt.py +149 -0
  681. venv/Lib/site-packages/setuptools/command/test.py +251 -0
  682. venv/Lib/site-packages/setuptools/command/upload.py +17 -0
  683. venv/Lib/site-packages/setuptools/command/upload_docs.py +213 -0
  684. venv/Lib/site-packages/setuptools/config/__init__.py +35 -0
  685. venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +377 -0
  686. venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
  687. venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +318 -0
  688. venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +36 -0
  689. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
  690. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1035 -0
  691. venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +259 -0
  692. venv/Lib/site-packages/setuptools/config/expand.py +462 -0
  693. venv/Lib/site-packages/setuptools/config/pyprojecttoml.py +493 -0
  694. venv/Lib/site-packages/setuptools/config/setupcfg.py +762 -0
  695. venv/Lib/site-packages/setuptools/dep_util.py +25 -0
  696. venv/Lib/site-packages/setuptools/depends.py +176 -0
  697. venv/Lib/site-packages/setuptools/discovery.py +600 -0
  698. venv/Lib/site-packages/setuptools/dist.py +1222 -0
  699. venv/Lib/site-packages/setuptools/errors.py +58 -0
  700. venv/Lib/site-packages/setuptools/extension.py +148 -0
  701. venv/Lib/site-packages/setuptools/extern/__init__.py +76 -0
  702. venv/Lib/site-packages/setuptools/glob.py +167 -0
  703. venv/Lib/site-packages/setuptools/installer.py +104 -0
  704. venv/Lib/site-packages/setuptools/launch.py +36 -0
  705. venv/Lib/site-packages/setuptools/logging.py +36 -0
  706. venv/Lib/site-packages/setuptools/monkey.py +165 -0
  707. venv/Lib/site-packages/setuptools/msvc.py +1703 -0
  708. venv/Lib/site-packages/setuptools/namespaces.py +107 -0
  709. venv/Lib/site-packages/setuptools/package_index.py +1126 -0
  710. venv/Lib/site-packages/setuptools/py34compat.py +13 -0
  711. venv/Lib/site-packages/setuptools/sandbox.py +530 -0
  712. venv/Lib/site-packages/setuptools/unicode_utils.py +42 -0
  713. venv/Lib/site-packages/setuptools/version.py +6 -0
  714. venv/Lib/site-packages/setuptools/wheel.py +222 -0
  715. venv/Lib/site-packages/setuptools/windows_support.py +29 -0
  716. xplia/__init__.py +72 -0
  717. xplia/api/__init__.py +432 -0
  718. xplia/api/fastapi_app.py +453 -0
  719. xplia/cli.py +321 -0
  720. xplia/compliance/__init__.py +39 -0
  721. xplia/compliance/ai_act.py +538 -0
  722. xplia/compliance/compliance_checker.py +511 -0
  723. xplia/compliance/compliance_report.py +236 -0
  724. xplia/compliance/expert_review/__init__.py +18 -0
  725. xplia/compliance/expert_review/evaluation_criteria.py +209 -0
  726. xplia/compliance/expert_review/integration.py +270 -0
  727. xplia/compliance/expert_review/trust_expert_evaluator.py +379 -0
  728. xplia/compliance/explanation_rights.py +45 -0
  729. xplia/compliance/formatters/__init__.py +35 -0
  730. xplia/compliance/formatters/csv_formatter.py +179 -0
  731. xplia/compliance/formatters/html_formatter.py +689 -0
  732. xplia/compliance/formatters/html_trust_formatter.py +147 -0
  733. xplia/compliance/formatters/json_formatter.py +107 -0
  734. xplia/compliance/formatters/pdf_formatter.py +641 -0
  735. xplia/compliance/formatters/pdf_trust_formatter.py +309 -0
  736. xplia/compliance/formatters/trust_formatter_mixin.py +267 -0
  737. xplia/compliance/formatters/xml_formatter.py +173 -0
  738. xplia/compliance/gdpr.py +803 -0
  739. xplia/compliance/hipaa.py +134 -0
  740. xplia/compliance/report_base.py +205 -0
  741. xplia/compliance/report_generator.py +820 -0
  742. xplia/compliance/translations.py +299 -0
  743. xplia/core/__init__.py +98 -0
  744. xplia/core/base.py +391 -0
  745. xplia/core/config.py +297 -0
  746. xplia/core/factory.py +416 -0
  747. xplia/core/model_adapters/__init__.py +47 -0
  748. xplia/core/model_adapters/base.py +160 -0
  749. xplia/core/model_adapters/pytorch_adapter.py +339 -0
  750. xplia/core/model_adapters/sklearn_adapter.py +215 -0
  751. xplia/core/model_adapters/tensorflow_adapter.py +280 -0
  752. xplia/core/model_adapters/xgboost_adapter.py +295 -0
  753. xplia/core/optimizations.py +322 -0
  754. xplia/core/performance/__init__.py +57 -0
  755. xplia/core/performance/cache_manager.py +502 -0
  756. xplia/core/performance/memory_optimizer.py +465 -0
  757. xplia/core/performance/parallel_executor.py +327 -0
  758. xplia/core/registry.py +1234 -0
  759. xplia/explainers/__init__.py +70 -0
  760. xplia/explainers/__init__updated.py +62 -0
  761. xplia/explainers/adaptive/__init__.py +24 -0
  762. xplia/explainers/adaptive/explainer_selector.py +405 -0
  763. xplia/explainers/adaptive/explanation_quality.py +395 -0
  764. xplia/explainers/adaptive/fusion_strategies.py +297 -0
  765. xplia/explainers/adaptive/meta_explainer.py +320 -0
  766. xplia/explainers/adversarial/__init__.py +21 -0
  767. xplia/explainers/adversarial/adversarial_xai.py +678 -0
  768. xplia/explainers/anchor_explainer.py +1769 -0
  769. xplia/explainers/attention_explainer.py +996 -0
  770. xplia/explainers/bayesian/__init__.py +8 -0
  771. xplia/explainers/bayesian/bayesian_explainer.py +127 -0
  772. xplia/explainers/bias/__init__.py +17 -0
  773. xplia/explainers/bias/advanced_bias_detection.py +934 -0
  774. xplia/explainers/calibration/__init__.py +26 -0
  775. xplia/explainers/calibration/audience_adapter.py +376 -0
  776. xplia/explainers/calibration/audience_profiles.py +372 -0
  777. xplia/explainers/calibration/calibration_metrics.py +299 -0
  778. xplia/explainers/calibration/explanation_calibrator.py +460 -0
  779. xplia/explainers/causal/__init__.py +19 -0
  780. xplia/explainers/causal/causal_inference.py +669 -0
  781. xplia/explainers/certified/__init__.py +21 -0
  782. xplia/explainers/certified/certified_explanations.py +619 -0
  783. xplia/explainers/continual/__init__.py +8 -0
  784. xplia/explainers/continual/continual_explainer.py +102 -0
  785. xplia/explainers/counterfactual_explainer.py +804 -0
  786. xplia/explainers/counterfactuals/__init__.py +17 -0
  787. xplia/explainers/counterfactuals/advanced_counterfactuals.py +259 -0
  788. xplia/explainers/expert_evaluator.py +538 -0
  789. xplia/explainers/feature_importance_explainer.py +376 -0
  790. xplia/explainers/federated/__init__.py +17 -0
  791. xplia/explainers/federated/federated_xai.py +664 -0
  792. xplia/explainers/generative/__init__.py +15 -0
  793. xplia/explainers/generative/generative_explainer.py +243 -0
  794. xplia/explainers/gradient_explainer.py +3590 -0
  795. xplia/explainers/graph/__init__.py +26 -0
  796. xplia/explainers/graph/gnn_explainer.py +638 -0
  797. xplia/explainers/graph/molecular_explainer.py +438 -0
  798. xplia/explainers/lime_explainer.py +1580 -0
  799. xplia/explainers/llm/__init__.py +23 -0
  800. xplia/explainers/llm/llm_explainability.py +737 -0
  801. xplia/explainers/metalearning/__init__.py +15 -0
  802. xplia/explainers/metalearning/metalearning_explainer.py +276 -0
  803. xplia/explainers/moe/__init__.py +8 -0
  804. xplia/explainers/moe/moe_explainer.py +108 -0
  805. xplia/explainers/multimodal/__init__.py +30 -0
  806. xplia/explainers/multimodal/base.py +262 -0
  807. xplia/explainers/multimodal/diffusion_explainer.py +608 -0
  808. xplia/explainers/multimodal/foundation_model_explainer.py +323 -0
  809. xplia/explainers/multimodal/registry.py +139 -0
  810. xplia/explainers/multimodal/text_image_explainer.py +381 -0
  811. xplia/explainers/multimodal/vision_language_explainer.py +608 -0
  812. xplia/explainers/nas/__init__.py +5 -0
  813. xplia/explainers/nas/nas_explainer.py +65 -0
  814. xplia/explainers/neuralodes/__init__.py +5 -0
  815. xplia/explainers/neuralodes/neuralode_explainer.py +64 -0
  816. xplia/explainers/neurosymbolic/__init__.py +8 -0
  817. xplia/explainers/neurosymbolic/neurosymbolic_explainer.py +97 -0
  818. xplia/explainers/partial_dependence_explainer.py +509 -0
  819. xplia/explainers/privacy/__init__.py +21 -0
  820. xplia/explainers/privacy/differential_privacy_xai.py +624 -0
  821. xplia/explainers/quantum/__init__.py +5 -0
  822. xplia/explainers/quantum/quantum_explainer.py +79 -0
  823. xplia/explainers/recommender/__init__.py +8 -0
  824. xplia/explainers/recommender/recsys_explainer.py +124 -0
  825. xplia/explainers/reinforcement/__init__.py +15 -0
  826. xplia/explainers/reinforcement/rl_explainer.py +173 -0
  827. xplia/explainers/shap_explainer.py +2238 -0
  828. xplia/explainers/streaming/__init__.py +19 -0
  829. xplia/explainers/streaming/streaming_xai.py +703 -0
  830. xplia/explainers/timeseries/__init__.py +15 -0
  831. xplia/explainers/timeseries/timeseries_explainer.py +252 -0
  832. xplia/explainers/trust/__init__.py +24 -0
  833. xplia/explainers/trust/confidence_report.py +368 -0
  834. xplia/explainers/trust/fairwashing.py +489 -0
  835. xplia/explainers/trust/uncertainty.py +453 -0
  836. xplia/explainers/unified_explainer.py +566 -0
  837. xplia/explainers/unified_explainer_utils.py +309 -0
  838. xplia/integrations/__init__.py +3 -0
  839. xplia/integrations/mlflow_integration.py +331 -0
  840. xplia/integrations/wandb_integration.py +375 -0
  841. xplia/plugins/__init__.py +36 -0
  842. xplia/plugins/example_visualizer.py +11 -0
  843. xplia/utils/__init__.py +18 -0
  844. xplia/utils/performance.py +119 -0
  845. xplia/utils/validation.py +109 -0
  846. xplia/visualizations/__init__.py +31 -0
  847. xplia/visualizations/base.py +256 -0
  848. xplia/visualizations/boxplot_chart.py +224 -0
  849. xplia/visualizations/charts_impl.py +65 -0
  850. xplia/visualizations/gauge_chart.py +211 -0
  851. xplia/visualizations/gradient_viz.py +117 -0
  852. xplia/visualizations/heatmap_chart.py +173 -0
  853. xplia/visualizations/histogram_chart.py +176 -0
  854. xplia/visualizations/line_chart.py +100 -0
  855. xplia/visualizations/pie_chart.py +134 -0
  856. xplia/visualizations/radar_chart.py +154 -0
  857. xplia/visualizations/registry.py +76 -0
  858. xplia/visualizations/sankey_chart.py +190 -0
  859. xplia/visualizations/scatter_chart.py +252 -0
  860. xplia/visualizations/table_chart.py +263 -0
  861. xplia/visualizations/treemap_chart.py +216 -0
  862. xplia/visualizations.py +535 -0
  863. xplia/visualizers/__init__.py +87 -0
  864. xplia/visualizers/base_visualizer.py +294 -0
  865. xplia-1.0.1.dist-info/METADATA +685 -0
  866. xplia-1.0.1.dist-info/RECORD +870 -0
  867. xplia-1.0.1.dist-info/WHEEL +5 -0
  868. xplia-1.0.1.dist-info/entry_points.txt +2 -0
  869. xplia-1.0.1.dist-info/licenses/LICENSE +21 -0
  870. xplia-1.0.1.dist-info/top_level.txt +2 -0
@@ -0,0 +1,1082 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2013-2020 Vinay Sajip.
4
+ # Licensed to the Python Software Foundation under a contributor agreement.
5
+ # See LICENSE.txt and CONTRIBUTORS.txt.
6
+ #
7
+ from __future__ import unicode_literals
8
+
9
+ import base64
10
+ import codecs
11
+ import datetime
12
+ from email import message_from_file
13
+ import hashlib
14
+ import json
15
+ import logging
16
+ import os
17
+ import posixpath
18
+ import re
19
+ import shutil
20
+ import sys
21
+ import tempfile
22
+ import zipfile
23
+
24
+ from . import __version__, DistlibException
25
+ from .compat import sysconfig, ZipFile, fsdecode, text_type, filter
26
+ from .database import InstalledDistribution
27
+ from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME,
28
+ LEGACY_METADATA_FILENAME)
29
+ from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache,
30
+ cached_property, get_cache_base, read_exports, tempdir,
31
+ get_platform)
32
+ from .version import NormalizedVersion, UnsupportedVersionError
33
+
34
+ logger = logging.getLogger(__name__)
35
+
36
+ cache = None # created when needed
37
+
38
+ if hasattr(sys, 'pypy_version_info'): # pragma: no cover
39
+ IMP_PREFIX = 'pp'
40
+ elif sys.platform.startswith('java'): # pragma: no cover
41
+ IMP_PREFIX = 'jy'
42
+ elif sys.platform == 'cli': # pragma: no cover
43
+ IMP_PREFIX = 'ip'
44
+ else:
45
+ IMP_PREFIX = 'cp'
46
+
47
+ VER_SUFFIX = sysconfig.get_config_var('py_version_nodot')
48
+ if not VER_SUFFIX: # pragma: no cover
49
+ VER_SUFFIX = '%s%s' % sys.version_info[:2]
50
+ PYVER = 'py' + VER_SUFFIX
51
+ IMPVER = IMP_PREFIX + VER_SUFFIX
52
+
53
+ ARCH = get_platform().replace('-', '_').replace('.', '_')
54
+
55
+ ABI = sysconfig.get_config_var('SOABI')
56
+ if ABI and ABI.startswith('cpython-'):
57
+ ABI = ABI.replace('cpython-', 'cp').split('-')[0]
58
+ else:
59
+ def _derive_abi():
60
+ parts = ['cp', VER_SUFFIX]
61
+ if sysconfig.get_config_var('Py_DEBUG'):
62
+ parts.append('d')
63
+ if IMP_PREFIX == 'cp':
64
+ vi = sys.version_info[:2]
65
+ if vi < (3, 8):
66
+ wpm = sysconfig.get_config_var('WITH_PYMALLOC')
67
+ if wpm is None:
68
+ wpm = True
69
+ if wpm:
70
+ parts.append('m')
71
+ if vi < (3, 3):
72
+ us = sysconfig.get_config_var('Py_UNICODE_SIZE')
73
+ if us == 4 or (us is None and sys.maxunicode == 0x10FFFF):
74
+ parts.append('u')
75
+ return ''.join(parts)
76
+ ABI = _derive_abi()
77
+ del _derive_abi
78
+
79
+ FILENAME_RE = re.compile(r'''
80
+ (?P<nm>[^-]+)
81
+ -(?P<vn>\d+[^-]*)
82
+ (-(?P<bn>\d+[^-]*))?
83
+ -(?P<py>\w+\d+(\.\w+\d+)*)
84
+ -(?P<bi>\w+)
85
+ -(?P<ar>\w+(\.\w+)*)
86
+ \.whl$
87
+ ''', re.IGNORECASE | re.VERBOSE)
88
+
89
+ NAME_VERSION_RE = re.compile(r'''
90
+ (?P<nm>[^-]+)
91
+ -(?P<vn>\d+[^-]*)
92
+ (-(?P<bn>\d+[^-]*))?$
93
+ ''', re.IGNORECASE | re.VERBOSE)
94
+
95
+ SHEBANG_RE = re.compile(br'\s*#![^\r\n]*')
96
+ SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$')
97
+ SHEBANG_PYTHON = b'#!python'
98
+ SHEBANG_PYTHONW = b'#!pythonw'
99
+
100
+ if os.sep == '/':
101
+ to_posix = lambda o: o
102
+ else:
103
+ to_posix = lambda o: o.replace(os.sep, '/')
104
+
105
+ if sys.version_info[0] < 3:
106
+ import imp
107
+ else:
108
+ imp = None
109
+ import importlib.machinery
110
+ import importlib.util
111
+
112
+ def _get_suffixes():
113
+ if imp:
114
+ return [s[0] for s in imp.get_suffixes()]
115
+ else:
116
+ return importlib.machinery.EXTENSION_SUFFIXES
117
+
118
+ def _load_dynamic(name, path):
119
+ # https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly
120
+ if imp:
121
+ return imp.load_dynamic(name, path)
122
+ else:
123
+ spec = importlib.util.spec_from_file_location(name, path)
124
+ module = importlib.util.module_from_spec(spec)
125
+ sys.modules[name] = module
126
+ spec.loader.exec_module(module)
127
+ return module
128
+
129
+ class Mounter(object):
130
+ def __init__(self):
131
+ self.impure_wheels = {}
132
+ self.libs = {}
133
+
134
+ def add(self, pathname, extensions):
135
+ self.impure_wheels[pathname] = extensions
136
+ self.libs.update(extensions)
137
+
138
+ def remove(self, pathname):
139
+ extensions = self.impure_wheels.pop(pathname)
140
+ for k, v in extensions:
141
+ if k in self.libs:
142
+ del self.libs[k]
143
+
144
+ def find_module(self, fullname, path=None):
145
+ if fullname in self.libs:
146
+ result = self
147
+ else:
148
+ result = None
149
+ return result
150
+
151
+ def load_module(self, fullname):
152
+ if fullname in sys.modules:
153
+ result = sys.modules[fullname]
154
+ else:
155
+ if fullname not in self.libs:
156
+ raise ImportError('unable to find extension for %s' % fullname)
157
+ result = _load_dynamic(fullname, self.libs[fullname])
158
+ result.__loader__ = self
159
+ parts = fullname.rsplit('.', 1)
160
+ if len(parts) > 1:
161
+ result.__package__ = parts[0]
162
+ return result
163
+
164
+ _hook = Mounter()
165
+
166
+
167
+ class Wheel(object):
168
+ """
169
+ Class to build and install from Wheel files (PEP 427).
170
+ """
171
+
172
+ wheel_version = (1, 1)
173
+ hash_kind = 'sha256'
174
+
175
+ def __init__(self, filename=None, sign=False, verify=False):
176
+ """
177
+ Initialise an instance using a (valid) filename.
178
+ """
179
+ self.sign = sign
180
+ self.should_verify = verify
181
+ self.buildver = ''
182
+ self.pyver = [PYVER]
183
+ self.abi = ['none']
184
+ self.arch = ['any']
185
+ self.dirname = os.getcwd()
186
+ if filename is None:
187
+ self.name = 'dummy'
188
+ self.version = '0.1'
189
+ self._filename = self.filename
190
+ else:
191
+ m = NAME_VERSION_RE.match(filename)
192
+ if m:
193
+ info = m.groupdict('')
194
+ self.name = info['nm']
195
+ # Reinstate the local version separator
196
+ self.version = info['vn'].replace('_', '-')
197
+ self.buildver = info['bn']
198
+ self._filename = self.filename
199
+ else:
200
+ dirname, filename = os.path.split(filename)
201
+ m = FILENAME_RE.match(filename)
202
+ if not m:
203
+ raise DistlibException('Invalid name or '
204
+ 'filename: %r' % filename)
205
+ if dirname:
206
+ self.dirname = os.path.abspath(dirname)
207
+ self._filename = filename
208
+ info = m.groupdict('')
209
+ self.name = info['nm']
210
+ self.version = info['vn']
211
+ self.buildver = info['bn']
212
+ self.pyver = info['py'].split('.')
213
+ self.abi = info['bi'].split('.')
214
+ self.arch = info['ar'].split('.')
215
+
216
+ @property
217
+ def filename(self):
218
+ """
219
+ Build and return a filename from the various components.
220
+ """
221
+ if self.buildver:
222
+ buildver = '-' + self.buildver
223
+ else:
224
+ buildver = ''
225
+ pyver = '.'.join(self.pyver)
226
+ abi = '.'.join(self.abi)
227
+ arch = '.'.join(self.arch)
228
+ # replace - with _ as a local version separator
229
+ version = self.version.replace('-', '_')
230
+ return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver,
231
+ pyver, abi, arch)
232
+
233
+ @property
234
+ def exists(self):
235
+ path = os.path.join(self.dirname, self.filename)
236
+ return os.path.isfile(path)
237
+
238
+ @property
239
+ def tags(self):
240
+ for pyver in self.pyver:
241
+ for abi in self.abi:
242
+ for arch in self.arch:
243
+ yield pyver, abi, arch
244
+
245
+ @cached_property
246
+ def metadata(self):
247
+ pathname = os.path.join(self.dirname, self.filename)
248
+ name_ver = '%s-%s' % (self.name, self.version)
249
+ info_dir = '%s.dist-info' % name_ver
250
+ wrapper = codecs.getreader('utf-8')
251
+ with ZipFile(pathname, 'r') as zf:
252
+ wheel_metadata = self.get_wheel_metadata(zf)
253
+ wv = wheel_metadata['Wheel-Version'].split('.', 1)
254
+ file_version = tuple([int(i) for i in wv])
255
+ # if file_version < (1, 1):
256
+ # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME,
257
+ # LEGACY_METADATA_FILENAME]
258
+ # else:
259
+ # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME]
260
+ fns = [WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME]
261
+ result = None
262
+ for fn in fns:
263
+ try:
264
+ metadata_filename = posixpath.join(info_dir, fn)
265
+ with zf.open(metadata_filename) as bf:
266
+ wf = wrapper(bf)
267
+ result = Metadata(fileobj=wf)
268
+ if result:
269
+ break
270
+ except KeyError:
271
+ pass
272
+ if not result:
273
+ raise ValueError('Invalid wheel, because metadata is '
274
+ 'missing: looked in %s' % ', '.join(fns))
275
+ return result
276
+
277
+ def get_wheel_metadata(self, zf):
278
+ name_ver = '%s-%s' % (self.name, self.version)
279
+ info_dir = '%s.dist-info' % name_ver
280
+ metadata_filename = posixpath.join(info_dir, 'WHEEL')
281
+ with zf.open(metadata_filename) as bf:
282
+ wf = codecs.getreader('utf-8')(bf)
283
+ message = message_from_file(wf)
284
+ return dict(message)
285
+
286
+ @cached_property
287
+ def info(self):
288
+ pathname = os.path.join(self.dirname, self.filename)
289
+ with ZipFile(pathname, 'r') as zf:
290
+ result = self.get_wheel_metadata(zf)
291
+ return result
292
+
293
+ def process_shebang(self, data):
294
+ m = SHEBANG_RE.match(data)
295
+ if m:
296
+ end = m.end()
297
+ shebang, data_after_shebang = data[:end], data[end:]
298
+ # Preserve any arguments after the interpreter
299
+ if b'pythonw' in shebang.lower():
300
+ shebang_python = SHEBANG_PYTHONW
301
+ else:
302
+ shebang_python = SHEBANG_PYTHON
303
+ m = SHEBANG_DETAIL_RE.match(shebang)
304
+ if m:
305
+ args = b' ' + m.groups()[-1]
306
+ else:
307
+ args = b''
308
+ shebang = shebang_python + args
309
+ data = shebang + data_after_shebang
310
+ else:
311
+ cr = data.find(b'\r')
312
+ lf = data.find(b'\n')
313
+ if cr < 0 or cr > lf:
314
+ term = b'\n'
315
+ else:
316
+ if data[cr:cr + 2] == b'\r\n':
317
+ term = b'\r\n'
318
+ else:
319
+ term = b'\r'
320
+ data = SHEBANG_PYTHON + term + data
321
+ return data
322
+
323
+ def get_hash(self, data, hash_kind=None):
324
+ if hash_kind is None:
325
+ hash_kind = self.hash_kind
326
+ try:
327
+ hasher = getattr(hashlib, hash_kind)
328
+ except AttributeError:
329
+ raise DistlibException('Unsupported hash algorithm: %r' % hash_kind)
330
+ result = hasher(data).digest()
331
+ result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii')
332
+ return hash_kind, result
333
+
334
+ def write_record(self, records, record_path, archive_record_path):
335
+ records = list(records) # make a copy, as mutated
336
+ records.append((archive_record_path, '', ''))
337
+ with CSVWriter(record_path) as writer:
338
+ for row in records:
339
+ writer.writerow(row)
340
+
341
+ def write_records(self, info, libdir, archive_paths):
342
+ records = []
343
+ distinfo, info_dir = info
344
+ hasher = getattr(hashlib, self.hash_kind)
345
+ for ap, p in archive_paths:
346
+ with open(p, 'rb') as f:
347
+ data = f.read()
348
+ digest = '%s=%s' % self.get_hash(data)
349
+ size = os.path.getsize(p)
350
+ records.append((ap, digest, size))
351
+
352
+ p = os.path.join(distinfo, 'RECORD')
353
+ ap = to_posix(os.path.join(info_dir, 'RECORD'))
354
+ self.write_record(records, p, ap)
355
+ archive_paths.append((ap, p))
356
+
357
+ def build_zip(self, pathname, archive_paths):
358
+ with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf:
359
+ for ap, p in archive_paths:
360
+ logger.debug('Wrote %s to %s in wheel', p, ap)
361
+ zf.write(p, ap)
362
+
363
+ def build(self, paths, tags=None, wheel_version=None):
364
+ """
365
+ Build a wheel from files in specified paths, and use any specified tags
366
+ when determining the name of the wheel.
367
+ """
368
+ if tags is None:
369
+ tags = {}
370
+
371
+ libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0]
372
+ if libkey == 'platlib':
373
+ is_pure = 'false'
374
+ default_pyver = [IMPVER]
375
+ default_abi = [ABI]
376
+ default_arch = [ARCH]
377
+ else:
378
+ is_pure = 'true'
379
+ default_pyver = [PYVER]
380
+ default_abi = ['none']
381
+ default_arch = ['any']
382
+
383
+ self.pyver = tags.get('pyver', default_pyver)
384
+ self.abi = tags.get('abi', default_abi)
385
+ self.arch = tags.get('arch', default_arch)
386
+
387
+ libdir = paths[libkey]
388
+
389
+ name_ver = '%s-%s' % (self.name, self.version)
390
+ data_dir = '%s.data' % name_ver
391
+ info_dir = '%s.dist-info' % name_ver
392
+
393
+ archive_paths = []
394
+
395
+ # First, stuff which is not in site-packages
396
+ for key in ('data', 'headers', 'scripts'):
397
+ if key not in paths:
398
+ continue
399
+ path = paths[key]
400
+ if os.path.isdir(path):
401
+ for root, dirs, files in os.walk(path):
402
+ for fn in files:
403
+ p = fsdecode(os.path.join(root, fn))
404
+ rp = os.path.relpath(p, path)
405
+ ap = to_posix(os.path.join(data_dir, key, rp))
406
+ archive_paths.append((ap, p))
407
+ if key == 'scripts' and not p.endswith('.exe'):
408
+ with open(p, 'rb') as f:
409
+ data = f.read()
410
+ data = self.process_shebang(data)
411
+ with open(p, 'wb') as f:
412
+ f.write(data)
413
+
414
+ # Now, stuff which is in site-packages, other than the
415
+ # distinfo stuff.
416
+ path = libdir
417
+ distinfo = None
418
+ for root, dirs, files in os.walk(path):
419
+ if root == path:
420
+ # At the top level only, save distinfo for later
421
+ # and skip it for now
422
+ for i, dn in enumerate(dirs):
423
+ dn = fsdecode(dn)
424
+ if dn.endswith('.dist-info'):
425
+ distinfo = os.path.join(root, dn)
426
+ del dirs[i]
427
+ break
428
+ assert distinfo, '.dist-info directory expected, not found'
429
+
430
+ for fn in files:
431
+ # comment out next suite to leave .pyc files in
432
+ if fsdecode(fn).endswith(('.pyc', '.pyo')):
433
+ continue
434
+ p = os.path.join(root, fn)
435
+ rp = to_posix(os.path.relpath(p, path))
436
+ archive_paths.append((rp, p))
437
+
438
+ # Now distinfo. Assumed to be flat, i.e. os.listdir is enough.
439
+ files = os.listdir(distinfo)
440
+ for fn in files:
441
+ if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'):
442
+ p = fsdecode(os.path.join(distinfo, fn))
443
+ ap = to_posix(os.path.join(info_dir, fn))
444
+ archive_paths.append((ap, p))
445
+
446
+ wheel_metadata = [
447
+ 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version),
448
+ 'Generator: distlib %s' % __version__,
449
+ 'Root-Is-Purelib: %s' % is_pure,
450
+ ]
451
+ for pyver, abi, arch in self.tags:
452
+ wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch))
453
+ p = os.path.join(distinfo, 'WHEEL')
454
+ with open(p, 'w') as f:
455
+ f.write('\n'.join(wheel_metadata))
456
+ ap = to_posix(os.path.join(info_dir, 'WHEEL'))
457
+ archive_paths.append((ap, p))
458
+
459
+ # sort the entries by archive path. Not needed by any spec, but it
460
+ # keeps the archive listing and RECORD tidier than they would otherwise
461
+ # be. Use the number of path segments to keep directory entries together,
462
+ # and keep the dist-info stuff at the end.
463
+ def sorter(t):
464
+ ap = t[0]
465
+ n = ap.count('/')
466
+ if '.dist-info' in ap:
467
+ n += 10000
468
+ return (n, ap)
469
+ archive_paths = sorted(archive_paths, key=sorter)
470
+
471
+ # Now, at last, RECORD.
472
+ # Paths in here are archive paths - nothing else makes sense.
473
+ self.write_records((distinfo, info_dir), libdir, archive_paths)
474
+ # Now, ready to build the zip file
475
+ pathname = os.path.join(self.dirname, self.filename)
476
+ self.build_zip(pathname, archive_paths)
477
+ return pathname
478
+
479
+ def skip_entry(self, arcname):
480
+ """
481
+ Determine whether an archive entry should be skipped when verifying
482
+ or installing.
483
+ """
484
+ # The signature file won't be in RECORD,
485
+ # and we don't currently don't do anything with it
486
+ # We also skip directories, as they won't be in RECORD
487
+ # either. See:
488
+ #
489
+ # https://github.com/pypa/wheel/issues/294
490
+ # https://github.com/pypa/wheel/issues/287
491
+ # https://github.com/pypa/wheel/pull/289
492
+ #
493
+ return arcname.endswith(('/', '/RECORD.jws'))
494
+
495
+ def install(self, paths, maker, **kwargs):
496
+ """
497
+ Install a wheel to the specified paths. If kwarg ``warner`` is
498
+ specified, it should be a callable, which will be called with two
499
+ tuples indicating the wheel version of this software and the wheel
500
+ version in the file, if there is a discrepancy in the versions.
501
+ This can be used to issue any warnings to raise any exceptions.
502
+ If kwarg ``lib_only`` is True, only the purelib/platlib files are
503
+ installed, and the headers, scripts, data and dist-info metadata are
504
+ not written. If kwarg ``bytecode_hashed_invalidation`` is True, written
505
+ bytecode will try to use file-hash based invalidation (PEP-552) on
506
+ supported interpreter versions (CPython 2.7+).
507
+
508
+ The return value is a :class:`InstalledDistribution` instance unless
509
+ ``options.lib_only`` is True, in which case the return value is ``None``.
510
+ """
511
+
512
+ dry_run = maker.dry_run
513
+ warner = kwargs.get('warner')
514
+ lib_only = kwargs.get('lib_only', False)
515
+ bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', False)
516
+
517
+ pathname = os.path.join(self.dirname, self.filename)
518
+ name_ver = '%s-%s' % (self.name, self.version)
519
+ data_dir = '%s.data' % name_ver
520
+ info_dir = '%s.dist-info' % name_ver
521
+
522
+ metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME)
523
+ wheel_metadata_name = posixpath.join(info_dir, 'WHEEL')
524
+ record_name = posixpath.join(info_dir, 'RECORD')
525
+
526
+ wrapper = codecs.getreader('utf-8')
527
+
528
+ with ZipFile(pathname, 'r') as zf:
529
+ with zf.open(wheel_metadata_name) as bwf:
530
+ wf = wrapper(bwf)
531
+ message = message_from_file(wf)
532
+ wv = message['Wheel-Version'].split('.', 1)
533
+ file_version = tuple([int(i) for i in wv])
534
+ if (file_version != self.wheel_version) and warner:
535
+ warner(self.wheel_version, file_version)
536
+
537
+ if message['Root-Is-Purelib'] == 'true':
538
+ libdir = paths['purelib']
539
+ else:
540
+ libdir = paths['platlib']
541
+
542
+ records = {}
543
+ with zf.open(record_name) as bf:
544
+ with CSVReader(stream=bf) as reader:
545
+ for row in reader:
546
+ p = row[0]
547
+ records[p] = row
548
+
549
+ data_pfx = posixpath.join(data_dir, '')
550
+ info_pfx = posixpath.join(info_dir, '')
551
+ script_pfx = posixpath.join(data_dir, 'scripts', '')
552
+
553
+ # make a new instance rather than a copy of maker's,
554
+ # as we mutate it
555
+ fileop = FileOperator(dry_run=dry_run)
556
+ fileop.record = True # so we can rollback if needed
557
+
558
+ bc = not sys.dont_write_bytecode # Double negatives. Lovely!
559
+
560
+ outfiles = [] # for RECORD writing
561
+
562
+ # for script copying/shebang processing
563
+ workdir = tempfile.mkdtemp()
564
+ # set target dir later
565
+ # we default add_launchers to False, as the
566
+ # Python Launcher should be used instead
567
+ maker.source_dir = workdir
568
+ maker.target_dir = None
569
+ try:
570
+ for zinfo in zf.infolist():
571
+ arcname = zinfo.filename
572
+ if isinstance(arcname, text_type):
573
+ u_arcname = arcname
574
+ else:
575
+ u_arcname = arcname.decode('utf-8')
576
+ if self.skip_entry(u_arcname):
577
+ continue
578
+ row = records[u_arcname]
579
+ if row[2] and str(zinfo.file_size) != row[2]:
580
+ raise DistlibException('size mismatch for '
581
+ '%s' % u_arcname)
582
+ if row[1]:
583
+ kind, value = row[1].split('=', 1)
584
+ with zf.open(arcname) as bf:
585
+ data = bf.read()
586
+ _, digest = self.get_hash(data, kind)
587
+ if digest != value:
588
+ raise DistlibException('digest mismatch for '
589
+ '%s' % arcname)
590
+
591
+ if lib_only and u_arcname.startswith((info_pfx, data_pfx)):
592
+ logger.debug('lib_only: skipping %s', u_arcname)
593
+ continue
594
+ is_script = (u_arcname.startswith(script_pfx)
595
+ and not u_arcname.endswith('.exe'))
596
+
597
+ if u_arcname.startswith(data_pfx):
598
+ _, where, rp = u_arcname.split('/', 2)
599
+ outfile = os.path.join(paths[where], convert_path(rp))
600
+ else:
601
+ # meant for site-packages.
602
+ if u_arcname in (wheel_metadata_name, record_name):
603
+ continue
604
+ outfile = os.path.join(libdir, convert_path(u_arcname))
605
+ if not is_script:
606
+ with zf.open(arcname) as bf:
607
+ fileop.copy_stream(bf, outfile)
608
+ # Issue #147: permission bits aren't preserved. Using
609
+ # zf.extract(zinfo, libdir) should have worked, but didn't,
610
+ # see https://www.thetopsites.net/article/53834422.shtml
611
+ # So ... manually preserve permission bits as given in zinfo
612
+ if os.name == 'posix':
613
+ # just set the normal permission bits
614
+ os.chmod(outfile, (zinfo.external_attr >> 16) & 0x1FF)
615
+ outfiles.append(outfile)
616
+ # Double check the digest of the written file
617
+ if not dry_run and row[1]:
618
+ with open(outfile, 'rb') as bf:
619
+ data = bf.read()
620
+ _, newdigest = self.get_hash(data, kind)
621
+ if newdigest != digest:
622
+ raise DistlibException('digest mismatch '
623
+ 'on write for '
624
+ '%s' % outfile)
625
+ if bc and outfile.endswith('.py'):
626
+ try:
627
+ pyc = fileop.byte_compile(outfile,
628
+ hashed_invalidation=bc_hashed_invalidation)
629
+ outfiles.append(pyc)
630
+ except Exception:
631
+ # Don't give up if byte-compilation fails,
632
+ # but log it and perhaps warn the user
633
+ logger.warning('Byte-compilation failed',
634
+ exc_info=True)
635
+ else:
636
+ fn = os.path.basename(convert_path(arcname))
637
+ workname = os.path.join(workdir, fn)
638
+ with zf.open(arcname) as bf:
639
+ fileop.copy_stream(bf, workname)
640
+
641
+ dn, fn = os.path.split(outfile)
642
+ maker.target_dir = dn
643
+ filenames = maker.make(fn)
644
+ fileop.set_executable_mode(filenames)
645
+ outfiles.extend(filenames)
646
+
647
+ if lib_only:
648
+ logger.debug('lib_only: returning None')
649
+ dist = None
650
+ else:
651
+ # Generate scripts
652
+
653
+ # Try to get pydist.json so we can see if there are
654
+ # any commands to generate. If this fails (e.g. because
655
+ # of a legacy wheel), log a warning but don't give up.
656
+ commands = None
657
+ file_version = self.info['Wheel-Version']
658
+ if file_version == '1.0':
659
+ # Use legacy info
660
+ ep = posixpath.join(info_dir, 'entry_points.txt')
661
+ try:
662
+ with zf.open(ep) as bwf:
663
+ epdata = read_exports(bwf)
664
+ commands = {}
665
+ for key in ('console', 'gui'):
666
+ k = '%s_scripts' % key
667
+ if k in epdata:
668
+ commands['wrap_%s' % key] = d = {}
669
+ for v in epdata[k].values():
670
+ s = '%s:%s' % (v.prefix, v.suffix)
671
+ if v.flags:
672
+ s += ' [%s]' % ','.join(v.flags)
673
+ d[v.name] = s
674
+ except Exception:
675
+ logger.warning('Unable to read legacy script '
676
+ 'metadata, so cannot generate '
677
+ 'scripts')
678
+ else:
679
+ try:
680
+ with zf.open(metadata_name) as bwf:
681
+ wf = wrapper(bwf)
682
+ commands = json.load(wf).get('extensions')
683
+ if commands:
684
+ commands = commands.get('python.commands')
685
+ except Exception:
686
+ logger.warning('Unable to read JSON metadata, so '
687
+ 'cannot generate scripts')
688
+ if commands:
689
+ console_scripts = commands.get('wrap_console', {})
690
+ gui_scripts = commands.get('wrap_gui', {})
691
+ if console_scripts or gui_scripts:
692
+ script_dir = paths.get('scripts', '')
693
+ if not os.path.isdir(script_dir):
694
+ raise ValueError('Valid script path not '
695
+ 'specified')
696
+ maker.target_dir = script_dir
697
+ for k, v in console_scripts.items():
698
+ script = '%s = %s' % (k, v)
699
+ filenames = maker.make(script)
700
+ fileop.set_executable_mode(filenames)
701
+
702
+ if gui_scripts:
703
+ options = {'gui': True }
704
+ for k, v in gui_scripts.items():
705
+ script = '%s = %s' % (k, v)
706
+ filenames = maker.make(script, options)
707
+ fileop.set_executable_mode(filenames)
708
+
709
+ p = os.path.join(libdir, info_dir)
710
+ dist = InstalledDistribution(p)
711
+
712
+ # Write SHARED
713
+ paths = dict(paths) # don't change passed in dict
714
+ del paths['purelib']
715
+ del paths['platlib']
716
+ paths['lib'] = libdir
717
+ p = dist.write_shared_locations(paths, dry_run)
718
+ if p:
719
+ outfiles.append(p)
720
+
721
+ # Write RECORD
722
+ dist.write_installed_files(outfiles, paths['prefix'],
723
+ dry_run)
724
+ return dist
725
+ except Exception: # pragma: no cover
726
+ logger.exception('installation failed.')
727
+ fileop.rollback()
728
+ raise
729
+ finally:
730
+ shutil.rmtree(workdir)
731
+
732
+ def _get_dylib_cache(self):
733
+ global cache
734
+ if cache is None:
735
+ # Use native string to avoid issues on 2.x: see Python #20140.
736
+ base = os.path.join(get_cache_base(), str('dylib-cache'),
737
+ '%s.%s' % sys.version_info[:2])
738
+ cache = Cache(base)
739
+ return cache
740
+
741
+ def _get_extensions(self):
742
+ pathname = os.path.join(self.dirname, self.filename)
743
+ name_ver = '%s-%s' % (self.name, self.version)
744
+ info_dir = '%s.dist-info' % name_ver
745
+ arcname = posixpath.join(info_dir, 'EXTENSIONS')
746
+ wrapper = codecs.getreader('utf-8')
747
+ result = []
748
+ with ZipFile(pathname, 'r') as zf:
749
+ try:
750
+ with zf.open(arcname) as bf:
751
+ wf = wrapper(bf)
752
+ extensions = json.load(wf)
753
+ cache = self._get_dylib_cache()
754
+ prefix = cache.prefix_to_dir(pathname)
755
+ cache_base = os.path.join(cache.base, prefix)
756
+ if not os.path.isdir(cache_base):
757
+ os.makedirs(cache_base)
758
+ for name, relpath in extensions.items():
759
+ dest = os.path.join(cache_base, convert_path(relpath))
760
+ if not os.path.exists(dest):
761
+ extract = True
762
+ else:
763
+ file_time = os.stat(dest).st_mtime
764
+ file_time = datetime.datetime.fromtimestamp(file_time)
765
+ info = zf.getinfo(relpath)
766
+ wheel_time = datetime.datetime(*info.date_time)
767
+ extract = wheel_time > file_time
768
+ if extract:
769
+ zf.extract(relpath, cache_base)
770
+ result.append((name, dest))
771
+ except KeyError:
772
+ pass
773
+ return result
774
+
775
+ def is_compatible(self):
776
+ """
777
+ Determine if a wheel is compatible with the running system.
778
+ """
779
+ return is_compatible(self)
780
+
781
+ def is_mountable(self):
782
+ """
783
+ Determine if a wheel is asserted as mountable by its metadata.
784
+ """
785
+ return True # for now - metadata details TBD
786
+
787
+ def mount(self, append=False):
788
+ pathname = os.path.abspath(os.path.join(self.dirname, self.filename))
789
+ if not self.is_compatible():
790
+ msg = 'Wheel %s not compatible with this Python.' % pathname
791
+ raise DistlibException(msg)
792
+ if not self.is_mountable():
793
+ msg = 'Wheel %s is marked as not mountable.' % pathname
794
+ raise DistlibException(msg)
795
+ if pathname in sys.path:
796
+ logger.debug('%s already in path', pathname)
797
+ else:
798
+ if append:
799
+ sys.path.append(pathname)
800
+ else:
801
+ sys.path.insert(0, pathname)
802
+ extensions = self._get_extensions()
803
+ if extensions:
804
+ if _hook not in sys.meta_path:
805
+ sys.meta_path.append(_hook)
806
+ _hook.add(pathname, extensions)
807
+
808
+ def unmount(self):
809
+ pathname = os.path.abspath(os.path.join(self.dirname, self.filename))
810
+ if pathname not in sys.path:
811
+ logger.debug('%s not in path', pathname)
812
+ else:
813
+ sys.path.remove(pathname)
814
+ if pathname in _hook.impure_wheels:
815
+ _hook.remove(pathname)
816
+ if not _hook.impure_wheels:
817
+ if _hook in sys.meta_path:
818
+ sys.meta_path.remove(_hook)
819
+
820
+ def verify(self):
821
+ pathname = os.path.join(self.dirname, self.filename)
822
+ name_ver = '%s-%s' % (self.name, self.version)
823
+ data_dir = '%s.data' % name_ver
824
+ info_dir = '%s.dist-info' % name_ver
825
+
826
+ metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME)
827
+ wheel_metadata_name = posixpath.join(info_dir, 'WHEEL')
828
+ record_name = posixpath.join(info_dir, 'RECORD')
829
+
830
+ wrapper = codecs.getreader('utf-8')
831
+
832
+ with ZipFile(pathname, 'r') as zf:
833
+ with zf.open(wheel_metadata_name) as bwf:
834
+ wf = wrapper(bwf)
835
+ message = message_from_file(wf)
836
+ wv = message['Wheel-Version'].split('.', 1)
837
+ file_version = tuple([int(i) for i in wv])
838
+ # TODO version verification
839
+
840
+ records = {}
841
+ with zf.open(record_name) as bf:
842
+ with CSVReader(stream=bf) as reader:
843
+ for row in reader:
844
+ p = row[0]
845
+ records[p] = row
846
+
847
+ for zinfo in zf.infolist():
848
+ arcname = zinfo.filename
849
+ if isinstance(arcname, text_type):
850
+ u_arcname = arcname
851
+ else:
852
+ u_arcname = arcname.decode('utf-8')
853
+ # See issue #115: some wheels have .. in their entries, but
854
+ # in the filename ... e.g. __main__..py ! So the check is
855
+ # updated to look for .. in the directory portions
856
+ p = u_arcname.split('/')
857
+ if '..' in p:
858
+ raise DistlibException('invalid entry in '
859
+ 'wheel: %r' % u_arcname)
860
+
861
+ if self.skip_entry(u_arcname):
862
+ continue
863
+ row = records[u_arcname]
864
+ if row[2] and str(zinfo.file_size) != row[2]:
865
+ raise DistlibException('size mismatch for '
866
+ '%s' % u_arcname)
867
+ if row[1]:
868
+ kind, value = row[1].split('=', 1)
869
+ with zf.open(arcname) as bf:
870
+ data = bf.read()
871
+ _, digest = self.get_hash(data, kind)
872
+ if digest != value:
873
+ raise DistlibException('digest mismatch for '
874
+ '%s' % arcname)
875
+
876
+ def update(self, modifier, dest_dir=None, **kwargs):
877
+ """
878
+ Update the contents of a wheel in a generic way. The modifier should
879
+ be a callable which expects a dictionary argument: its keys are
880
+ archive-entry paths, and its values are absolute filesystem paths
881
+ where the contents the corresponding archive entries can be found. The
882
+ modifier is free to change the contents of the files pointed to, add
883
+ new entries and remove entries, before returning. This method will
884
+ extract the entire contents of the wheel to a temporary location, call
885
+ the modifier, and then use the passed (and possibly updated)
886
+ dictionary to write a new wheel. If ``dest_dir`` is specified, the new
887
+ wheel is written there -- otherwise, the original wheel is overwritten.
888
+
889
+ The modifier should return True if it updated the wheel, else False.
890
+ This method returns the same value the modifier returns.
891
+ """
892
+
893
+ def get_version(path_map, info_dir):
894
+ version = path = None
895
+ key = '%s/%s' % (info_dir, LEGACY_METADATA_FILENAME)
896
+ if key not in path_map:
897
+ key = '%s/PKG-INFO' % info_dir
898
+ if key in path_map:
899
+ path = path_map[key]
900
+ version = Metadata(path=path).version
901
+ return version, path
902
+
903
+ def update_version(version, path):
904
+ updated = None
905
+ try:
906
+ v = NormalizedVersion(version)
907
+ i = version.find('-')
908
+ if i < 0:
909
+ updated = '%s+1' % version
910
+ else:
911
+ parts = [int(s) for s in version[i + 1:].split('.')]
912
+ parts[-1] += 1
913
+ updated = '%s+%s' % (version[:i],
914
+ '.'.join(str(i) for i in parts))
915
+ except UnsupportedVersionError:
916
+ logger.debug('Cannot update non-compliant (PEP-440) '
917
+ 'version %r', version)
918
+ if updated:
919
+ md = Metadata(path=path)
920
+ md.version = updated
921
+ legacy = path.endswith(LEGACY_METADATA_FILENAME)
922
+ md.write(path=path, legacy=legacy)
923
+ logger.debug('Version updated from %r to %r', version,
924
+ updated)
925
+
926
+ pathname = os.path.join(self.dirname, self.filename)
927
+ name_ver = '%s-%s' % (self.name, self.version)
928
+ info_dir = '%s.dist-info' % name_ver
929
+ record_name = posixpath.join(info_dir, 'RECORD')
930
+ with tempdir() as workdir:
931
+ with ZipFile(pathname, 'r') as zf:
932
+ path_map = {}
933
+ for zinfo in zf.infolist():
934
+ arcname = zinfo.filename
935
+ if isinstance(arcname, text_type):
936
+ u_arcname = arcname
937
+ else:
938
+ u_arcname = arcname.decode('utf-8')
939
+ if u_arcname == record_name:
940
+ continue
941
+ if '..' in u_arcname:
942
+ raise DistlibException('invalid entry in '
943
+ 'wheel: %r' % u_arcname)
944
+ zf.extract(zinfo, workdir)
945
+ path = os.path.join(workdir, convert_path(u_arcname))
946
+ path_map[u_arcname] = path
947
+
948
+ # Remember the version.
949
+ original_version, _ = get_version(path_map, info_dir)
950
+ # Files extracted. Call the modifier.
951
+ modified = modifier(path_map, **kwargs)
952
+ if modified:
953
+ # Something changed - need to build a new wheel.
954
+ current_version, path = get_version(path_map, info_dir)
955
+ if current_version and (current_version == original_version):
956
+ # Add or update local version to signify changes.
957
+ update_version(current_version, path)
958
+ # Decide where the new wheel goes.
959
+ if dest_dir is None:
960
+ fd, newpath = tempfile.mkstemp(suffix='.whl',
961
+ prefix='wheel-update-',
962
+ dir=workdir)
963
+ os.close(fd)
964
+ else:
965
+ if not os.path.isdir(dest_dir):
966
+ raise DistlibException('Not a directory: %r' % dest_dir)
967
+ newpath = os.path.join(dest_dir, self.filename)
968
+ archive_paths = list(path_map.items())
969
+ distinfo = os.path.join(workdir, info_dir)
970
+ info = distinfo, info_dir
971
+ self.write_records(info, workdir, archive_paths)
972
+ self.build_zip(newpath, archive_paths)
973
+ if dest_dir is None:
974
+ shutil.copyfile(newpath, pathname)
975
+ return modified
976
+
977
+ def _get_glibc_version():
978
+ import platform
979
+ ver = platform.libc_ver()
980
+ result = []
981
+ if ver[0] == 'glibc':
982
+ for s in ver[1].split('.'):
983
+ result.append(int(s) if s.isdigit() else 0)
984
+ result = tuple(result)
985
+ return result
986
+
987
+ def compatible_tags():
988
+ """
989
+ Return (pyver, abi, arch) tuples compatible with this Python.
990
+ """
991
+ versions = [VER_SUFFIX]
992
+ major = VER_SUFFIX[0]
993
+ for minor in range(sys.version_info[1] - 1, - 1, -1):
994
+ versions.append(''.join([major, str(minor)]))
995
+
996
+ abis = []
997
+ for suffix in _get_suffixes():
998
+ if suffix.startswith('.abi'):
999
+ abis.append(suffix.split('.', 2)[1])
1000
+ abis.sort()
1001
+ if ABI != 'none':
1002
+ abis.insert(0, ABI)
1003
+ abis.append('none')
1004
+ result = []
1005
+
1006
+ arches = [ARCH]
1007
+ if sys.platform == 'darwin':
1008
+ m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH)
1009
+ if m:
1010
+ name, major, minor, arch = m.groups()
1011
+ minor = int(minor)
1012
+ matches = [arch]
1013
+ if arch in ('i386', 'ppc'):
1014
+ matches.append('fat')
1015
+ if arch in ('i386', 'ppc', 'x86_64'):
1016
+ matches.append('fat3')
1017
+ if arch in ('ppc64', 'x86_64'):
1018
+ matches.append('fat64')
1019
+ if arch in ('i386', 'x86_64'):
1020
+ matches.append('intel')
1021
+ if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'):
1022
+ matches.append('universal')
1023
+ while minor >= 0:
1024
+ for match in matches:
1025
+ s = '%s_%s_%s_%s' % (name, major, minor, match)
1026
+ if s != ARCH: # already there
1027
+ arches.append(s)
1028
+ minor -= 1
1029
+
1030
+ # Most specific - our Python version, ABI and arch
1031
+ for abi in abis:
1032
+ for arch in arches:
1033
+ result.append((''.join((IMP_PREFIX, versions[0])), abi, arch))
1034
+ # manylinux
1035
+ if abi != 'none' and sys.platform.startswith('linux'):
1036
+ arch = arch.replace('linux_', '')
1037
+ parts = _get_glibc_version()
1038
+ if len(parts) == 2:
1039
+ if parts >= (2, 5):
1040
+ result.append((''.join((IMP_PREFIX, versions[0])), abi,
1041
+ 'manylinux1_%s' % arch))
1042
+ if parts >= (2, 12):
1043
+ result.append((''.join((IMP_PREFIX, versions[0])), abi,
1044
+ 'manylinux2010_%s' % arch))
1045
+ if parts >= (2, 17):
1046
+ result.append((''.join((IMP_PREFIX, versions[0])), abi,
1047
+ 'manylinux2014_%s' % arch))
1048
+ result.append((''.join((IMP_PREFIX, versions[0])), abi,
1049
+ 'manylinux_%s_%s_%s' % (parts[0], parts[1],
1050
+ arch)))
1051
+
1052
+ # where no ABI / arch dependency, but IMP_PREFIX dependency
1053
+ for i, version in enumerate(versions):
1054
+ result.append((''.join((IMP_PREFIX, version)), 'none', 'any'))
1055
+ if i == 0:
1056
+ result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any'))
1057
+
1058
+ # no IMP_PREFIX, ABI or arch dependency
1059
+ for i, version in enumerate(versions):
1060
+ result.append((''.join(('py', version)), 'none', 'any'))
1061
+ if i == 0:
1062
+ result.append((''.join(('py', version[0])), 'none', 'any'))
1063
+
1064
+ return set(result)
1065
+
1066
+
1067
+ COMPATIBLE_TAGS = compatible_tags()
1068
+
1069
+ del compatible_tags
1070
+
1071
+
1072
+ def is_compatible(wheel, tags=None):
1073
+ if not isinstance(wheel, Wheel):
1074
+ wheel = Wheel(wheel) # assume it's a filename
1075
+ result = False
1076
+ if tags is None:
1077
+ tags = COMPATIBLE_TAGS
1078
+ for ver, abi, arch in tags:
1079
+ if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch:
1080
+ result = True
1081
+ break
1082
+ return result