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,804 @@
1
+ """
2
+ Counterfactual Explainer pour XPLIA
3
+ ==================================
4
+
5
+ Ce module implémente l'explainer basé sur les exemples contrefactuels
6
+ dans le framework XPLIA. Cette approche génère des exemples alternatifs
7
+ qui auraient conduit à une prédiction différente.
8
+ """
9
+
10
+ import logging
11
+ from typing import Any, Dict, List, Optional, Tuple, Union
12
+
13
+ import numpy as np
14
+ import pandas as pd
15
+
16
+ from ..core.base import (AudienceLevel, ExplainerBase, ExplainabilityMethod,
17
+ ExplanationResult, FeatureImportance, ModelMetadata)
18
+ from ..core.registry import register_explainer
19
+
20
+
21
+ @register_explainer
22
+ class CounterfactualExplainer(ExplainerBase):
23
+ """
24
+ Explainer basé sur les exemples contrefactuels.
25
+
26
+ Cette classe génère des exemples contrefactuels qui montrent comment
27
+ modifier les entrées pour obtenir une prédiction différente du modèle.
28
+
29
+ Caractéristiques principales:
30
+ - Génération d'exemples contrefactuels pour des instances spécifiques
31
+ - Support de différents algorithmes de génération de contrefactuels
32
+ - Contraintes personnalisables sur les caractéristiques modifiables
33
+ - Visualisations adaptées au niveau d'audience
34
+ """
35
+
36
+ def __init__(self, model, **kwargs):
37
+ """
38
+ Initialise l'explainer contrefactuel.
39
+
40
+ Args:
41
+ model: Modèle à expliquer
42
+ **kwargs: Paramètres additionnels
43
+ feature_names: Noms des caractéristiques
44
+ categorical_features: Indices ou noms des caractéristiques catégorielles
45
+ continuous_features: Indices ou noms des caractéristiques continues
46
+ method: Méthode de génération ('dice', 'genetic', 'optimization')
47
+ target_class: Classe cible pour les contrefactuels (None = opposée à la prédiction)
48
+ feature_ranges: Dictionnaire des plages valides pour chaque caractéristique
49
+ proximity_weight: Poids pour la proximité aux données d'origine
50
+ sparsity_weight: Poids pour la parcimonie (moins de changements)
51
+ diversity_weight: Poids pour la diversité des contrefactuels
52
+ """
53
+ super().__init__(model, **kwargs)
54
+ self._method = ExplainabilityMethod.COUNTERFACTUAL
55
+
56
+ # Paramètres
57
+ self._feature_names = kwargs.get('feature_names', None)
58
+ self._categorical_features = kwargs.get('categorical_features', [])
59
+ self._continuous_features = kwargs.get('continuous_features', [])
60
+ self._counterfactual_method = kwargs.get('method', 'dice') # 'dice', 'genetic', 'optimization'
61
+ self._target_class = kwargs.get('target_class', None)
62
+ self._feature_ranges = kwargs.get('feature_ranges', {})
63
+ self._proximity_weight = kwargs.get('proximity_weight', 0.5)
64
+ self._sparsity_weight = kwargs.get('sparsity_weight', 0.2)
65
+ self._diversity_weight = kwargs.get('diversity_weight', 0.3)
66
+
67
+ # Explainer spécifique
68
+ self._cf_explainer = None
69
+
70
+ # Métadonnées du modèle
71
+ self._metadata = None
72
+
73
+ # Logger
74
+ self._logger = logging.getLogger(__name__)
75
+
76
+ def explain_instance(self, instance, X_background=None, **kwargs) -> ExplanationResult:
77
+ """
78
+ Génère des explications contrefactuelles pour une instance spécifique.
79
+
80
+ Args:
81
+ instance: Instance à expliquer (array, liste, dict ou pandas.Series)
82
+ X_background: Données d'arrière-plan pour contraindre les contrefactuels (optionnel)
83
+ **kwargs: Paramètres additionnels
84
+ desired_class: Classe désirée pour le contrefactuel (par défaut: opposée à la prédiction)
85
+ num_counterfactuals: Nombre de contrefactuels à générer
86
+ feature_weights: Poids pour chaque caractéristique (importance du changement)
87
+ immutable_features: Caractéristiques qui ne peuvent pas être modifiées
88
+ audience_level: Niveau d'audience (TECHNICAL, BUSINESS, PUBLIC)
89
+
90
+ Returns:
91
+ ExplanationResult: Résultat standardisé de l'explication
92
+ """
93
+ # Paramètres
94
+ audience_level = kwargs.get('audience_level', AudienceLevel.TECHNICAL)
95
+ desired_class = kwargs.get('desired_class', self._target_class)
96
+ num_counterfactuals = kwargs.get('num_counterfactuals', 3)
97
+ feature_weights = kwargs.get('feature_weights', None)
98
+ immutable_features = kwargs.get('immutable_features', [])
99
+
100
+ # Convertir l'instance en format approprié
101
+ if isinstance(instance, dict):
102
+ # Convertir dict en array
103
+ feature_names = list(instance.keys())
104
+ instance_array = np.array([instance[f] for f in feature_names]).reshape(1, -1)
105
+ elif isinstance(instance, pd.Series):
106
+ feature_names = instance.index.tolist()
107
+ instance_array = instance.values.reshape(1, -1)
108
+ elif isinstance(instance, (list, np.ndarray)):
109
+ instance_array = np.array(instance).reshape(1, -1)
110
+ feature_names = kwargs.get('feature_names', self._feature_names) or \
111
+ [f"feature_{i}" for i in range(instance_array.shape[1])]
112
+ else:
113
+ raise ValueError("Format d'instance non supporté. Utilisez un dict, pandas.Series, liste ou numpy.ndarray.")
114
+
115
+ # Convertir les données d'arrière-plan en format approprié
116
+ if X_background is not None:
117
+ if isinstance(X_background, pd.DataFrame):
118
+ X_values = X_background.values
119
+ else:
120
+ X_values = np.array(X_background)
121
+ else:
122
+ X_values = None
123
+
124
+ # Tracer l'action
125
+ self.add_audit_record("explain_instance", {
126
+ "n_features": len(feature_names),
127
+ "audience_level": audience_level.value if isinstance(audience_level, AudienceLevel) else audience_level,
128
+ "counterfactual_method": self._counterfactual_method,
129
+ "num_counterfactuals": num_counterfactuals
130
+ })
131
+
132
+ try:
133
+ # Initialiser l'explainer contrefactuel si nécessaire
134
+ if self._cf_explainer is None:
135
+ self._initialize_cf_explainer(feature_names, X_values)
136
+
137
+ # Générer les contrefactuels
138
+ counterfactuals, metadata = self._generate_counterfactuals(
139
+ instance_array,
140
+ feature_names,
141
+ desired_class,
142
+ num_counterfactuals,
143
+ feature_weights,
144
+ immutable_features
145
+ )
146
+
147
+ # Calculer les changements de caractéristiques
148
+ feature_changes = self._calculate_feature_changes(instance_array[0], counterfactuals, feature_names)
149
+
150
+ # Extraire les métadonnées du modèle
151
+ if not self._metadata:
152
+ self._extract_metadata()
153
+
154
+ # Créer le résultat d'explication
155
+ result = ExplanationResult(
156
+ method=ExplainabilityMethod.COUNTERFACTUAL,
157
+ model_metadata=self._metadata,
158
+ feature_importances=self._convert_changes_to_importances(feature_changes),
159
+ raw_explanation={
160
+ "instance": instance_array[0].tolist(),
161
+ "counterfactuals": counterfactuals.tolist() if isinstance(counterfactuals, np.ndarray) else counterfactuals,
162
+ "feature_names": feature_names,
163
+ "feature_changes": feature_changes,
164
+ "metadata": metadata
165
+ },
166
+ audience_level=audience_level
167
+ )
168
+
169
+ return result
170
+
171
+ except Exception as e:
172
+ self._logger.error(f"Erreur lors de la génération des contrefactuels: {str(e)}")
173
+ raise RuntimeError(f"Échec de l'explication contrefactuelle: {str(e)}")
174
+
175
+ def explain(self, X, y=None, **kwargs) -> ExplanationResult:
176
+ """
177
+ Génère des explications contrefactuelles pour un ensemble de données.
178
+ Pour les explications contrefactuelles, cette méthode sélectionne un échantillon
179
+ représentatif et génère des contrefactuels pour chaque instance.
180
+
181
+ Args:
182
+ X: Données d'entrée à expliquer
183
+ y: Valeurs cibles réelles (optionnel)
184
+ **kwargs: Paramètres additionnels
185
+ max_instances: Nombre maximum d'instances à expliquer
186
+ sampling_strategy: Stratégie d'échantillonnage ('random', 'stratified', 'kmeans')
187
+
188
+ Returns:
189
+ ExplanationResult: Résultat standardisé de l'explication
190
+ """
191
+ # Paramètres
192
+ audience_level = kwargs.get('audience_level', AudienceLevel.TECHNICAL)
193
+ max_instances = kwargs.get('max_instances', 5)
194
+ sampling_strategy = kwargs.get('sampling_strategy', 'random')
195
+
196
+ # Conversion des données en format approprié
197
+ if isinstance(X, pd.DataFrame):
198
+ feature_names = X.columns.tolist()
199
+ X_values = X.values
200
+ else:
201
+ X_values = np.array(X)
202
+ feature_names = kwargs.get('feature_names', self._feature_names) or \
203
+ [f"feature_{i}" for i in range(X_values.shape[1])]
204
+
205
+ # Échantillonner des instances représentatives
206
+ sampled_indices = self._sample_instances(X_values, y, max_instances, sampling_strategy)
207
+ sampled_instances = X_values[sampled_indices]
208
+
209
+ # Tracer l'action
210
+ self.add_audit_record("explain", {
211
+ "n_samples": X_values.shape[0],
212
+ "n_features": X_values.shape[1],
213
+ "audience_level": audience_level.value if isinstance(audience_level, AudienceLevel) else audience_level,
214
+ "max_instances": max_instances,
215
+ "sampling_strategy": sampling_strategy
216
+ })
217
+
218
+ try:
219
+ # Générer des contrefactuels pour chaque instance échantillonnée
220
+ all_counterfactuals = []
221
+ all_feature_changes = []
222
+
223
+ for instance in sampled_instances:
224
+ # Utiliser explain_instance pour chaque instance
225
+ instance_result = self.explain_instance(
226
+ instance,
227
+ X_background=X_values,
228
+ feature_names=feature_names,
229
+ audience_level=audience_level,
230
+ **kwargs
231
+ )
232
+
233
+ # Collecter les résultats
234
+ all_counterfactuals.append(instance_result.raw_explanation["counterfactuals"])
235
+ all_feature_changes.append(instance_result.raw_explanation["feature_changes"])
236
+
237
+ # Agréger les changements de caractéristiques
238
+ aggregated_changes = self._aggregate_feature_changes(all_feature_changes, feature_names)
239
+
240
+ # Extraire les métadonnées du modèle
241
+ if not self._metadata:
242
+ self._extract_metadata()
243
+
244
+ # Créer le résultat d'explication
245
+ result = ExplanationResult(
246
+ method=ExplainabilityMethod.COUNTERFACTUAL,
247
+ model_metadata=self._metadata,
248
+ feature_importances=self._convert_changes_to_importances(aggregated_changes),
249
+ raw_explanation={
250
+ "sampled_instances": sampled_instances.tolist(),
251
+ "sampled_indices": sampled_indices.tolist(),
252
+ "all_counterfactuals": all_counterfactuals,
253
+ "all_feature_changes": all_feature_changes,
254
+ "aggregated_changes": aggregated_changes,
255
+ "feature_names": feature_names
256
+ },
257
+ audience_level=audience_level
258
+ )
259
+
260
+ return result
261
+
262
+ except Exception as e:
263
+ self._logger.error(f"Erreur lors de la génération des contrefactuels: {str(e)}")
264
+ raise RuntimeError(f"Échec de l'explication contrefactuelle: {str(e)}")
265
+
266
+ def _initialize_cf_explainer(self, feature_names, X_background=None):
267
+ """
268
+ Initialise l'explainer contrefactuel selon la méthode choisie.
269
+
270
+ Args:
271
+ feature_names: Noms des caractéristiques
272
+ X_background: Données d'arrière-plan pour contraindre les contrefactuels
273
+ """
274
+ self._feature_names = feature_names
275
+
276
+ if self._counterfactual_method == 'dice':
277
+ try:
278
+ import dice_ml
279
+ except ImportError:
280
+ raise ImportError("Le package DiCE est requis pour cette méthode. "
281
+ "Installez-le avec 'pip install dice-ml'.")
282
+
283
+ # L'initialisation complète sera faite lors de la première génération de contrefactuels
284
+ # car elle nécessite des données d'arrière-plan et des informations sur le modèle
285
+ self._cf_explainer = 'dice'
286
+
287
+ elif self._counterfactual_method == 'genetic':
288
+ # Implémentation d'un algorithme génétique personnalisé
289
+ self._cf_explainer = 'genetic'
290
+
291
+ elif self._counterfactual_method == 'optimization':
292
+ # Implémentation basée sur l'optimisation
293
+ self._cf_explainer = 'optimization'
294
+
295
+ else:
296
+ raise ValueError(f"Méthode contrefactuelle non supportée: {self._counterfactual_method}")
297
+
298
+ def _sample_instances(self, X, y=None, max_instances=5, strategy='random'):
299
+ """
300
+ Échantillonne des instances représentatives à partir des données.
301
+
302
+ Args:
303
+ X: Données d'entrée
304
+ y: Valeurs cibles réelles (optionnel)
305
+ max_instances: Nombre maximum d'instances à sélectionner
306
+ strategy: Stratégie d'échantillonnage ('random', 'stratified', 'kmeans')
307
+
308
+ Returns:
309
+ numpy.ndarray: Indices des instances sélectionnées
310
+ """
311
+ n_samples = X.shape[0]
312
+ max_instances = min(max_instances, n_samples)
313
+
314
+ if strategy == 'random':
315
+ # Échantillonnage aléatoire
316
+ indices = np.random.choice(n_samples, max_instances, replace=False)
317
+
318
+ elif strategy == 'stratified' and y is not None:
319
+ # Échantillonnage stratifié par classe
320
+ try:
321
+ from sklearn.model_selection import StratifiedShuffleSplit
322
+ except ImportError:
323
+ self._logger.warning("scikit-learn est requis pour l'échantillonnage stratifié. "
324
+ "Utilisation de l'échantillonnage aléatoire.")
325
+ return np.random.choice(n_samples, max_instances, replace=False)
326
+
327
+ sss = StratifiedShuffleSplit(n_splits=1, test_size=max_instances/n_samples, random_state=42)
328
+ for _, test_idx in sss.split(X, y):
329
+ indices = test_idx
330
+ if len(indices) > max_instances:
331
+ indices = indices[:max_instances]
332
+ break
333
+
334
+ elif strategy == 'kmeans':
335
+ # Échantillonnage basé sur le clustering k-means
336
+ try:
337
+ from sklearn.cluster import KMeans
338
+ from sklearn.preprocessing import StandardScaler
339
+ except ImportError:
340
+ self._logger.warning("scikit-learn est requis pour l'échantillonnage k-means. "
341
+ "Utilisation de l'échantillonnage aléatoire.")
342
+ return np.random.choice(n_samples, max_instances, replace=False)
343
+
344
+ # Normaliser les données
345
+ scaler = StandardScaler()
346
+ X_scaled = scaler.fit_transform(X)
347
+
348
+ # Appliquer k-means
349
+ kmeans = KMeans(n_clusters=max_instances, random_state=42, n_init=10)
350
+ clusters = kmeans.fit_predict(X_scaled)
351
+
352
+ # Sélectionner l'instance la plus proche de chaque centroide
353
+ indices = []
354
+ for i in range(max_instances):
355
+ cluster_points = np.where(clusters == i)[0]
356
+ if len(cluster_points) > 0:
357
+ # Trouver le point le plus proche du centroide
358
+ centroid = kmeans.cluster_centers_[i]
359
+ distances = np.linalg.norm(X_scaled[cluster_points] - centroid, axis=1)
360
+ closest_idx = cluster_points[np.argmin(distances)]
361
+ indices.append(closest_idx)
362
+
363
+ # Compléter si nécessaire
364
+ if len(indices) < max_instances:
365
+ remaining = np.setdiff1d(np.arange(n_samples), indices)
366
+ additional = np.random.choice(remaining, max_instances - len(indices), replace=False)
367
+ indices = np.concatenate([indices, additional])
368
+ else:
369
+ # Par défaut, échantillonnage aléatoire
370
+ indices = np.random.choice(n_samples, max_instances, replace=False)
371
+
372
+ return indices
373
+
374
+ def _generate_counterfactuals(self, instance, feature_names, desired_class=None,
375
+ num_counterfactuals=3, feature_weights=None, immutable_features=None):
376
+ """
377
+ Génère des exemples contrefactuels pour une instance donnée.
378
+
379
+ Args:
380
+ instance: Instance à expliquer
381
+ feature_names: Noms des caractéristiques
382
+ desired_class: Classe désirée pour le contrefactuel
383
+ num_counterfactuals: Nombre de contrefactuels à générer
384
+ feature_weights: Poids pour chaque caractéristique
385
+ immutable_features: Caractéristiques qui ne peuvent pas être modifiées
386
+
387
+ Returns:
388
+ tuple: (contrefactuels, métadonnées)
389
+ """
390
+ if self._cf_explainer == 'dice':
391
+ return self._generate_dice_counterfactuals(
392
+ instance, feature_names, desired_class,
393
+ num_counterfactuals, feature_weights, immutable_features
394
+ )
395
+ elif self._cf_explainer == 'genetic':
396
+ return self._generate_genetic_counterfactuals(
397
+ instance, feature_names, desired_class,
398
+ num_counterfactuals, feature_weights, immutable_features
399
+ )
400
+ elif self._cf_explainer == 'optimization':
401
+ return self._generate_optimization_counterfactuals(
402
+ instance, feature_names, desired_class,
403
+ num_counterfactuals, feature_weights, immutable_features
404
+ )
405
+ else:
406
+ raise ValueError(f"Méthode contrefactuelle non initialisée")
407
+
408
+ def _generate_dice_counterfactuals(self, instance, feature_names, desired_class=None,
409
+ num_counterfactuals=3, feature_weights=None, immutable_features=None):
410
+ """
411
+ Génère des exemples contrefactuels en utilisant DiCE.
412
+
413
+ Args:
414
+ instance: Instance à expliquer
415
+ feature_names: Noms des caractéristiques
416
+ desired_class: Classe désirée pour le contrefactuel
417
+ num_counterfactuals: Nombre de contrefactuels à générer
418
+ feature_weights: Poids pour chaque caractéristique
419
+ immutable_features: Caractéristiques qui ne peuvent pas être modifiées
420
+
421
+ Returns:
422
+ tuple: (contrefactuels, métadonnées)
423
+ """
424
+ try:
425
+ import dice_ml
426
+ from dice_ml.utils import helpers
427
+ except ImportError:
428
+ raise ImportError("Le package DiCE est requis pour cette méthode. "
429
+ "Installez-le avec 'pip install dice-ml'.")
430
+
431
+ # Créer un ensemble de données synthétique pour initialiser DiCE
432
+ # (nécessaire car DiCE a besoin d'un dataset)
433
+ synthetic_data = np.random.normal(0, 1, size=(100, instance.shape[1]))
434
+
435
+ # Déterminer les types de caractéristiques
436
+ continuous_features = []
437
+ categorical_features = []
438
+
439
+ if self._continuous_features:
440
+ continuous_features = self._continuous_features
441
+ if self._categorical_features:
442
+ categorical_features = self._categorical_features
443
+
444
+ # Si aucun n'est spécifié, supposer que toutes sont continues
445
+ if not continuous_features and not categorical_features:
446
+ continuous_features = list(range(instance.shape[1]))
447
+
448
+ # Créer le dataset DiCE
449
+ d = dice_ml.Data(
450
+ dataframe=pd.DataFrame(synthetic_data, columns=feature_names),
451
+ continuous_features=[feature_names[i] for i in continuous_features if i < len(feature_names)],
452
+ outcome_name='target' # Nom factice
453
+ )
454
+
455
+ # Créer le modèle backend DiCE
456
+ # Utiliser le backend approprié selon le type de modèle
457
+ model_type = self._get_model_type()
458
+ if model_type in ['sklearn', 'xgboost', 'lightgbm', 'catboost']:
459
+ m = dice_ml.Model(model=self._model, backend='sklearn')
460
+ elif model_type == 'tensorflow':
461
+ m = dice_ml.Model(model=self._model, backend='TF2')
462
+ elif model_type == 'pytorch':
463
+ m = dice_ml.Model(model=self._model, backend='PYT')
464
+ else:
465
+ # Utiliser le backend générique
466
+ m = dice_ml.Model(model=self._model, backend='sklearn')
467
+
468
+ # Créer l'explainer DiCE
469
+ exp = dice_ml.Dice(d, m)
470
+
471
+ # Préparer les paramètres pour la génération de contrefactuels
472
+ query_instance = pd.DataFrame(instance, columns=feature_names)
473
+
474
+ # Déterminer la classe désirée
475
+ if desired_class is None:
476
+ # Prédire la classe actuelle
477
+ if hasattr(self._model, 'predict_proba'):
478
+ pred = self._model.predict_proba(instance)[0]
479
+ current_class = np.argmax(pred)
480
+ # Classe opposée pour binaire, classe avec 2e plus grande proba pour multi-classe
481
+ if len(pred) == 2:
482
+ desired_class = 1 - current_class
483
+ else:
484
+ sorted_indices = np.argsort(pred)[::-1]
485
+ desired_class = sorted_indices[1] # 2e classe la plus probable
486
+ else:
487
+ pred = self._model.predict(instance)[0]
488
+ if isinstance(pred, (int, float, np.integer, np.floating)):
489
+ # Pour la régression, augmenter la valeur de 20%
490
+ desired_class = pred * 1.2
491
+ else:
492
+ # Pour la classification sans probabilités
493
+ desired_class = 1 - pred if pred in [0, 1] else None
494
+
495
+ # Paramètres pour DiCE
496
+ dice_params = {
497
+ 'total_CFs': num_counterfactuals,
498
+ 'desired_class': desired_class,
499
+ 'proximity_weight': self._proximity_weight,
500
+ 'diversity_weight': self._diversity_weight,
501
+ 'sparsity_weight': self._sparsity_weight
502
+ }
503
+
504
+ # Ajouter les caractéristiques immuables si spécifiées
505
+ if immutable_features:
506
+ dice_params['features_to_vary'] = [f for f in feature_names if f not in immutable_features]
507
+
508
+ # Générer les contrefactuels
509
+ cf_obj = exp.generate_counterfactuals(query_instance, **dice_params)
510
+
511
+ # Extraire les contrefactuels
512
+ if hasattr(cf_obj, 'cf_examples_list') and cf_obj.cf_examples_list:
513
+ counterfactuals = cf_obj.cf_examples_list[0].final_cfs_df.values
514
+ metadata = {
515
+ 'proximity': cf_obj.cf_examples_list[0].proximity,
516
+ 'sparsity': cf_obj.cf_examples_list[0].sparsity,
517
+ 'diversity': cf_obj.cf_examples_list[0].diversity,
518
+ 'desired_class': desired_class
519
+ }
520
+ else:
521
+ # Fallback si DiCE échoue
522
+ self._logger.warning("DiCE n'a pas réussi à générer des contrefactuels. Utilisation de contrefactuels aléatoires.")
523
+ counterfactuals = self._generate_random_counterfactuals(instance, feature_names, num_counterfactuals)
524
+ metadata = {
525
+ 'method': 'random_fallback',
526
+ 'desired_class': desired_class
527
+ }
528
+
529
+ return counterfactuals, metadata
530
+
531
+ def _generate_genetic_counterfactuals(self, instance, feature_names, desired_class=None,
532
+ num_counterfactuals=3, feature_weights=None, immutable_features=None):
533
+ """
534
+ Génère des exemples contrefactuels en utilisant un algorithme génétique.
535
+
536
+ Note: Cette méthode est un placeholder pour une implémentation future.
537
+ Pour l'instant, elle génère des contrefactuels aléatoires.
538
+ """
539
+ self._logger.warning("L'algorithme génétique pour les contrefactuels n'est pas encore implémenté. "
540
+ "Utilisation de contrefactuels aléatoires.")
541
+
542
+ counterfactuals = self._generate_random_counterfactuals(instance, feature_names, num_counterfactuals)
543
+ metadata = {
544
+ 'method': 'random_placeholder',
545
+ 'desired_class': desired_class
546
+ }
547
+
548
+ return counterfactuals, metadata
549
+
550
+ def _generate_optimization_counterfactuals(self, instance, feature_names, desired_class=None,
551
+ num_counterfactuals=3, feature_weights=None, immutable_features=None):
552
+ """
553
+ Génère des exemples contrefactuels en utilisant des méthodes d'optimisation.
554
+
555
+ Note: Cette méthode est un placeholder pour une implémentation future.
556
+ Pour l'instant, elle génère des contrefactuels aléatoires.
557
+ """
558
+ self._logger.warning("L'algorithme d'optimisation pour les contrefactuels n'est pas encore implémenté. "
559
+ "Utilisation de contrefactuels aléatoires.")
560
+
561
+ counterfactuals = self._generate_random_counterfactuals(instance, feature_names, num_counterfactuals)
562
+ metadata = {
563
+ 'method': 'random_placeholder',
564
+ 'desired_class': desired_class
565
+ }
566
+
567
+ return counterfactuals, metadata
568
+
569
+ def _generate_random_counterfactuals(self, instance, feature_names, num_counterfactuals=3):
570
+ """
571
+ Génère des exemples contrefactuels aléatoires (pour fallback).
572
+ """
573
+ # Créer des variations aléatoires de l'instance
574
+ counterfactuals = []
575
+ for _ in range(num_counterfactuals):
576
+ # Copier l'instance
577
+ cf = instance.copy()
578
+
579
+ # Modifier aléatoirement 1 à 3 caractéristiques
580
+ n_features_to_change = np.random.randint(1, min(4, instance.shape[1] + 1))
581
+ features_to_change = np.random.choice(instance.shape[1], n_features_to_change, replace=False)
582
+
583
+ for idx in features_to_change:
584
+ # Pour les caractéristiques continues, ajouter une perturbation
585
+ if idx in self._continuous_features or not self._categorical_features:
586
+ cf[0, idx] = cf[0, idx] + np.random.normal(0, abs(cf[0, idx]) * 0.2 + 0.1)
587
+ # Pour les caractéristiques catégorielles, changer la valeur
588
+ elif idx in self._categorical_features:
589
+ current_val = cf[0, idx]
590
+ # Supposer que les valeurs catégorielles sont des entiers
591
+ possible_values = list(range(10)) # Valeurs arbitraires
592
+ new_val = np.random.choice([v for v in possible_values if v != current_val])
593
+ cf[0, idx] = new_val
594
+
595
+ counterfactuals.append(cf[0])
596
+
597
+ return np.array(counterfactuals)
598
+
599
+ def _calculate_feature_changes(self, instance, counterfactuals, feature_names):
600
+ """
601
+ Calcule les changements de caractéristiques entre l'instance et les contrefactuels.
602
+
603
+ Args:
604
+ instance: Instance d'origine
605
+ counterfactuals: Contrefactuels générés
606
+ feature_names: Noms des caractéristiques
607
+
608
+ Returns:
609
+ dict: Changements de caractéristiques
610
+ """
611
+ changes = {}
612
+
613
+ # Convertir en array numpy si nécessaire
614
+ if not isinstance(counterfactuals, np.ndarray):
615
+ counterfactuals = np.array(counterfactuals)
616
+
617
+ # Pour chaque caractéristique
618
+ for i, feature in enumerate(feature_names):
619
+ if i >= instance.shape[0]:
620
+ continue
621
+
622
+ # Valeur d'origine
623
+ original_value = instance[i]
624
+
625
+ # Valeurs dans les contrefactuels
626
+ if counterfactuals.ndim > 1 and i < counterfactuals.shape[1]:
627
+ cf_values = counterfactuals[:, i]
628
+ else:
629
+ continue
630
+
631
+ # Calculer les changements
632
+ absolute_diffs = np.abs(cf_values - original_value)
633
+ mean_diff = np.mean(absolute_diffs)
634
+ max_diff = np.max(absolute_diffs)
635
+ min_diff = np.min(absolute_diffs)
636
+ std_diff = np.std(absolute_diffs)
637
+
638
+ # Calculer le pourcentage de contrefactuels qui ont changé cette caractéristique
639
+ changed_ratio = np.sum(absolute_diffs > 0) / len(cf_values)
640
+
641
+ # Stocker les résultats
642
+ changes[feature] = {
643
+ 'original_value': float(original_value),
644
+ 'mean_diff': float(mean_diff),
645
+ 'max_diff': float(max_diff),
646
+ 'min_diff': float(min_diff),
647
+ 'std_diff': float(std_diff),
648
+ 'changed_ratio': float(changed_ratio)
649
+ }
650
+
651
+ return changes
652
+
653
+ def _aggregate_feature_changes(self, all_feature_changes, feature_names):
654
+ """
655
+ Agrège les changements de caractéristiques à partir de plusieurs instances.
656
+
657
+ Args:
658
+ all_feature_changes: Liste de dictionnaires de changements de caractéristiques
659
+ feature_names: Noms des caractéristiques
660
+
661
+ Returns:
662
+ dict: Changements de caractéristiques agrégés
663
+ """
664
+ aggregated = {}
665
+
666
+ # Pour chaque caractéristique
667
+ for feature in feature_names:
668
+ # Collecter les statistiques de tous les changements
669
+ mean_diffs = []
670
+ max_diffs = []
671
+ changed_ratios = []
672
+
673
+ for changes in all_feature_changes:
674
+ if feature in changes:
675
+ mean_diffs.append(changes[feature]['mean_diff'])
676
+ max_diffs.append(changes[feature]['max_diff'])
677
+ changed_ratios.append(changes[feature]['changed_ratio'])
678
+
679
+ # Calculer les statistiques agrégées
680
+ if mean_diffs:
681
+ aggregated[feature] = {
682
+ 'mean_diff': float(np.mean(mean_diffs)),
683
+ 'max_diff': float(np.max(max_diffs)),
684
+ 'changed_ratio': float(np.mean(changed_ratios)),
685
+ 'importance_score': float(np.mean(changed_ratios) * np.mean(mean_diffs))
686
+ }
687
+ else:
688
+ aggregated[feature] = {
689
+ 'mean_diff': 0.0,
690
+ 'max_diff': 0.0,
691
+ 'changed_ratio': 0.0,
692
+ 'importance_score': 0.0
693
+ }
694
+
695
+ return aggregated
696
+
697
+ def _convert_changes_to_importances(self, feature_changes):
698
+ """
699
+ Convertit les changements de caractéristiques en importances de caractéristiques.
700
+
701
+ Args:
702
+ feature_changes: Dictionnaire de changements de caractéristiques
703
+
704
+ Returns:
705
+ list: Liste d'objets FeatureImportance
706
+ """
707
+ importances = []
708
+
709
+ # Calculer un score d'importance pour chaque caractéristique
710
+ for feature, changes in feature_changes.items():
711
+ # Pour les changements agrégés
712
+ if 'importance_score' in changes:
713
+ importance = changes['importance_score']
714
+ # Pour les changements d'une seule instance
715
+ else:
716
+ # Le score d'importance est une combinaison de la fréquence de changement et de l'ampleur du changement
717
+ importance = changes['changed_ratio'] * changes['mean_diff']
718
+
719
+ importances.append(FeatureImportance(
720
+ feature_name=feature,
721
+ importance=float(importance),
722
+ std=float(changes.get('std_diff', 0.0)),
723
+ additional_info={
724
+ 'changed_ratio': float(changes['changed_ratio']),
725
+ 'mean_diff': float(changes['mean_diff']),
726
+ 'max_diff': float(changes.get('max_diff', 0.0))
727
+ }
728
+ ))
729
+
730
+ # Normaliser les importances
731
+ total_importance = sum(imp.importance for imp in importances)
732
+ if total_importance > 0:
733
+ for imp in importances:
734
+ imp.importance = imp.importance / total_importance
735
+
736
+ # Trier par importance décroissante
737
+ importances.sort(key=lambda x: x.importance, reverse=True)
738
+
739
+ return importances
740
+
741
+ def _extract_metadata(self):
742
+ """
743
+ Extrait les métadonnées du modèle.
744
+ """
745
+ # Déterminer le type de modèle
746
+ model_type = self._get_model_type()
747
+
748
+ # Déterminer le type de tâche (classification ou régression)
749
+ task_type = self._get_task_type()
750
+
751
+ # Créer les métadonnées du modèle
752
+ self._metadata = ModelMetadata(
753
+ model_type=model_type,
754
+ framework=model_type, # Utiliser le type comme framework pour simplifier
755
+ task_type=task_type,
756
+ feature_names=self._feature_names,
757
+ target_names=None, # Pas disponible pour les contrefactuels
758
+ model_parameters={
759
+ 'counterfactual_method': self._counterfactual_method,
760
+ 'proximity_weight': self._proximity_weight,
761
+ 'diversity_weight': self._diversity_weight,
762
+ 'sparsity_weight': self._sparsity_weight
763
+ }
764
+ )
765
+
766
+ def _get_model_type(self):
767
+ """
768
+ Détermine le type de modèle (framework).
769
+
770
+ Returns:
771
+ str: Type de modèle (sklearn, tensorflow, pytorch, etc.)
772
+ """
773
+ model_module = self._model.__module__.split('.')[0].lower()
774
+
775
+ if model_module in ['sklearn', 'scikit']:
776
+ return 'sklearn'
777
+ elif model_module in ['tensorflow', 'tf', 'keras']:
778
+ return 'tensorflow'
779
+ elif model_module in ['torch', 'pytorch']:
780
+ return 'pytorch'
781
+ elif model_module in ['xgboost']:
782
+ return 'xgboost'
783
+ elif model_module in ['lightgbm']:
784
+ return 'lightgbm'
785
+ elif model_module in ['catboost']:
786
+ return 'catboost'
787
+ else:
788
+ return 'unknown'
789
+
790
+ def _get_task_type(self):
791
+ """
792
+ Détermine le type de tâche (classification ou régression).
793
+
794
+ Returns:
795
+ str: Type de tâche ('classification' ou 'regression')
796
+ """
797
+ # Vérifier les méthodes disponibles sur le modèle
798
+ if hasattr(self._model, 'predict_proba'):
799
+ return 'classification'
800
+ elif hasattr(self._model, '_estimator_type'):
801
+ return self._model._estimator_type
802
+ else:
803
+ # Par défaut, supposer que c'est une classification
804
+ return 'classification'