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,820 @@
1
+ """
2
+ Module de génération de rapports de conformité réglementaire.
3
+ Permet de générer des rapports de conformité basés sur les modules GDPR et AI Act.
4
+ """
5
+
6
+ import datetime
7
+ import json
8
+ import os
9
+ from typing import Dict, List, Optional, Union, Any
10
+
11
+ from ..formatters.base_formatter import BaseReportFormatter
12
+ from ..formatters.html_formatter import HTMLReportFormatter
13
+ from ..formatters.pdf_formatter import PDFReportFormatter
14
+ from ..formatters.json_formatter import JSONReportFormatter
15
+ from .gdpr import GDPRManager
16
+ from .ai_act import AIActComplianceManager
17
+ from ..visualizations.chart_generator import ChartGenerator
18
+
19
+
20
+ class ComplianceReportGenerator:
21
+ """
22
+ Générateur de rapports de conformité réglementaire intégrant GDPR et AI Act.
23
+ """
24
+
25
+ def __init__(
26
+ self,
27
+ gdpr_manager: Optional[GDPRManager] = None,
28
+ ai_act_manager: Optional[AIActComplianceManager] = None,
29
+ formatters: Optional[List[BaseReportFormatter]] = None,
30
+ output_dir: str = "./reports",
31
+ ):
32
+ """
33
+ Initialise le générateur de rapports de conformité.
34
+
35
+ Args:
36
+ gdpr_manager: Instance de GDPRManager pour les données de conformité GDPR
37
+ ai_act_manager: Instance de AIActComplianceManager pour les données de conformité AI Act
38
+ formatters: Liste des formateurs de rapport à utiliser
39
+ output_dir: Répertoire de sortie pour les rapports générés
40
+ """
41
+ self.gdpr_manager = gdpr_manager
42
+ self.ai_act_manager = ai_act_manager
43
+ self.output_dir = output_dir
44
+
45
+ # Formateurs par défaut si non spécifiés
46
+ self.formatters = formatters or [
47
+ HTMLReportFormatter(),
48
+ PDFReportFormatter(),
49
+ JSONReportFormatter()
50
+ ]
51
+
52
+ # Générateur de graphiques
53
+ self.chart_generator = ChartGenerator()
54
+
55
+ # Créer le répertoire de sortie s'il n'existe pas
56
+ if not os.path.exists(output_dir):
57
+ os.makedirs(output_dir)
58
+
59
+ def generate_gdpr_compliance_report(
60
+ self,
61
+ organization_name: str,
62
+ report_title: str = "Rapport de Conformité RGPD",
63
+ language: str = "fr",
64
+ include_processing_activities: bool = True,
65
+ include_data_subject_requests: bool = True,
66
+ include_breaches: bool = True,
67
+ include_dpias: bool = True,
68
+ include_analytics: bool = True,
69
+ output_formats: List[str] = None,
70
+ ) -> Dict[str, str]:
71
+ """
72
+ Génère un rapport de conformité GDPR/RGPD.
73
+
74
+ Args:
75
+ organization_name: Nom de l'organisation
76
+ report_title: Titre du rapport
77
+ language: Code de langue (fr, en, etc.)
78
+ include_processing_activities: Inclure les activités de traitement
79
+ include_data_subject_requests: Inclure les demandes des personnes concernées
80
+ include_breaches: Inclure les violations de données
81
+ include_dpias: Inclure les analyses d'impact
82
+ include_analytics: Inclure les analyses et graphiques
83
+ output_formats: Formats de sortie (html, pdf, json)
84
+
85
+ Returns:
86
+ Dict[str, str]: Chemins des fichiers générés par format
87
+ """
88
+ if not self.gdpr_manager:
89
+ raise ValueError("Aucun gestionnaire GDPR n'a été fourni")
90
+
91
+ # Construire les données du rapport
92
+ report_data = self._build_gdpr_report_data(
93
+ organization_name,
94
+ include_processing_activities,
95
+ include_data_subject_requests,
96
+ include_breaches,
97
+ include_dpias,
98
+ include_analytics
99
+ )
100
+
101
+ # Ajouter les métadonnées du rapport
102
+ timestamp = datetime.datetime.now().isoformat()
103
+ report_data["metadata"] = {
104
+ "title": report_title,
105
+ "organization": organization_name,
106
+ "language": language,
107
+ "generated_at": timestamp,
108
+ "report_type": "gdpr_compliance"
109
+ }
110
+
111
+ # Sélectionner les formateurs selon les formats demandés
112
+ selected_formatters = self._select_formatters(output_formats) if output_formats else self.formatters
113
+
114
+ # Générer les rapports dans chaque format
115
+ output_files = {}
116
+ for formatter in selected_formatters:
117
+ output_filename = f"gdpr_compliance_report_{organization_name.replace(' ', '_').lower()}_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.{formatter.extension}"
118
+ output_path = os.path.join(self.output_dir, output_filename)
119
+
120
+ formatter.generate_report(report_data, output_path, language=language)
121
+ output_files[formatter.format_name] = output_path
122
+
123
+ return output_files
124
+
125
+ def _build_gdpr_report_data(
126
+ self,
127
+ organization_name: str,
128
+ include_processing_activities: bool,
129
+ include_data_subject_requests: bool,
130
+ include_breaches: bool,
131
+ include_dpias: bool,
132
+ include_analytics: bool
133
+ ) -> Dict[str, Any]:
134
+ """
135
+ Construit les données du rapport GDPR.
136
+
137
+ Returns:
138
+ Dict: Données du rapport
139
+ """
140
+ report_data = {
141
+ "organization_name": organization_name,
142
+ "sections": []
143
+ }
144
+
145
+ # Section d'introduction
146
+ intro_section = {
147
+ "title": "Introduction",
148
+ "content": f"Ce rapport présente l'état de conformité RGPD pour {organization_name}.",
149
+ "order": 1
150
+ }
151
+ report_data["sections"].append(intro_section)
152
+
153
+ # Ajouter les sections selon les options
154
+ order = 2
155
+
156
+ if include_processing_activities:
157
+ activities_section = self._build_processing_activities_section(order)
158
+ report_data["sections"].append(activities_section)
159
+ order += 1
160
+
161
+ if include_data_subject_requests:
162
+ requests_section = self._build_data_subject_requests_section(order)
163
+ report_data["sections"].append(requests_section)
164
+ order += 1
165
+
166
+ if include_breaches:
167
+ breaches_section = self._build_breaches_section(order)
168
+ report_data["sections"].append(breaches_section)
169
+ order += 1
170
+
171
+ if include_dpias:
172
+ dpias_section = self._build_dpias_section(order)
173
+ report_data["sections"].append(dpias_section)
174
+ order += 1
175
+
176
+ if include_analytics and (include_processing_activities or include_data_subject_requests or include_breaches):
177
+ analytics_section = self._build_gdpr_analytics_section(order)
178
+ report_data["sections"].append(analytics_section)
179
+ order += 1
180
+
181
+ # Section de conclusion
182
+ conclusion_section = {
183
+ "title": "Conclusion",
184
+ "content": "Ce rapport a été généré automatiquement par XPLIA. " +
185
+ "Il présente un aperçu de l'état de conformité RGPD actuel. " +
186
+ "Pour toute question ou préoccupation, veuillez contacter le DPO.",
187
+ "order": order
188
+ }
189
+ report_data["sections"].append(conclusion_section)
190
+
191
+ return report_data
192
+
193
+ def _build_processing_activities_section(self, order: int) -> Dict[str, Any]:
194
+ """Construit la section des activités de traitement."""
195
+ section = {
196
+ "title": "Registre des Activités de Traitement",
197
+ "content": "Cette section présente les activités de traitement enregistrées.",
198
+ "order": order,
199
+ "subsections": []
200
+ }
201
+
202
+ # Ajouter les activités de traitement
203
+ if self.gdpr_manager and self.gdpr_manager.processing_activities:
204
+ for activity in self.gdpr_manager.processing_activities:
205
+ subsection = {
206
+ "title": activity.get("process_name", "Activité de traitement"),
207
+ "content": f"Finalité: {activity.get('purpose', 'Non spécifiée')}\n" +
208
+ f"Base légale: {activity.get('legal_basis', 'Non spécifiée')}\n" +
209
+ f"Catégories de données: {', '.join(activity.get('data_categories', ['Non spécifiées']))}"
210
+ }
211
+ section["subsections"].append(subsection)
212
+ else:
213
+ section["content"] += "\n\nAucune activité de traitement n'a été enregistrée."
214
+
215
+ return section
216
+
217
+ def _build_data_subject_requests_section(self, order: int) -> Dict[str, Any]:
218
+ """Construit la section des demandes d'exercice de droits."""
219
+ section = {
220
+ "title": "Demandes d'Exercice de Droits",
221
+ "content": "Cette section présente les demandes d'exercice de droits reçues.",
222
+ "order": order,
223
+ "subsections": []
224
+ }
225
+
226
+ # Ajouter les demandes des personnes concernées
227
+ if self.gdpr_manager and self.gdpr_manager.data_subject_requests:
228
+ # Statistiques sur les demandes
229
+ pending_count = sum(1 for r in self.gdpr_manager.data_subject_requests if r.get("status") == "pending")
230
+ completed_count = sum(1 for r in self.gdpr_manager.data_subject_requests if r.get("status") == "completed")
231
+
232
+ stats_subsection = {
233
+ "title": "Statistiques des Demandes",
234
+ "content": f"Nombre total de demandes: {len(self.gdpr_manager.data_subject_requests)}\n" +
235
+ f"Demandes en attente: {pending_count}\n" +
236
+ f"Demandes traitées: {completed_count}"
237
+ }
238
+ section["subsections"].append(stats_subsection)
239
+
240
+ # Liste des demandes en retard
241
+ overdue_requests = self.gdpr_manager.calculate_request_overdue()
242
+ if overdue_requests:
243
+ overdue_subsection = {
244
+ "title": "Demandes en Retard",
245
+ "content": f"Nombre de demandes en retard: {len(overdue_requests)}\n\n" +
246
+ "Liste des demandes en retard:\n" +
247
+ "\n".join([f"- ID: {r.get('request_id')}, Type: {r.get('request_type')}, Retard: {r.get('days_overdue')} jours"
248
+ for r in overdue_requests])
249
+ }
250
+ section["subsections"].append(overdue_subsection)
251
+ else:
252
+ section["content"] += "\n\nAucune demande d'exercice de droits n'a été enregistrée."
253
+
254
+ return section
255
+
256
+ def _build_breaches_section(self, order: int) -> Dict[str, Any]:
257
+ """Construit la section des violations de données."""
258
+ section = {
259
+ "title": "Violations de Données",
260
+ "content": "Cette section présente les violations de données enregistrées.",
261
+ "order": order,
262
+ "subsections": []
263
+ }
264
+
265
+ # Ajouter les violations de données
266
+ if self.gdpr_manager and self.gdpr_manager.data_breaches:
267
+ # Statistiques sur les violations
268
+ open_count = sum(1 for b in self.gdpr_manager.data_breaches if b.get("status") == "open")
269
+ closed_count = sum(1 for b in self.gdpr_manager.data_breaches if b.get("status") == "closed")
270
+ high_risk_count = sum(1 for b in self.gdpr_manager.data_breaches if b.get("risk_level") == "high")
271
+
272
+ stats_subsection = {
273
+ "title": "Statistiques des Violations",
274
+ "content": f"Nombre total de violations: {len(self.gdpr_manager.data_breaches)}\n" +
275
+ f"Violations ouvertes: {open_count}\n" +
276
+ f"Violations clôturées: {closed_count}\n" +
277
+ f"Violations à risque élevé: {high_risk_count}"
278
+ }
279
+ section["subsections"].append(stats_subsection)
280
+
281
+ # Liste des violations actives
282
+ if open_count > 0:
283
+ open_breaches = [b for b in self.gdpr_manager.data_breaches if b.get("status") == "open"]
284
+ open_subsection = {
285
+ "title": "Violations Actives",
286
+ "content": "Liste des violations actives:\n" +
287
+ "\n".join([f"- ID: {b.get('breach_id')}, Description: {b.get('description')}, " +
288
+ f"Risque: {b.get('risk_level')}"
289
+ for b in open_breaches])
290
+ }
291
+ section["subsections"].append(open_subsection)
292
+ else:
293
+ section["content"] += "\n\nAucune violation de données n'a été enregistrée."
294
+
295
+ return section
296
+
297
+ def _build_dpias_section(self, order: int) -> Dict[str, Any]:
298
+ """Construit la section des analyses d'impact."""
299
+ section = {
300
+ "title": "Analyses d'Impact (AIPD/DPIA)",
301
+ "content": "Cette section présente les analyses d'impact relatives à la protection des données.",
302
+ "order": order,
303
+ "subsections": []
304
+ }
305
+
306
+ # Ajouter les AIPD
307
+ if self.gdpr_manager and self.gdpr_manager.dpia_assessments:
308
+ # Statistiques sur les AIPD
309
+ draft_count = sum(1 for d in self.gdpr_manager.dpia_assessments if d.get("status") == "draft")
310
+ in_progress_count = sum(1 for d in self.gdpr_manager.dpia_assessments if d.get("status") == "in_progress")
311
+ completed_count = sum(1 for d in self.gdpr_manager.dpia_assessments if d.get("status") in ["completed", "approved"])
312
+
313
+ stats_subsection = {
314
+ "title": "Statistiques des AIPD",
315
+ "content": f"Nombre total d'AIPD: {len(self.gdpr_manager.dpia_assessments)}\n" +
316
+ f"AIPD en brouillon: {draft_count}\n" +
317
+ f"AIPD en cours: {in_progress_count}\n" +
318
+ f"AIPD complétées: {completed_count}"
319
+ }
320
+ section["subsections"].append(stats_subsection)
321
+
322
+ # Liste des AIPD actives
323
+ active_dpias = [d for d in self.gdpr_manager.dpia_assessments if d.get("status") in ["draft", "in_progress"]]
324
+ if active_dpias:
325
+ active_subsection = {
326
+ "title": "AIPD Actives",
327
+ "content": "Liste des AIPD en cours:\n" +
328
+ "\n".join([f"- Traitement: {d.get('processing_name')}, " +
329
+ f"Statut: {d.get('status')}, " +
330
+ f"Dernière mise à jour: {d.get('last_updated', 'N/A')}"
331
+ for d in active_dpias])
332
+ }
333
+ section["subsections"].append(active_subsection)
334
+ else:
335
+ section["content"] += "\n\nAucune analyse d'impact n'a été enregistrée."
336
+
337
+ return section
338
+
339
+ def _build_gdpr_analytics_section(self, order: int) -> Dict[str, Any]:
340
+ """Construit la section d'analytiques GDPR avec graphiques."""
341
+ section = {
342
+ "title": "Analyses et Visualisations",
343
+ "content": "Cette section présente des visualisations des données de conformité RGPD.",
344
+ "order": order,
345
+ "visualizations": []
346
+ }
347
+
348
+ # N'ajouter des visualisations que si des données sont disponibles
349
+ if self.gdpr_manager:
350
+ # 1. Distribution des activités de traitement par base légale
351
+ if self.gdpr_manager.processing_activities:
352
+ legal_basis_data = {}
353
+ for activity in self.gdpr_manager.processing_activities:
354
+ legal_basis = activity.get("legal_basis", "Non spécifiée")
355
+ legal_basis_data[legal_basis] = legal_basis_data.get(legal_basis, 0) + 1
356
+
357
+ if legal_basis_data:
358
+ legal_basis_chart = {
359
+ "title": "Distribution des Activités de Traitement par Base Légale",
360
+ "chart_type": "pie",
361
+ "data": {
362
+ "labels": list(legal_basis_data.keys()),
363
+ "values": list(legal_basis_data.values())
364
+ }
365
+ }
366
+ section["visualizations"].append(legal_basis_chart)
367
+
368
+ # 2. Statut des demandes d'exercice de droits
369
+ if self.gdpr_manager.data_subject_requests:
370
+ status_data = {}
371
+ for request in self.gdpr_manager.data_subject_requests:
372
+ status = request.get("status", "Non spécifié")
373
+ status_data[status] = status_data.get(status, 0) + 1
374
+
375
+ if status_data:
376
+ status_chart = {
377
+ "title": "Statut des Demandes d'Exercice de Droits",
378
+ "chart_type": "bar",
379
+ "data": {
380
+ "labels": list(status_data.keys()),
381
+ "values": list(status_data.values())
382
+ }
383
+ }
384
+ section["visualizations"].append(status_chart)
385
+
386
+ # 3. Niveaux de risque des violations de données
387
+ if self.gdpr_manager.data_breaches:
388
+ risk_data = {}
389
+ for breach in self.gdpr_manager.data_breaches:
390
+ risk_level = breach.get("risk_level", "Non spécifié")
391
+ risk_data[risk_level] = risk_data.get(risk_level, 0) + 1
392
+
393
+ if risk_data:
394
+ risk_chart = {
395
+ "title": "Niveaux de Risque des Violations de Données",
396
+ "chart_type": "pie",
397
+ "data": {
398
+ "labels": list(risk_data.keys()),
399
+ "values": list(risk_data.values())
400
+ }
401
+ }
402
+ section["visualizations"].append(risk_chart)
403
+
404
+ if not section.get("visualizations"):
405
+ section["content"] += "\n\nAucune donnée suffisante pour générer des visualisations."
406
+
407
+ return section
408
+
409
+ def generate_ai_act_compliance_report(
410
+ self,
411
+ system_name: str,
412
+ report_title: str = "Rapport de Conformité AI Act",
413
+ language: str = "fr",
414
+ include_risk_assessment: bool = True,
415
+ include_requirements: bool = True,
416
+ include_technical_docs: bool = True,
417
+ include_analytics: bool = True,
418
+ output_formats: List[str] = None,
419
+ ) -> Dict[str, str]:
420
+ """
421
+ Génère un rapport de conformité AI Act.
422
+
423
+ Args:
424
+ system_name: Nom du système d'IA
425
+ report_title: Titre du rapport
426
+ language: Code de langue (fr, en, etc.)
427
+ include_risk_assessment: Inclure l'évaluation des risques
428
+ include_requirements: Inclure les exigences de l'AI Act
429
+ include_technical_docs: Inclure la documentation technique
430
+ include_analytics: Inclure les analyses et graphiques
431
+ output_formats: Formats de sortie (html, pdf, json)
432
+
433
+ Returns:
434
+ Dict[str, str]: Chemins des fichiers générés par format
435
+ """
436
+ if not self.ai_act_manager:
437
+ raise ValueError("Aucun gestionnaire AI Act n'a été fourni")
438
+
439
+ # Construire les données du rapport
440
+ report_data = self._build_ai_act_report_data(
441
+ system_name,
442
+ include_risk_assessment,
443
+ include_requirements,
444
+ include_technical_docs,
445
+ include_analytics
446
+ )
447
+
448
+ # Ajouter les métadonnées du rapport
449
+ timestamp = datetime.datetime.now().isoformat()
450
+ report_data["metadata"] = {
451
+ "title": report_title,
452
+ "system_name": system_name,
453
+ "language": language,
454
+ "generated_at": timestamp,
455
+ "report_type": "ai_act_compliance"
456
+ }
457
+
458
+ # Sélectionner les formateurs selon les formats demandés
459
+ selected_formatters = self._select_formatters(output_formats) if output_formats else self.formatters
460
+
461
+ # Générer les rapports dans chaque format
462
+ output_files = {}
463
+ for formatter in selected_formatters:
464
+ output_filename = f"ai_act_compliance_report_{system_name.replace(' ', '_').lower()}_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.{formatter.extension}"
465
+ output_path = os.path.join(self.output_dir, output_filename)
466
+
467
+ formatter.generate_report(report_data, output_path, language=language)
468
+ output_files[formatter.format_name] = output_path
469
+
470
+ return output_files
471
+
472
+ def _build_ai_act_report_data(
473
+ self,
474
+ system_name: str,
475
+ include_risk_assessment: bool,
476
+ include_requirements: bool,
477
+ include_technical_docs: bool,
478
+ include_analytics: bool
479
+ ) -> Dict[str, Any]:
480
+ """
481
+ Construit les données du rapport AI Act.
482
+
483
+ Returns:
484
+ Dict: Données du rapport
485
+ """
486
+ report_data = {
487
+ "system_name": system_name,
488
+ "sections": []
489
+ }
490
+
491
+ # Section d'introduction
492
+ intro_section = {
493
+ "title": "Introduction",
494
+ "content": f"Ce rapport présente l'état de conformité avec l'AI Act pour le système {system_name}.",
495
+ "order": 1
496
+ }
497
+ report_data["sections"].append(intro_section)
498
+
499
+ # Ajouter les sections selon les options
500
+ order = 2
501
+
502
+ if include_risk_assessment:
503
+ risk_section = self._build_ai_act_risk_section(order)
504
+ report_data["sections"].append(risk_section)
505
+ order += 1
506
+
507
+ if include_requirements:
508
+ req_section = self._build_ai_act_requirements_section(order)
509
+ report_data["sections"].append(req_section)
510
+ order += 1
511
+
512
+ if include_technical_docs:
513
+ tech_section = self._build_ai_act_technical_docs_section(order)
514
+ report_data["sections"].append(tech_section)
515
+ order += 1
516
+
517
+ if include_analytics:
518
+ analytics_section = self._build_ai_act_analytics_section(order)
519
+ report_data["sections"].append(analytics_section)
520
+ order += 1
521
+
522
+ # Section de conclusion
523
+ conclusion_section = {
524
+ "title": "Conclusion",
525
+ "content": "Ce rapport a été généré automatiquement par XPLIA. " +
526
+ "Il présente un aperçu de l'état de conformité avec l'AI Act actuel. " +
527
+ "Pour toute question ou préoccupation, veuillez contacter l'équipe responsable.",
528
+ "order": order
529
+ }
530
+ report_data["sections"].append(conclusion_section)
531
+
532
+ return report_data
533
+
534
+ def _build_ai_act_risk_section(self, order: int) -> Dict[str, Any]:
535
+ """Construit la section d'évaluation des risques AI Act."""
536
+ section = {
537
+ "title": "Évaluation des Risques",
538
+ "content": "Cette section présente l'évaluation des risques selon l'AI Act.",
539
+ "order": order,
540
+ "subsections": []
541
+ }
542
+
543
+ # Ajouter les informations sur la classification de risque
544
+ if self.ai_act_manager:
545
+ # Classification du système
546
+ risk_level = self.ai_act_manager.get_risk_level()
547
+ risk_details = self.ai_act_manager.get_risk_classification_details()
548
+
549
+ classification_subsection = {
550
+ "title": "Classification du Risque",
551
+ "content": f"Niveau de risque: {risk_level}\n\n" +
552
+ f"Détails de la classification:\n{risk_details}\n\n"
553
+ }
554
+ section["subsections"].append(classification_subsection)
555
+
556
+ # Risques identifiés
557
+ risks = self.ai_act_manager.get_identified_risks()
558
+ if risks:
559
+ risks_content = "Liste des risques identifiés:\n\n"
560
+ for risk in risks:
561
+ risks_content += f"- {risk.get('description', 'Non spécifié')}\n" +
562
+ f" Probabilité: {risk.get('likelihood', 'Non spécifiée')}, " +
563
+ f"Impact: {risk.get('impact', 'Non spécifié')}\n"
564
+
565
+ risks_subsection = {
566
+ "title": "Risques Identifiés",
567
+ "content": risks_content
568
+ }
569
+ section["subsections"].append(risks_subsection)
570
+
571
+ # Mesures d'atténuation
572
+ mitigations = self.ai_act_manager.get_risk_mitigation_measures()
573
+ if mitigations:
574
+ mitigations_content = "Mesures d'atténuation mises en place:\n\n"
575
+ for measure in mitigations:
576
+ mitigations_content += f"- {measure.get('description', 'Non spécifiée')}\n" +
577
+ f" Risque ciblé: {measure.get('target_risk', 'Non spécifié')}\n"
578
+
579
+ mitigations_subsection = {
580
+ "title": "Mesures d'Atténuation",
581
+ "content": mitigations_content
582
+ }
583
+ section["subsections"].append(mitigations_subsection)
584
+ else:
585
+ section["content"] += "\n\nAucune évaluation de risques n'a été effectuée."
586
+
587
+ return section
588
+
589
+ def _build_ai_act_requirements_section(self, order: int) -> Dict[str, Any]:
590
+ """Construit la section des exigences de l'AI Act."""
591
+ section = {
592
+ "title": "Exigences de l'AI Act",
593
+ "content": "Cette section présente les exigences de l'AI Act applicables et leur état de conformité.",
594
+ "order": order,
595
+ "subsections": []
596
+ }
597
+
598
+ if self.ai_act_manager:
599
+ # Récupérer les exigences applicables
600
+ requirements = self.ai_act_manager.get_applicable_requirements()
601
+
602
+ # Organiser par catégorie
603
+ categories = {}
604
+ for req in requirements:
605
+ category = req.get("category", "Autres exigences")
606
+ if category not in categories:
607
+ categories[category] = []
608
+ categories[category].append(req)
609
+
610
+ # Créer une sous-section par catégorie
611
+ for category, reqs in categories.items():
612
+ content = f"Liste des exigences pour la catégorie {category}:\n\n"
613
+
614
+ # Compter le nombre d'exigences conformes
615
+ compliant = sum(1 for r in reqs if r.get("status") == "compliant")
616
+ partial = sum(1 for r in reqs if r.get("status") == "partial")
617
+ non_compliant = sum(1 for r in reqs if r.get("status") == "non_compliant")
618
+
619
+ content += f"Résumé: {compliant}/{len(reqs)} exigences conformes, {partial} partiellement conformes, {non_compliant} non conformes\n\n"
620
+
621
+ for req in reqs:
622
+ status = req.get("status", "unknown")
623
+ status_emoji = "✅" if status == "compliant" else "⚠️" if status == "partial" else "❌"
624
+ content += f"{status_emoji} {req.get('id', '')}: {req.get('description', '')}\n"
625
+
626
+ # Ajouter des détails si non conforme
627
+ if status != "compliant" and "details" in req:
628
+ content += f" └─ {req.get('details', '')}\n"
629
+
630
+ subsection = {
631
+ "title": f"Exigences: {category}",
632
+ "content": content
633
+ }
634
+ section["subsections"].append(subsection)
635
+ else:
636
+ section["content"] += "\n\nAucune exigence n'a été analysée."
637
+
638
+ return section
639
+
640
+ def _build_ai_act_technical_docs_section(self, order: int) -> Dict[str, Any]:
641
+ """Construit la section de documentation technique AI Act."""
642
+ section = {
643
+ "title": "Documentation Technique",
644
+ "content": "Cette section présente la documentation technique requise par l'AI Act.",
645
+ "order": order,
646
+ "subsections": []
647
+ }
648
+
649
+ if self.ai_act_manager:
650
+ # Récupérer les documents techniques
651
+ tech_docs = self.ai_act_manager.get_technical_documentation()
652
+
653
+ if tech_docs:
654
+ # Informations générales du système
655
+ if "system_description" in tech_docs:
656
+ sys_desc = tech_docs["system_description"]
657
+ general_info = {
658
+ "title": "Description du Système",
659
+ "content": sys_desc
660
+ }
661
+ section["subsections"].append(general_info)
662
+
663
+ # Architecture et conception
664
+ if "architecture" in tech_docs:
665
+ arch_content = tech_docs["architecture"]
666
+ architecture = {
667
+ "title": "Architecture et Conception",
668
+ "content": arch_content
669
+ }
670
+ section["subsections"].append(architecture)
671
+
672
+ # Détails de développement et formation
673
+ if "development_details" in tech_docs:
674
+ dev_content = tech_docs["development_details"]
675
+ development = {
676
+ "title": "Détails de Développement",
677
+ "content": dev_content
678
+ }
679
+ section["subsections"].append(development)
680
+
681
+ # Mesures de contrôle de qualité
682
+ if "quality_control" in tech_docs:
683
+ qc_content = tech_docs["quality_control"]
684
+ quality = {
685
+ "title": "Contrôle de Qualité",
686
+ "content": qc_content
687
+ }
688
+ section["subsections"].append(quality)
689
+
690
+ # Mesures de gouvernance des données
691
+ if "data_governance" in tech_docs:
692
+ data_gov_content = tech_docs["data_governance"]
693
+ data_governance = {
694
+ "title": "Gouvernance des Données",
695
+ "content": data_gov_content
696
+ }
697
+ section["subsections"].append(data_governance)
698
+
699
+ # Surveillance post-déploiement
700
+ if "post_deployment" in tech_docs:
701
+ post_dep_content = tech_docs["post_deployment"]
702
+ post_deployment = {
703
+ "title": "Surveillance Post-Déploiement",
704
+ "content": post_dep_content
705
+ }
706
+ section["subsections"].append(post_deployment)
707
+ else:
708
+ section["content"] += "\n\nAucune documentation technique n'est disponible."
709
+ else:
710
+ section["content"] += "\n\nAucune documentation technique n'a été générée."
711
+
712
+ return section
713
+
714
+ def _build_ai_act_analytics_section(self, order: int) -> Dict[str, Any]:
715
+ """Construit la section d'analytiques AI Act avec graphiques."""
716
+ section = {
717
+ "title": "Analyses et Visualisations",
718
+ "content": "Cette section présente des visualisations des données de conformité AI Act.",
719
+ "order": order,
720
+ "visualizations": []
721
+ }
722
+
723
+ # N'ajouter des visualisations que si des données sont disponibles
724
+ if self.ai_act_manager:
725
+ requirements = self.ai_act_manager.get_applicable_requirements()
726
+ risks = self.ai_act_manager.get_identified_risks()
727
+ risk_mitigations = self.ai_act_manager.get_risk_mitigation_measures()
728
+
729
+ # 1. Répartition des exigences par statut de conformité
730
+ if requirements:
731
+ status_data = {"compliant": 0, "partial": 0, "non_compliant": 0, "unknown": 0}
732
+ for req in requirements:
733
+ status = req.get("status", "unknown")
734
+ status_data[status] = status_data.get(status, 0) + 1
735
+
736
+ if sum(status_data.values()) > 0:
737
+ compliance_chart = {
738
+ "title": "Répartition des Exigences par Statut",
739
+ "chart_type": "pie",
740
+ "data": {
741
+ "labels": ["Conforme", "Partiellement conforme", "Non conforme", "Inconnu"],
742
+ "values": [status_data["compliant"], status_data["partial"], status_data["non_compliant"], status_data["unknown"]]
743
+ }
744
+ }
745
+ section["visualizations"].append(compliance_chart)
746
+
747
+ # 2. Répartition des exigences par catégorie
748
+ if requirements:
749
+ category_data = {}
750
+ for req in requirements:
751
+ category = req.get("category", "Autres")
752
+ category_data[category] = category_data.get(category, 0) + 1
753
+
754
+ if category_data:
755
+ category_chart = {
756
+ "title": "Répartition des Exigences par Catégorie",
757
+ "chart_type": "bar",
758
+ "data": {
759
+ "labels": list(category_data.keys()),
760
+ "values": list(category_data.values())
761
+ }
762
+ }
763
+ section["visualizations"].append(category_chart)
764
+
765
+ # 3. Niveau de risque global des risques identifiés
766
+ if risks:
767
+ risk_level_data = {"high": 0, "medium": 0, "low": 0}
768
+ for risk in risks:
769
+ risk_level = risk.get("risk_level", "medium")
770
+ risk_level_data[risk_level] = risk_level_data.get(risk_level, 0) + 1
771
+
772
+ if sum(risk_level_data.values()) > 0:
773
+ risk_chart = {
774
+ "title": "Niveaux de Risque Identifiés",
775
+ "chart_type": "pie",
776
+ "data": {
777
+ "labels": ["Elevé", "Moyen", "Faible"],
778
+ "values": [risk_level_data["high"], risk_level_data["medium"], risk_level_data["low"]]
779
+ }
780
+ }
781
+ section["visualizations"].append(risk_chart)
782
+
783
+ # 4. Couverture des risques par des mesures d'atténuation
784
+ if risks and risk_mitigations:
785
+ # Calculer le pourcentage de risques couverts par des mesures
786
+ risk_ids = {r.get("risk_id") for r in risks if "risk_id" in r}
787
+ covered_risks = {m.get("target_risk_id") for m in risk_mitigations if "target_risk_id" in m}
788
+ covered_count = len(risk_ids.intersection(covered_risks))
789
+
790
+ if risk_ids: # Éviter la division par zéro
791
+ coverage_percentage = (covered_count / len(risk_ids)) * 100
792
+
793
+ coverage_chart = {
794
+ "title": "Couverture des Risques par des Mesures d'Atténuation",
795
+ "chart_type": "gauge",
796
+ "data": {
797
+ "value": coverage_percentage,
798
+ "min": 0,
799
+ "max": 100,
800
+ "threshold_low": 30,
801
+ "threshold_mid": 70
802
+ }
803
+ }
804
+ section["visualizations"].append(coverage_chart)
805
+
806
+ if not section.get("visualizations"):
807
+ section["content"] += "\n\nAucune donnée suffisante pour générer des visualisations."
808
+
809
+ return section
810
+
811
+ def _select_formatters(self, output_formats: List[str]) -> List[BaseReportFormatter]:
812
+ """Sélectionne les formateurs selon les formats demandés."""
813
+ selected = []
814
+ format_map = {f.format_name: f for f in self.formatters}
815
+
816
+ for fmt in output_formats:
817
+ if fmt in format_map:
818
+ selected.append(format_map[fmt])
819
+
820
+ return selected if selected else self.formatters