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.
- venv/Lib/site-packages/_distutils_hack/__init__.py +222 -0
- venv/Lib/site-packages/_distutils_hack/override.py +1 -0
- venv/Lib/site-packages/pip/__init__.py +13 -0
- venv/Lib/site-packages/pip/__main__.py +24 -0
- venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
- venv/Lib/site-packages/pip/_internal/__init__.py +19 -0
- venv/Lib/site-packages/pip/_internal/build_env.py +311 -0
- venv/Lib/site-packages/pip/_internal/cache.py +292 -0
- venv/Lib/site-packages/pip/_internal/cli/__init__.py +4 -0
- venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +171 -0
- venv/Lib/site-packages/pip/_internal/cli/base_command.py +236 -0
- venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1074 -0
- venv/Lib/site-packages/pip/_internal/cli/command_context.py +27 -0
- venv/Lib/site-packages/pip/_internal/cli/main.py +79 -0
- venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
- venv/Lib/site-packages/pip/_internal/cli/parser.py +294 -0
- venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +68 -0
- venv/Lib/site-packages/pip/_internal/cli/req_command.py +508 -0
- venv/Lib/site-packages/pip/_internal/cli/spinners.py +159 -0
- venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
- venv/Lib/site-packages/pip/_internal/commands/__init__.py +132 -0
- venv/Lib/site-packages/pip/_internal/commands/cache.py +222 -0
- venv/Lib/site-packages/pip/_internal/commands/check.py +54 -0
- venv/Lib/site-packages/pip/_internal/commands/completion.py +121 -0
- venv/Lib/site-packages/pip/_internal/commands/configuration.py +282 -0
- venv/Lib/site-packages/pip/_internal/commands/debug.py +199 -0
- venv/Lib/site-packages/pip/_internal/commands/download.py +147 -0
- venv/Lib/site-packages/pip/_internal/commands/freeze.py +108 -0
- venv/Lib/site-packages/pip/_internal/commands/hash.py +59 -0
- venv/Lib/site-packages/pip/_internal/commands/help.py +41 -0
- venv/Lib/site-packages/pip/_internal/commands/index.py +139 -0
- venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
- venv/Lib/site-packages/pip/_internal/commands/install.py +778 -0
- venv/Lib/site-packages/pip/_internal/commands/list.py +368 -0
- venv/Lib/site-packages/pip/_internal/commands/search.py +174 -0
- venv/Lib/site-packages/pip/_internal/commands/show.py +189 -0
- venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
- venv/Lib/site-packages/pip/_internal/commands/wheel.py +183 -0
- venv/Lib/site-packages/pip/_internal/configuration.py +381 -0
- venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
- venv/Lib/site-packages/pip/_internal/distributions/base.py +39 -0
- venv/Lib/site-packages/pip/_internal/distributions/installed.py +23 -0
- venv/Lib/site-packages/pip/_internal/distributions/sdist.py +150 -0
- venv/Lib/site-packages/pip/_internal/distributions/wheel.py +34 -0
- venv/Lib/site-packages/pip/_internal/exceptions.py +733 -0
- venv/Lib/site-packages/pip/_internal/index/__init__.py +2 -0
- venv/Lib/site-packages/pip/_internal/index/collector.py +505 -0
- venv/Lib/site-packages/pip/_internal/index/package_finder.py +1029 -0
- venv/Lib/site-packages/pip/_internal/index/sources.py +223 -0
- venv/Lib/site-packages/pip/_internal/locations/__init__.py +467 -0
- venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
- venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +213 -0
- venv/Lib/site-packages/pip/_internal/locations/base.py +81 -0
- venv/Lib/site-packages/pip/_internal/main.py +12 -0
- venv/Lib/site-packages/pip/_internal/metadata/__init__.py +127 -0
- venv/Lib/site-packages/pip/_internal/metadata/_json.py +84 -0
- venv/Lib/site-packages/pip/_internal/metadata/base.py +688 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +4 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +55 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +224 -0
- venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +188 -0
- venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +270 -0
- venv/Lib/site-packages/pip/_internal/models/__init__.py +2 -0
- venv/Lib/site-packages/pip/_internal/models/candidate.py +34 -0
- venv/Lib/site-packages/pip/_internal/models/direct_url.py +237 -0
- venv/Lib/site-packages/pip/_internal/models/format_control.py +80 -0
- venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
- venv/Lib/site-packages/pip/_internal/models/installation_report.py +53 -0
- venv/Lib/site-packages/pip/_internal/models/link.py +581 -0
- venv/Lib/site-packages/pip/_internal/models/scheme.py +31 -0
- venv/Lib/site-packages/pip/_internal/models/search_scope.py +132 -0
- venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +51 -0
- venv/Lib/site-packages/pip/_internal/models/target_python.py +110 -0
- venv/Lib/site-packages/pip/_internal/models/wheel.py +92 -0
- venv/Lib/site-packages/pip/_internal/network/__init__.py +2 -0
- venv/Lib/site-packages/pip/_internal/network/auth.py +561 -0
- venv/Lib/site-packages/pip/_internal/network/cache.py +69 -0
- venv/Lib/site-packages/pip/_internal/network/download.py +186 -0
- venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +210 -0
- venv/Lib/site-packages/pip/_internal/network/session.py +519 -0
- venv/Lib/site-packages/pip/_internal/network/utils.py +96 -0
- venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +60 -0
- venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +124 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +39 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
- venv/Lib/site-packages/pip/_internal/operations/build/metadata_legacy.py +74 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +37 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +46 -0
- venv/Lib/site-packages/pip/_internal/operations/build/wheel_legacy.py +102 -0
- venv/Lib/site-packages/pip/_internal/operations/check.py +187 -0
- venv/Lib/site-packages/pip/_internal/operations/freeze.py +255 -0
- venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +2 -0
- venv/Lib/site-packages/pip/_internal/operations/install/editable_legacy.py +46 -0
- venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +740 -0
- venv/Lib/site-packages/pip/_internal/operations/prepare.py +743 -0
- venv/Lib/site-packages/pip/_internal/pyproject.py +179 -0
- venv/Lib/site-packages/pip/_internal/req/__init__.py +92 -0
- venv/Lib/site-packages/pip/_internal/req/constructors.py +506 -0
- venv/Lib/site-packages/pip/_internal/req/req_file.py +552 -0
- venv/Lib/site-packages/pip/_internal/req/req_install.py +874 -0
- venv/Lib/site-packages/pip/_internal/req/req_set.py +119 -0
- venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +650 -0
- venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
- venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +600 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +141 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +555 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +730 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +155 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +255 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +80 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +165 -0
- venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +299 -0
- venv/Lib/site-packages/pip/_internal/self_outdated_check.py +242 -0
- venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
- venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
- venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
- venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
- venv/Lib/site-packages/pip/_internal/utils/compat.py +63 -0
- venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +165 -0
- venv/Lib/site-packages/pip/_internal/utils/datetime.py +11 -0
- venv/Lib/site-packages/pip/_internal/utils/deprecation.py +120 -0
- venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
- venv/Lib/site-packages/pip/_internal/utils/egg_link.py +72 -0
- venv/Lib/site-packages/pip/_internal/utils/encoding.py +36 -0
- venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +84 -0
- venv/Lib/site-packages/pip/_internal/utils/filesystem.py +153 -0
- venv/Lib/site-packages/pip/_internal/utils/filetypes.py +27 -0
- venv/Lib/site-packages/pip/_internal/utils/glibc.py +88 -0
- venv/Lib/site-packages/pip/_internal/utils/hashes.py +151 -0
- venv/Lib/site-packages/pip/_internal/utils/inject_securetransport.py +35 -0
- venv/Lib/site-packages/pip/_internal/utils/logging.py +348 -0
- venv/Lib/site-packages/pip/_internal/utils/misc.py +735 -0
- venv/Lib/site-packages/pip/_internal/utils/models.py +39 -0
- venv/Lib/site-packages/pip/_internal/utils/packaging.py +57 -0
- venv/Lib/site-packages/pip/_internal/utils/setuptools_build.py +146 -0
- venv/Lib/site-packages/pip/_internal/utils/subprocess.py +260 -0
- venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +246 -0
- venv/Lib/site-packages/pip/_internal/utils/unpacking.py +257 -0
- venv/Lib/site-packages/pip/_internal/utils/urls.py +62 -0
- venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +104 -0
- venv/Lib/site-packages/pip/_internal/utils/wheel.py +136 -0
- venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
- venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +112 -0
- venv/Lib/site-packages/pip/_internal/vcs/git.py +526 -0
- venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +163 -0
- venv/Lib/site-packages/pip/_internal/vcs/subversion.py +324 -0
- venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +705 -0
- venv/Lib/site-packages/pip/_internal/wheel_builder.py +355 -0
- venv/Lib/site-packages/pip/_vendor/__init__.py +120 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +18 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +61 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +137 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +65 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +9 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +188 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +39 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/compat.py +32 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +439 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +111 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +139 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +190 -0
- venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +33 -0
- venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
- venv/Lib/site-packages/pip/_vendor/certifi/core.py +108 -0
- venv/Lib/site-packages/pip/_vendor/chardet/__init__.py +115 -0
- venv/Lib/site-packages/pip/_vendor/chardet/big5freq.py +386 -0
- venv/Lib/site-packages/pip/_vendor/chardet/big5prober.py +47 -0
- venv/Lib/site-packages/pip/_vendor/chardet/chardistribution.py +261 -0
- venv/Lib/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
- venv/Lib/site-packages/pip/_vendor/chardet/charsetprober.py +147 -0
- venv/Lib/site-packages/pip/_vendor/chardet/cli/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/chardet/cli/chardetect.py +112 -0
- venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachine.py +90 -0
- venv/Lib/site-packages/pip/_vendor/chardet/codingstatemachinedict.py +19 -0
- venv/Lib/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
- venv/Lib/site-packages/pip/_vendor/chardet/enums.py +85 -0
- venv/Lib/site-packages/pip/_vendor/chardet/escprober.py +102 -0
- venv/Lib/site-packages/pip/_vendor/chardet/escsm.py +261 -0
- venv/Lib/site-packages/pip/_vendor/chardet/eucjpprober.py +102 -0
- venv/Lib/site-packages/pip/_vendor/chardet/euckrfreq.py +196 -0
- venv/Lib/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
- venv/Lib/site-packages/pip/_vendor/chardet/euctwfreq.py +388 -0
- venv/Lib/site-packages/pip/_vendor/chardet/euctwprober.py +47 -0
- venv/Lib/site-packages/pip/_vendor/chardet/gb2312freq.py +284 -0
- venv/Lib/site-packages/pip/_vendor/chardet/gb2312prober.py +47 -0
- venv/Lib/site-packages/pip/_vendor/chardet/hebrewprober.py +316 -0
- venv/Lib/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
- venv/Lib/site-packages/pip/_vendor/chardet/johabfreq.py +2382 -0
- venv/Lib/site-packages/pip/_vendor/chardet/johabprober.py +47 -0
- venv/Lib/site-packages/pip/_vendor/chardet/jpcntx.py +238 -0
- venv/Lib/site-packages/pip/_vendor/chardet/langbulgarianmodel.py +4649 -0
- venv/Lib/site-packages/pip/_vendor/chardet/langgreekmodel.py +4397 -0
- venv/Lib/site-packages/pip/_vendor/chardet/langhebrewmodel.py +4380 -0
- venv/Lib/site-packages/pip/_vendor/chardet/langhungarianmodel.py +4649 -0
- venv/Lib/site-packages/pip/_vendor/chardet/langrussianmodel.py +5725 -0
- venv/Lib/site-packages/pip/_vendor/chardet/langthaimodel.py +4380 -0
- venv/Lib/site-packages/pip/_vendor/chardet/langturkishmodel.py +4380 -0
- venv/Lib/site-packages/pip/_vendor/chardet/latin1prober.py +147 -0
- venv/Lib/site-packages/pip/_vendor/chardet/macromanprober.py +162 -0
- venv/Lib/site-packages/pip/_vendor/chardet/mbcharsetprober.py +95 -0
- venv/Lib/site-packages/pip/_vendor/chardet/mbcsgroupprober.py +57 -0
- venv/Lib/site-packages/pip/_vendor/chardet/mbcssm.py +661 -0
- venv/Lib/site-packages/pip/_vendor/chardet/metadata/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/chardet/metadata/languages.py +352 -0
- venv/Lib/site-packages/pip/_vendor/chardet/resultdict.py +16 -0
- venv/Lib/site-packages/pip/_vendor/chardet/sbcharsetprober.py +162 -0
- venv/Lib/site-packages/pip/_vendor/chardet/sbcsgroupprober.py +88 -0
- venv/Lib/site-packages/pip/_vendor/chardet/sjisprober.py +105 -0
- venv/Lib/site-packages/pip/_vendor/chardet/universaldetector.py +362 -0
- venv/Lib/site-packages/pip/_vendor/chardet/utf1632prober.py +225 -0
- venv/Lib/site-packages/pip/_vendor/chardet/utf8prober.py +82 -0
- venv/Lib/site-packages/pip/_vendor/chardet/version.py +9 -0
- venv/Lib/site-packages/pip/_vendor/colorama/__init__.py +7 -0
- venv/Lib/site-packages/pip/_vendor/colorama/ansi.py +102 -0
- venv/Lib/site-packages/pip/_vendor/colorama/ansitowin32.py +277 -0
- venv/Lib/site-packages/pip/_vendor/colorama/initialise.py +121 -0
- venv/Lib/site-packages/pip/_vendor/colorama/tests/__init__.py +1 -0
- venv/Lib/site-packages/pip/_vendor/colorama/tests/ansi_test.py +76 -0
- venv/Lib/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py +294 -0
- venv/Lib/site-packages/pip/_vendor/colorama/tests/initialise_test.py +189 -0
- venv/Lib/site-packages/pip/_vendor/colorama/tests/isatty_test.py +57 -0
- venv/Lib/site-packages/pip/_vendor/colorama/tests/utils.py +49 -0
- venv/Lib/site-packages/pip/_vendor/colorama/tests/winterm_test.py +131 -0
- venv/Lib/site-packages/pip/_vendor/colorama/win32.py +180 -0
- venv/Lib/site-packages/pip/_vendor/colorama/winterm.py +195 -0
- venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +23 -0
- venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1116 -0
- venv/Lib/site-packages/pip/_vendor/distlib/database.py +1350 -0
- venv/Lib/site-packages/pip/_vendor/distlib/index.py +508 -0
- venv/Lib/site-packages/pip/_vendor/distlib/locators.py +1300 -0
- venv/Lib/site-packages/pip/_vendor/distlib/manifest.py +393 -0
- venv/Lib/site-packages/pip/_vendor/distlib/markers.py +152 -0
- venv/Lib/site-packages/pip/_vendor/distlib/metadata.py +1076 -0
- venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
- venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +437 -0
- venv/Lib/site-packages/pip/_vendor/distlib/util.py +1932 -0
- venv/Lib/site-packages/pip/_vendor/distlib/version.py +739 -0
- venv/Lib/site-packages/pip/_vendor/distlib/wheel.py +1082 -0
- venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
- venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
- venv/Lib/site-packages/pip/_vendor/distro/distro.py +1399 -0
- venv/Lib/site-packages/pip/_vendor/idna/__init__.py +44 -0
- venv/Lib/site-packages/pip/_vendor/idna/codec.py +112 -0
- venv/Lib/site-packages/pip/_vendor/idna/compat.py +13 -0
- venv/Lib/site-packages/pip/_vendor/idna/core.py +400 -0
- venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +2151 -0
- venv/Lib/site-packages/pip/_vendor/idna/intranges.py +54 -0
- venv/Lib/site-packages/pip/_vendor/idna/package_data.py +2 -0
- venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8600 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +57 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +193 -0
- venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +1010 -0
- venv/Lib/site-packages/pip/_vendor/packaging/__about__.py +26 -0
- venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +25 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +301 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +136 -0
- venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
- venv/Lib/site-packages/pip/_vendor/packaging/markers.py +304 -0
- venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +146 -0
- venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +802 -0
- venv/Lib/site-packages/pip/_vendor/packaging/tags.py +487 -0
- venv/Lib/site-packages/pip/_vendor/packaging/utils.py +136 -0
- venv/Lib/site-packages/pip/_vendor/packaging/version.py +504 -0
- venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3361 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +566 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +53 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +210 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +223 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +91 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +223 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +4 -0
- venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +255 -0
- venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
- venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
- venv/Lib/site-packages/pip/_vendor/pygments/cmdline.py +668 -0
- venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
- venv/Lib/site-packages/pip/_vendor/pygments/filter.py +71 -0
- venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +124 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +158 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/bbcode.py +108 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/groff.py +170 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/html.py +989 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/img.py +645 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/irc.py +154 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/latex.py +521 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/other.py +161 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py +83 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/rtf.py +146 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/svg.py +188 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal.py +127 -0
- venv/Lib/site-packages/pip/_vendor/pygments/formatters/terminal256.py +338 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +943 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +559 -0
- venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1198 -0
- venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
- venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +88 -0
- venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
- venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
- venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +217 -0
- venv/Lib/site-packages/pip/_vendor/pygments/style.py +197 -0
- venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +103 -0
- venv/Lib/site-packages/pip/_vendor/pygments/token.py +213 -0
- venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
- venv/Lib/site-packages/pip/_vendor/pygments/util.py +330 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/__init__.py +322 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/actions.py +217 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/common.py +432 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/core.py +6115 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/diagram/__init__.py +656 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/exceptions.py +299 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/helpers.py +1100 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/results.py +796 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/testing.py +331 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/unicode.py +361 -0
- venv/Lib/site-packages/pip/_vendor/pyparsing/util.py +284 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +23 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_compat.py +8 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +330 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +18 -0
- venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +353 -0
- venv/Lib/site-packages/pip/_vendor/requests/__init__.py +182 -0
- venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
- venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
- venv/Lib/site-packages/pip/_vendor/requests/adapters.py +538 -0
- venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
- venv/Lib/site-packages/pip/_vendor/requests/auth.py +315 -0
- venv/Lib/site-packages/pip/_vendor/requests/certs.py +24 -0
- venv/Lib/site-packages/pip/_vendor/requests/compat.py +67 -0
- venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
- venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +141 -0
- venv/Lib/site-packages/pip/_vendor/requests/help.py +131 -0
- venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
- venv/Lib/site-packages/pip/_vendor/requests/models.py +1034 -0
- venv/Lib/site-packages/pip/_vendor/requests/packages.py +16 -0
- venv/Lib/site-packages/pip/_vendor/requests/sessions.py +833 -0
- venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
- venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
- venv/Lib/site-packages/pip/_vendor/requests/utils.py +1094 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +26 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/compat/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py +6 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +133 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +43 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers.py +547 -0
- venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +170 -0
- venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
- venv/Lib/site-packages/pip/_vendor/rich/__main__.py +274 -0
- venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +451 -0
- venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
- venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
- venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
- venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
- venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
- venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +270 -0
- venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
- venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
- venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
- venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
- venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
- venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +160 -0
- venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
- venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
- venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
- venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +662 -0
- venv/Lib/site-packages/pip/_vendor/rich/_windows.py +72 -0
- venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
- venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +56 -0
- venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
- venv/Lib/site-packages/pip/_vendor/rich/align.py +311 -0
- venv/Lib/site-packages/pip/_vendor/rich/ansi.py +240 -0
- venv/Lib/site-packages/pip/_vendor/rich/bar.py +94 -0
- venv/Lib/site-packages/pip/_vendor/rich/box.py +517 -0
- venv/Lib/site-packages/pip/_vendor/rich/cells.py +154 -0
- venv/Lib/site-packages/pip/_vendor/rich/color.py +622 -0
- venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
- venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
- venv/Lib/site-packages/pip/_vendor/rich/console.py +2633 -0
- venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
- venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
- venv/Lib/site-packages/pip/_vendor/rich/control.py +225 -0
- venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +190 -0
- venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +37 -0
- venv/Lib/site-packages/pip/_vendor/rich/emoji.py +96 -0
- venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
- venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
- venv/Lib/site-packages/pip/_vendor/rich/filesize.py +89 -0
- venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
- venv/Lib/site-packages/pip/_vendor/rich/json.py +140 -0
- venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
- venv/Lib/site-packages/pip/_vendor/rich/layout.py +443 -0
- venv/Lib/site-packages/pip/_vendor/rich/live.py +375 -0
- venv/Lib/site-packages/pip/_vendor/rich/live_render.py +113 -0
- venv/Lib/site-packages/pip/_vendor/rich/logging.py +289 -0
- venv/Lib/site-packages/pip/_vendor/rich/markup.py +246 -0
- venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
- venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
- venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
- venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
- venv/Lib/site-packages/pip/_vendor/rich/panel.py +308 -0
- venv/Lib/site-packages/pip/_vendor/rich/pretty.py +994 -0
- venv/Lib/site-packages/pip/_vendor/rich/progress.py +1702 -0
- venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +224 -0
- venv/Lib/site-packages/pip/_vendor/rich/prompt.py +376 -0
- venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
- venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
- venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
- venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
- venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
- venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
- venv/Lib/site-packages/pip/_vendor/rich/segment.py +739 -0
- venv/Lib/site-packages/pip/_vendor/rich/spinner.py +137 -0
- venv/Lib/site-packages/pip/_vendor/rich/status.py +132 -0
- venv/Lib/site-packages/pip/_vendor/rich/style.py +796 -0
- venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
- venv/Lib/site-packages/pip/_vendor/rich/syntax.py +948 -0
- venv/Lib/site-packages/pip/_vendor/rich/table.py +1002 -0
- venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
- venv/Lib/site-packages/pip/_vendor/rich/text.py +1307 -0
- venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
- venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
- venv/Lib/site-packages/pip/_vendor/rich/traceback.py +756 -0
- venv/Lib/site-packages/pip/_vendor/rich/tree.py +251 -0
- venv/Lib/site-packages/pip/_vendor/six.py +998 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/__init__.py +608 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/_asyncio.py +94 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/_utils.py +76 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/after.py +51 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/before.py +46 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/before_sleep.py +71 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/nap.py +43 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/retry.py +272 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/stop.py +103 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/tornadoweb.py +59 -0
- venv/Lib/site-packages/pip/_vendor/tenacity/wait.py +228 -0
- venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +11 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +691 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_re.py +107 -0
- venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
- venv/Lib/site-packages/pip/_vendor/typing_extensions.py +3072 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +337 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1132 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +921 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +537 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/request.py +170 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +620 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +495 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
- venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
- venv/Lib/site-packages/pip/_vendor/webencodings/__init__.py +342 -0
- venv/Lib/site-packages/pip/_vendor/webencodings/labels.py +231 -0
- venv/Lib/site-packages/pip/_vendor/webencodings/mklabels.py +59 -0
- venv/Lib/site-packages/pip/_vendor/webencodings/tests.py +153 -0
- venv/Lib/site-packages/pip/_vendor/webencodings/x_user_defined.py +325 -0
- venv/Lib/site-packages/pip/py.typed +4 -0
- venv/Lib/site-packages/pkg_resources/__init__.py +3296 -0
- venv/Lib/site-packages/pkg_resources/_vendor/__init__.py +0 -0
- venv/Lib/site-packages/pkg_resources/_vendor/appdirs.py +608 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/__init__.py +36 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_adapters.py +170 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_common.py +104 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_compat.py +98 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_itertools.py +35 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/_legacy.py +121 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/abc.py +137 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/readers.py +122 -0
- venv/Lib/site-packages/pkg_resources/_vendor/importlib_resources/simple.py +116 -0
- venv/Lib/site-packages/pkg_resources/_vendor/jaraco/__init__.py +0 -0
- venv/Lib/site-packages/pkg_resources/_vendor/jaraco/context.py +213 -0
- venv/Lib/site-packages/pkg_resources/_vendor/jaraco/functools.py +525 -0
- venv/Lib/site-packages/pkg_resources/_vendor/jaraco/text/__init__.py +599 -0
- venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/__init__.py +4 -0
- venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/more.py +4316 -0
- venv/Lib/site-packages/pkg_resources/_vendor/more_itertools/recipes.py +698 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/__about__.py +26 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/__init__.py +25 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/_manylinux.py +301 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/_musllinux.py +136 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/_structures.py +61 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/markers.py +304 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/requirements.py +146 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/specifiers.py +802 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/tags.py +487 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/utils.py +136 -0
- venv/Lib/site-packages/pkg_resources/_vendor/packaging/version.py +504 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/__init__.py +331 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/actions.py +207 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/common.py +424 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/core.py +5814 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/diagram/__init__.py +642 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/exceptions.py +267 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/helpers.py +1088 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/results.py +760 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/testing.py +331 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/unicode.py +352 -0
- venv/Lib/site-packages/pkg_resources/_vendor/pyparsing/util.py +235 -0
- venv/Lib/site-packages/pkg_resources/_vendor/zipp.py +329 -0
- venv/Lib/site-packages/pkg_resources/extern/__init__.py +76 -0
- venv/Lib/site-packages/setuptools/__init__.py +247 -0
- venv/Lib/site-packages/setuptools/_deprecation_warning.py +7 -0
- venv/Lib/site-packages/setuptools/_distutils/__init__.py +24 -0
- venv/Lib/site-packages/setuptools/_distutils/_collections.py +56 -0
- venv/Lib/site-packages/setuptools/_distutils/_functools.py +20 -0
- venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
- venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +572 -0
- venv/Lib/site-packages/setuptools/_distutils/archive_util.py +280 -0
- venv/Lib/site-packages/setuptools/_distutils/bcppcompiler.py +408 -0
- venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +1220 -0
- venv/Lib/site-packages/setuptools/_distutils/cmd.py +436 -0
- venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +25 -0
- venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +55 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +157 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +144 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +615 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build.py +153 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +208 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +787 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +407 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +173 -0
- venv/Lib/site-packages/setuptools/_distutils/command/check.py +151 -0
- venv/Lib/site-packages/setuptools/_distutils/command/clean.py +76 -0
- venv/Lib/site-packages/setuptools/_distutils/command/config.py +377 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install.py +814 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +84 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +91 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +45 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +238 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +61 -0
- venv/Lib/site-packages/setuptools/_distutils/command/py37compat.py +31 -0
- venv/Lib/site-packages/setuptools/_distutils/command/register.py +319 -0
- venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +531 -0
- venv/Lib/site-packages/setuptools/_distutils/command/upload.py +205 -0
- venv/Lib/site-packages/setuptools/_distutils/config.py +139 -0
- venv/Lib/site-packages/setuptools/_distutils/core.py +291 -0
- venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +364 -0
- venv/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
- venv/Lib/site-packages/setuptools/_distutils/dep_util.py +96 -0
- venv/Lib/site-packages/setuptools/_distutils/dir_util.py +243 -0
- venv/Lib/site-packages/setuptools/_distutils/dist.py +1286 -0
- venv/Lib/site-packages/setuptools/_distutils/errors.py +127 -0
- venv/Lib/site-packages/setuptools/_distutils/extension.py +248 -0
- venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +470 -0
- venv/Lib/site-packages/setuptools/_distutils/file_util.py +249 -0
- venv/Lib/site-packages/setuptools/_distutils/filelist.py +371 -0
- venv/Lib/site-packages/setuptools/_distutils/log.py +80 -0
- venv/Lib/site-packages/setuptools/_distutils/msvc9compiler.py +832 -0
- venv/Lib/site-packages/setuptools/_distutils/msvccompiler.py +695 -0
- venv/Lib/site-packages/setuptools/_distutils/py38compat.py +8 -0
- venv/Lib/site-packages/setuptools/_distutils/py39compat.py +22 -0
- venv/Lib/site-packages/setuptools/_distutils/spawn.py +109 -0
- venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +558 -0
- venv/Lib/site-packages/setuptools/_distutils/text_file.py +287 -0
- venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +401 -0
- venv/Lib/site-packages/setuptools/_distutils/util.py +513 -0
- venv/Lib/site-packages/setuptools/_distutils/version.py +358 -0
- venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
- venv/Lib/site-packages/setuptools/_entry_points.py +86 -0
- venv/Lib/site-packages/setuptools/_imp.py +82 -0
- venv/Lib/site-packages/setuptools/_importlib.py +47 -0
- venv/Lib/site-packages/setuptools/_itertools.py +23 -0
- venv/Lib/site-packages/setuptools/_path.py +29 -0
- venv/Lib/site-packages/setuptools/_reqs.py +19 -0
- venv/Lib/site-packages/setuptools/_vendor/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1047 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +68 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +71 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +48 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/__init__.py +36 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_adapters.py +170 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_common.py +104 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_compat.py +98 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_itertools.py +35 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/_legacy.py +121 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/abc.py +137 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/readers.py +122 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_resources/simple.py +116 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py +213 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/functools.py +525 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +599 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +4 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +3824 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +620 -0
- venv/Lib/site-packages/setuptools/_vendor/ordered_set.py +488 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/__about__.py +26 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +25 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +301 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +136 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +304 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +146 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +802 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +487 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +136 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +504 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/__init__.py +331 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/actions.py +207 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/common.py +424 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/core.py +5814 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/diagram/__init__.py +642 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/exceptions.py +267 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/helpers.py +1088 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/results.py +760 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/testing.py +331 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/unicode.py +352 -0
- venv/Lib/site-packages/setuptools/_vendor/pyparsing/util.py +235 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
- venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py +2296 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp.py +329 -0
- venv/Lib/site-packages/setuptools/archive_util.py +213 -0
- venv/Lib/site-packages/setuptools/build_meta.py +511 -0
- venv/Lib/site-packages/setuptools/command/__init__.py +12 -0
- venv/Lib/site-packages/setuptools/command/alias.py +78 -0
- venv/Lib/site-packages/setuptools/command/bdist_egg.py +457 -0
- venv/Lib/site-packages/setuptools/command/bdist_rpm.py +40 -0
- venv/Lib/site-packages/setuptools/command/build.py +146 -0
- venv/Lib/site-packages/setuptools/command/build_clib.py +101 -0
- venv/Lib/site-packages/setuptools/command/build_ext.py +383 -0
- venv/Lib/site-packages/setuptools/command/build_py.py +368 -0
- venv/Lib/site-packages/setuptools/command/develop.py +193 -0
- venv/Lib/site-packages/setuptools/command/dist_info.py +142 -0
- venv/Lib/site-packages/setuptools/command/easy_install.py +2312 -0
- venv/Lib/site-packages/setuptools/command/editable_wheel.py +844 -0
- venv/Lib/site-packages/setuptools/command/egg_info.py +763 -0
- venv/Lib/site-packages/setuptools/command/install.py +139 -0
- venv/Lib/site-packages/setuptools/command/install_egg_info.py +63 -0
- venv/Lib/site-packages/setuptools/command/install_lib.py +122 -0
- venv/Lib/site-packages/setuptools/command/install_scripts.py +70 -0
- venv/Lib/site-packages/setuptools/command/py36compat.py +134 -0
- venv/Lib/site-packages/setuptools/command/register.py +18 -0
- venv/Lib/site-packages/setuptools/command/rotate.py +64 -0
- venv/Lib/site-packages/setuptools/command/saveopts.py +22 -0
- venv/Lib/site-packages/setuptools/command/sdist.py +210 -0
- venv/Lib/site-packages/setuptools/command/setopt.py +149 -0
- venv/Lib/site-packages/setuptools/command/test.py +251 -0
- venv/Lib/site-packages/setuptools/command/upload.py +17 -0
- venv/Lib/site-packages/setuptools/command/upload_docs.py +213 -0
- venv/Lib/site-packages/setuptools/config/__init__.py +35 -0
- venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +377 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +318 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +36 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1035 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +259 -0
- venv/Lib/site-packages/setuptools/config/expand.py +462 -0
- venv/Lib/site-packages/setuptools/config/pyprojecttoml.py +493 -0
- venv/Lib/site-packages/setuptools/config/setupcfg.py +762 -0
- venv/Lib/site-packages/setuptools/dep_util.py +25 -0
- venv/Lib/site-packages/setuptools/depends.py +176 -0
- venv/Lib/site-packages/setuptools/discovery.py +600 -0
- venv/Lib/site-packages/setuptools/dist.py +1222 -0
- venv/Lib/site-packages/setuptools/errors.py +58 -0
- venv/Lib/site-packages/setuptools/extension.py +148 -0
- venv/Lib/site-packages/setuptools/extern/__init__.py +76 -0
- venv/Lib/site-packages/setuptools/glob.py +167 -0
- venv/Lib/site-packages/setuptools/installer.py +104 -0
- venv/Lib/site-packages/setuptools/launch.py +36 -0
- venv/Lib/site-packages/setuptools/logging.py +36 -0
- venv/Lib/site-packages/setuptools/monkey.py +165 -0
- venv/Lib/site-packages/setuptools/msvc.py +1703 -0
- venv/Lib/site-packages/setuptools/namespaces.py +107 -0
- venv/Lib/site-packages/setuptools/package_index.py +1126 -0
- venv/Lib/site-packages/setuptools/py34compat.py +13 -0
- venv/Lib/site-packages/setuptools/sandbox.py +530 -0
- venv/Lib/site-packages/setuptools/unicode_utils.py +42 -0
- venv/Lib/site-packages/setuptools/version.py +6 -0
- venv/Lib/site-packages/setuptools/wheel.py +222 -0
- venv/Lib/site-packages/setuptools/windows_support.py +29 -0
- xplia/__init__.py +72 -0
- xplia/api/__init__.py +432 -0
- xplia/api/fastapi_app.py +453 -0
- xplia/cli.py +321 -0
- xplia/compliance/__init__.py +39 -0
- xplia/compliance/ai_act.py +538 -0
- xplia/compliance/compliance_checker.py +511 -0
- xplia/compliance/compliance_report.py +236 -0
- xplia/compliance/expert_review/__init__.py +18 -0
- xplia/compliance/expert_review/evaluation_criteria.py +209 -0
- xplia/compliance/expert_review/integration.py +270 -0
- xplia/compliance/expert_review/trust_expert_evaluator.py +379 -0
- xplia/compliance/explanation_rights.py +45 -0
- xplia/compliance/formatters/__init__.py +35 -0
- xplia/compliance/formatters/csv_formatter.py +179 -0
- xplia/compliance/formatters/html_formatter.py +689 -0
- xplia/compliance/formatters/html_trust_formatter.py +147 -0
- xplia/compliance/formatters/json_formatter.py +107 -0
- xplia/compliance/formatters/pdf_formatter.py +641 -0
- xplia/compliance/formatters/pdf_trust_formatter.py +309 -0
- xplia/compliance/formatters/trust_formatter_mixin.py +267 -0
- xplia/compliance/formatters/xml_formatter.py +173 -0
- xplia/compliance/gdpr.py +803 -0
- xplia/compliance/hipaa.py +134 -0
- xplia/compliance/report_base.py +205 -0
- xplia/compliance/report_generator.py +820 -0
- xplia/compliance/translations.py +299 -0
- xplia/core/__init__.py +98 -0
- xplia/core/base.py +391 -0
- xplia/core/config.py +297 -0
- xplia/core/factory.py +416 -0
- xplia/core/model_adapters/__init__.py +47 -0
- xplia/core/model_adapters/base.py +160 -0
- xplia/core/model_adapters/pytorch_adapter.py +339 -0
- xplia/core/model_adapters/sklearn_adapter.py +215 -0
- xplia/core/model_adapters/tensorflow_adapter.py +280 -0
- xplia/core/model_adapters/xgboost_adapter.py +295 -0
- xplia/core/optimizations.py +322 -0
- xplia/core/performance/__init__.py +57 -0
- xplia/core/performance/cache_manager.py +502 -0
- xplia/core/performance/memory_optimizer.py +465 -0
- xplia/core/performance/parallel_executor.py +327 -0
- xplia/core/registry.py +1234 -0
- xplia/explainers/__init__.py +70 -0
- xplia/explainers/__init__updated.py +62 -0
- xplia/explainers/adaptive/__init__.py +24 -0
- xplia/explainers/adaptive/explainer_selector.py +405 -0
- xplia/explainers/adaptive/explanation_quality.py +395 -0
- xplia/explainers/adaptive/fusion_strategies.py +297 -0
- xplia/explainers/adaptive/meta_explainer.py +320 -0
- xplia/explainers/adversarial/__init__.py +21 -0
- xplia/explainers/adversarial/adversarial_xai.py +678 -0
- xplia/explainers/anchor_explainer.py +1769 -0
- xplia/explainers/attention_explainer.py +996 -0
- xplia/explainers/bayesian/__init__.py +8 -0
- xplia/explainers/bayesian/bayesian_explainer.py +127 -0
- xplia/explainers/bias/__init__.py +17 -0
- xplia/explainers/bias/advanced_bias_detection.py +934 -0
- xplia/explainers/calibration/__init__.py +26 -0
- xplia/explainers/calibration/audience_adapter.py +376 -0
- xplia/explainers/calibration/audience_profiles.py +372 -0
- xplia/explainers/calibration/calibration_metrics.py +299 -0
- xplia/explainers/calibration/explanation_calibrator.py +460 -0
- xplia/explainers/causal/__init__.py +19 -0
- xplia/explainers/causal/causal_inference.py +669 -0
- xplia/explainers/certified/__init__.py +21 -0
- xplia/explainers/certified/certified_explanations.py +619 -0
- xplia/explainers/continual/__init__.py +8 -0
- xplia/explainers/continual/continual_explainer.py +102 -0
- xplia/explainers/counterfactual_explainer.py +804 -0
- xplia/explainers/counterfactuals/__init__.py +17 -0
- xplia/explainers/counterfactuals/advanced_counterfactuals.py +259 -0
- xplia/explainers/expert_evaluator.py +538 -0
- xplia/explainers/feature_importance_explainer.py +376 -0
- xplia/explainers/federated/__init__.py +17 -0
- xplia/explainers/federated/federated_xai.py +664 -0
- xplia/explainers/generative/__init__.py +15 -0
- xplia/explainers/generative/generative_explainer.py +243 -0
- xplia/explainers/gradient_explainer.py +3590 -0
- xplia/explainers/graph/__init__.py +26 -0
- xplia/explainers/graph/gnn_explainer.py +638 -0
- xplia/explainers/graph/molecular_explainer.py +438 -0
- xplia/explainers/lime_explainer.py +1580 -0
- xplia/explainers/llm/__init__.py +23 -0
- xplia/explainers/llm/llm_explainability.py +737 -0
- xplia/explainers/metalearning/__init__.py +15 -0
- xplia/explainers/metalearning/metalearning_explainer.py +276 -0
- xplia/explainers/moe/__init__.py +8 -0
- xplia/explainers/moe/moe_explainer.py +108 -0
- xplia/explainers/multimodal/__init__.py +30 -0
- xplia/explainers/multimodal/base.py +262 -0
- xplia/explainers/multimodal/diffusion_explainer.py +608 -0
- xplia/explainers/multimodal/foundation_model_explainer.py +323 -0
- xplia/explainers/multimodal/registry.py +139 -0
- xplia/explainers/multimodal/text_image_explainer.py +381 -0
- xplia/explainers/multimodal/vision_language_explainer.py +608 -0
- xplia/explainers/nas/__init__.py +5 -0
- xplia/explainers/nas/nas_explainer.py +65 -0
- xplia/explainers/neuralodes/__init__.py +5 -0
- xplia/explainers/neuralodes/neuralode_explainer.py +64 -0
- xplia/explainers/neurosymbolic/__init__.py +8 -0
- xplia/explainers/neurosymbolic/neurosymbolic_explainer.py +97 -0
- xplia/explainers/partial_dependence_explainer.py +509 -0
- xplia/explainers/privacy/__init__.py +21 -0
- xplia/explainers/privacy/differential_privacy_xai.py +624 -0
- xplia/explainers/quantum/__init__.py +5 -0
- xplia/explainers/quantum/quantum_explainer.py +79 -0
- xplia/explainers/recommender/__init__.py +8 -0
- xplia/explainers/recommender/recsys_explainer.py +124 -0
- xplia/explainers/reinforcement/__init__.py +15 -0
- xplia/explainers/reinforcement/rl_explainer.py +173 -0
- xplia/explainers/shap_explainer.py +2238 -0
- xplia/explainers/streaming/__init__.py +19 -0
- xplia/explainers/streaming/streaming_xai.py +703 -0
- xplia/explainers/timeseries/__init__.py +15 -0
- xplia/explainers/timeseries/timeseries_explainer.py +252 -0
- xplia/explainers/trust/__init__.py +24 -0
- xplia/explainers/trust/confidence_report.py +368 -0
- xplia/explainers/trust/fairwashing.py +489 -0
- xplia/explainers/trust/uncertainty.py +453 -0
- xplia/explainers/unified_explainer.py +566 -0
- xplia/explainers/unified_explainer_utils.py +309 -0
- xplia/integrations/__init__.py +3 -0
- xplia/integrations/mlflow_integration.py +331 -0
- xplia/integrations/wandb_integration.py +375 -0
- xplia/plugins/__init__.py +36 -0
- xplia/plugins/example_visualizer.py +11 -0
- xplia/utils/__init__.py +18 -0
- xplia/utils/performance.py +119 -0
- xplia/utils/validation.py +109 -0
- xplia/visualizations/__init__.py +31 -0
- xplia/visualizations/base.py +256 -0
- xplia/visualizations/boxplot_chart.py +224 -0
- xplia/visualizations/charts_impl.py +65 -0
- xplia/visualizations/gauge_chart.py +211 -0
- xplia/visualizations/gradient_viz.py +117 -0
- xplia/visualizations/heatmap_chart.py +173 -0
- xplia/visualizations/histogram_chart.py +176 -0
- xplia/visualizations/line_chart.py +100 -0
- xplia/visualizations/pie_chart.py +134 -0
- xplia/visualizations/radar_chart.py +154 -0
- xplia/visualizations/registry.py +76 -0
- xplia/visualizations/sankey_chart.py +190 -0
- xplia/visualizations/scatter_chart.py +252 -0
- xplia/visualizations/table_chart.py +263 -0
- xplia/visualizations/treemap_chart.py +216 -0
- xplia/visualizations.py +535 -0
- xplia/visualizers/__init__.py +87 -0
- xplia/visualizers/base_visualizer.py +294 -0
- xplia-1.0.1.dist-info/METADATA +685 -0
- xplia-1.0.1.dist-info/RECORD +870 -0
- xplia-1.0.1.dist-info/WHEEL +5 -0
- xplia-1.0.1.dist-info/entry_points.txt +2 -0
- xplia-1.0.1.dist-info/licenses/LICENSE +21 -0
- xplia-1.0.1.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Adaptateur pour les modèles TensorFlow/Keras
|
|
3
|
+
=========================================
|
|
4
|
+
|
|
5
|
+
Ce module fournit un adaptateur pour les modèles TensorFlow et Keras.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any, Dict, List, Optional, Union, Tuple
|
|
9
|
+
import numpy as np
|
|
10
|
+
import pandas as pd
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import tensorflow as tf
|
|
14
|
+
from tensorflow.keras.models import Model as KerasModel
|
|
15
|
+
TENSORFLOW_AVAILABLE = True
|
|
16
|
+
except ImportError:
|
|
17
|
+
TENSORFLOW_AVAILABLE = False
|
|
18
|
+
# Définitions minimales pour la compatibilité des types
|
|
19
|
+
class KerasModel: pass
|
|
20
|
+
|
|
21
|
+
from ...core import ModelMetadata, ModelType, ModelAdapterBase # Import depuis le package principal
|
|
22
|
+
from ...core.registry import register_model_adapter
|
|
23
|
+
from ...utils.tensor_utils import convert_to_numpy
|
|
24
|
+
|
|
25
|
+
@register_model_adapter(version="1.0.0", description="Adaptateur pour les modèles TensorFlow")
|
|
26
|
+
class TensorFlowModelAdapter(ModelAdapterBase):
|
|
27
|
+
"""
|
|
28
|
+
Adaptateur pour les modèles TensorFlow/Keras.
|
|
29
|
+
|
|
30
|
+
Cet adaptateur prend en charge:
|
|
31
|
+
- Les modèles Keras séquentiels et fonctionnels
|
|
32
|
+
- Les modèles TensorFlow 2.x avec API d'exportation
|
|
33
|
+
- Les modèles de classification et de régression
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(self, model: Any, **kwargs):
|
|
37
|
+
"""
|
|
38
|
+
Initialise l'adaptateur pour un modèle TensorFlow/Keras.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
model: Modèle TensorFlow/Keras à adapter
|
|
42
|
+
**kwargs: Arguments additionnels
|
|
43
|
+
- input_shape: Forme des données d'entrée (obligatoire si non déterminable)
|
|
44
|
+
- output_shape: Forme des données de sortie (optionnel)
|
|
45
|
+
- classification: Booléen indiquant si c'est un modèle de classification (optionnel)
|
|
46
|
+
- classes: Liste des classes pour les modèles de classification (optionnel)
|
|
47
|
+
"""
|
|
48
|
+
if not TENSORFLOW_AVAILABLE:
|
|
49
|
+
raise ImportError("TensorFlow n'est pas installé. Installez-le avec 'pip install tensorflow'.")
|
|
50
|
+
|
|
51
|
+
# Vérifier que le modèle est un modèle TensorFlow/Keras valide
|
|
52
|
+
if not isinstance(model, (tf.Module, KerasModel)) and not callable(getattr(model, '__call__', None)):
|
|
53
|
+
raise ValueError("Le modèle doit être une instance de tf.Module, tf.keras.Model ou un callable")
|
|
54
|
+
|
|
55
|
+
self._input_shape = kwargs.get('input_shape', None)
|
|
56
|
+
self._output_shape = kwargs.get('output_shape', None)
|
|
57
|
+
self._is_classification = kwargs.get('classification', None)
|
|
58
|
+
self._classes = kwargs.get('classes', None)
|
|
59
|
+
|
|
60
|
+
super().__init__(model, **kwargs)
|
|
61
|
+
self._framework = "tensorflow"
|
|
62
|
+
|
|
63
|
+
# Déterminer le type de modèle si non spécifié
|
|
64
|
+
if self._is_classification is None:
|
|
65
|
+
self._infer_model_type()
|
|
66
|
+
else:
|
|
67
|
+
self._model_type = ModelType.CLASSIFICATION if self._is_classification else ModelType.REGRESSION
|
|
68
|
+
|
|
69
|
+
def _infer_model_type(self):
|
|
70
|
+
"""Détermine le type de modèle (classification ou régression)."""
|
|
71
|
+
# Pour les modèles Keras, on peut souvent déterminer à partir de la dernière couche
|
|
72
|
+
if isinstance(self.model, KerasModel) and self.model.layers:
|
|
73
|
+
last_layer = self.model.layers[-1]
|
|
74
|
+
last_activation = getattr(last_layer, 'activation', None)
|
|
75
|
+
|
|
76
|
+
# Si la dernière activation est softmax ou sigmoid, c'est probablement une classification
|
|
77
|
+
if last_activation:
|
|
78
|
+
if last_activation.__name__ in ['softmax', 'sigmoid']:
|
|
79
|
+
self._model_type = ModelType.CLASSIFICATION
|
|
80
|
+
return
|
|
81
|
+
|
|
82
|
+
# Vérifier le nom de la dernière couche
|
|
83
|
+
if 'classifier' in last_layer.name.lower():
|
|
84
|
+
self._model_type = ModelType.CLASSIFICATION
|
|
85
|
+
return
|
|
86
|
+
|
|
87
|
+
# Par défaut, on suppose que c'est une régression
|
|
88
|
+
self._model_type = ModelType.REGRESSION
|
|
89
|
+
|
|
90
|
+
def _extract_metadata(self, **kwargs) -> ModelMetadata:
|
|
91
|
+
"""Extrait les métadonnées du modèle TensorFlow/Keras."""
|
|
92
|
+
model_class = self.model.__class__.__name__
|
|
93
|
+
|
|
94
|
+
# Extraire la structure du modèle pour les modèles Keras
|
|
95
|
+
model_structure = {}
|
|
96
|
+
if isinstance(self.model, KerasModel):
|
|
97
|
+
try:
|
|
98
|
+
# Récupérer les informations sur les couches
|
|
99
|
+
layers_info = []
|
|
100
|
+
for layer in self.model.layers:
|
|
101
|
+
layer_info = {
|
|
102
|
+
'name': layer.name,
|
|
103
|
+
'class': layer.__class__.__name__,
|
|
104
|
+
'output_shape': str(layer.output_shape),
|
|
105
|
+
'params': layer.count_params()
|
|
106
|
+
}
|
|
107
|
+
if hasattr(layer, 'activation'):
|
|
108
|
+
layer_info['activation'] = layer.activation.__name__ if callable(layer.activation) else str(layer.activation)
|
|
109
|
+
layers_info.append(layer_info)
|
|
110
|
+
|
|
111
|
+
model_structure = {
|
|
112
|
+
'layers': layers_info,
|
|
113
|
+
'total_params': self.model.count_params(),
|
|
114
|
+
'trainable_params': sum(tf.keras.backend.count_params(w) for w in self.model.trainable_weights),
|
|
115
|
+
'non_trainable_params': sum(tf.keras.backend.count_params(w) for w in self.model.non_trainable_weights)
|
|
116
|
+
}
|
|
117
|
+
except:
|
|
118
|
+
# En cas d'erreur, on capture silencieusement
|
|
119
|
+
pass
|
|
120
|
+
|
|
121
|
+
# Déterminer les formes d'entrée et de sortie
|
|
122
|
+
input_shape = self._input_shape
|
|
123
|
+
output_shape = self._output_shape
|
|
124
|
+
|
|
125
|
+
if input_shape is None and isinstance(self.model, KerasModel) and hasattr(self.model, 'input_shape'):
|
|
126
|
+
input_shape = self.model.input_shape
|
|
127
|
+
|
|
128
|
+
if output_shape is None and isinstance(self.model, KerasModel) and hasattr(self.model, 'output_shape'):
|
|
129
|
+
output_shape = self.model.output_shape
|
|
130
|
+
|
|
131
|
+
# Extraire les classes pour les modèles de classification
|
|
132
|
+
classes = self._classes
|
|
133
|
+
|
|
134
|
+
# Construire les métadonnées
|
|
135
|
+
return ModelMetadata(
|
|
136
|
+
framework='tensorflow',
|
|
137
|
+
model_type=self._model_type,
|
|
138
|
+
model_class=model_class,
|
|
139
|
+
classes=classes,
|
|
140
|
+
feature_names=self.get_feature_names(),
|
|
141
|
+
model_params={}, # Les paramètres Keras sont trop complexes pour être sérialisés simplement
|
|
142
|
+
training_info={
|
|
143
|
+
'input_shape': input_shape,
|
|
144
|
+
'output_shape': output_shape,
|
|
145
|
+
'model_structure': model_structure
|
|
146
|
+
}
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
def predict(self, X: Union[np.ndarray, pd.DataFrame, tf.Tensor], **kwargs) -> np.ndarray:
|
|
150
|
+
"""
|
|
151
|
+
Effectue une prédiction avec le modèle.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
X: Données d'entrée (numpy array, pandas DataFrame ou TensorFlow tensor)
|
|
155
|
+
**kwargs: Arguments additionnels pour la prédiction
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
Prédictions du modèle sous forme de numpy array
|
|
159
|
+
"""
|
|
160
|
+
# Convertir les données en format approprié
|
|
161
|
+
if isinstance(X, pd.DataFrame):
|
|
162
|
+
X_array = X.values
|
|
163
|
+
else:
|
|
164
|
+
X_array = X
|
|
165
|
+
|
|
166
|
+
# Effectuer la prédiction
|
|
167
|
+
predictions = self.model(X_array, **kwargs)
|
|
168
|
+
|
|
169
|
+
# Convertir le résultat en numpy array
|
|
170
|
+
return convert_to_numpy(predictions)
|
|
171
|
+
|
|
172
|
+
def predict_proba(self, X: Union[np.ndarray, pd.DataFrame, tf.Tensor], **kwargs) -> np.ndarray:
|
|
173
|
+
"""
|
|
174
|
+
Retourne les probabilités de prédiction.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
X: Données d'entrée
|
|
178
|
+
**kwargs: Arguments additionnels pour la prédiction
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
Probabilités de prédiction (shape: n_samples, n_classes)
|
|
182
|
+
|
|
183
|
+
Raises:
|
|
184
|
+
NotImplementedError: Si le modèle n'est pas un modèle de classification
|
|
185
|
+
"""
|
|
186
|
+
if self._model_type != ModelType.CLASSIFICATION:
|
|
187
|
+
raise NotImplementedError("Ce modèle n'est pas un modèle de classification")
|
|
188
|
+
|
|
189
|
+
# Pour les modèles Keras, predict retourne déjà les probabilités
|
|
190
|
+
predictions = self.predict(X, **kwargs)
|
|
191
|
+
|
|
192
|
+
# Si la sortie est un scalaire ou un vecteur 1D, le transformer en format binaire
|
|
193
|
+
if predictions.ndim == 1 or (predictions.ndim == 2 and predictions.shape[1] == 1):
|
|
194
|
+
probs = predictions.flatten()
|
|
195
|
+
return np.vstack([1 - probs, probs]).T
|
|
196
|
+
|
|
197
|
+
return predictions
|
|
198
|
+
|
|
199
|
+
def get_gradients(self, X: Union[np.ndarray, pd.DataFrame], target_idx: Optional[int] = None) -> np.ndarray:
|
|
200
|
+
"""
|
|
201
|
+
Calcule les gradients de la sortie par rapport à l'entrée.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
X: Données d'entrée
|
|
205
|
+
target_idx: Indice de la classe cible (pour les modèles de classification)
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Gradients (même forme que X)
|
|
209
|
+
|
|
210
|
+
Raises:
|
|
211
|
+
NotImplementedError: Si TensorFlow n'est pas disponible
|
|
212
|
+
"""
|
|
213
|
+
if not TENSORFLOW_AVAILABLE:
|
|
214
|
+
raise NotImplementedError("TensorFlow n'est pas disponible")
|
|
215
|
+
|
|
216
|
+
# Convertir les données en format approprié
|
|
217
|
+
if isinstance(X, pd.DataFrame):
|
|
218
|
+
X_array = X.values
|
|
219
|
+
else:
|
|
220
|
+
X_array = X
|
|
221
|
+
|
|
222
|
+
# Convertir en tensor TensorFlow
|
|
223
|
+
if not isinstance(X_array, tf.Tensor):
|
|
224
|
+
X_tensor = tf.convert_to_tensor(X_array, dtype=tf.float32)
|
|
225
|
+
else:
|
|
226
|
+
X_tensor = X_array
|
|
227
|
+
|
|
228
|
+
# Calculer les gradients
|
|
229
|
+
with tf.GradientTape() as tape:
|
|
230
|
+
tape.watch(X_tensor)
|
|
231
|
+
predictions = self.model(X_tensor)
|
|
232
|
+
|
|
233
|
+
# Pour les modèles de classification multi-classe, sélectionner la classe cible
|
|
234
|
+
if predictions.shape[-1] > 1 and target_idx is not None:
|
|
235
|
+
predictions = predictions[:, target_idx]
|
|
236
|
+
|
|
237
|
+
gradients = tape.gradient(predictions, X_tensor)
|
|
238
|
+
|
|
239
|
+
return convert_to_numpy(gradients)
|
|
240
|
+
|
|
241
|
+
def get_layer_outputs(self, X: Union[np.ndarray, pd.DataFrame], layer_name: str) -> np.ndarray:
|
|
242
|
+
"""
|
|
243
|
+
Retourne les sorties d'une couche spécifique pour une entrée donnée.
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
X: Données d'entrée
|
|
247
|
+
layer_name: Nom de la couche
|
|
248
|
+
|
|
249
|
+
Returns:
|
|
250
|
+
Sorties de la couche
|
|
251
|
+
|
|
252
|
+
Raises:
|
|
253
|
+
ValueError: Si le modèle n'est pas un modèle Keras ou si la couche n'existe pas
|
|
254
|
+
"""
|
|
255
|
+
if not isinstance(self.model, KerasModel):
|
|
256
|
+
raise ValueError("Cette méthode n'est disponible que pour les modèles Keras")
|
|
257
|
+
|
|
258
|
+
# Trouver la couche par son nom
|
|
259
|
+
layer = None
|
|
260
|
+
for l in self.model.layers:
|
|
261
|
+
if l.name == layer_name:
|
|
262
|
+
layer = l
|
|
263
|
+
break
|
|
264
|
+
|
|
265
|
+
if layer is None:
|
|
266
|
+
raise ValueError(f"Couche '{layer_name}' non trouvée dans le modèle")
|
|
267
|
+
|
|
268
|
+
# Créer un modèle intermédiaire qui retourne la sortie de la couche
|
|
269
|
+
intermediate_model = tf.keras.Model(inputs=self.model.input, outputs=layer.output)
|
|
270
|
+
|
|
271
|
+
# Convertir les données en format approprié
|
|
272
|
+
if isinstance(X, pd.DataFrame):
|
|
273
|
+
X_array = X.values
|
|
274
|
+
else:
|
|
275
|
+
X_array = X
|
|
276
|
+
|
|
277
|
+
# Obtenir les sorties de la couche
|
|
278
|
+
layer_outputs = intermediate_model(X_array)
|
|
279
|
+
|
|
280
|
+
return convert_to_numpy(layer_outputs)
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Adaptateur pour les modèles XGBoost
|
|
3
|
+
=================================
|
|
4
|
+
|
|
5
|
+
Ce module fournit un adaptateur pour les modèles XGBoost.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any, Dict, List, Optional, Union
|
|
9
|
+
import numpy as np
|
|
10
|
+
import pandas as pd
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import xgboost as xgb
|
|
14
|
+
XGBOOST_AVAILABLE = True
|
|
15
|
+
except ImportError:
|
|
16
|
+
XGBOOST_AVAILABLE = False
|
|
17
|
+
# Définitions minimales pour la compatibilité des types
|
|
18
|
+
class xgb:
|
|
19
|
+
class Booster: pass
|
|
20
|
+
class DMatrix: pass
|
|
21
|
+
|
|
22
|
+
from ...core import ModelMetadata, ModelType, ModelAdapterBase # Import depuis le package principal
|
|
23
|
+
from ...core.registry import register_model_adapter
|
|
24
|
+
|
|
25
|
+
@register_model_adapter(version="1.0.0", description="Adaptateur pour les modèles XGBoost")
|
|
26
|
+
class XGBoostModelAdapter(ModelAdapterBase):
|
|
27
|
+
"""
|
|
28
|
+
Adaptateur pour les modèles XGBoost.
|
|
29
|
+
|
|
30
|
+
Cet adaptateur prend en charge:
|
|
31
|
+
- Les modèles XGBoost (Booster)
|
|
32
|
+
- Les modèles de classification et de régression
|
|
33
|
+
- L'extraction des importances de caractéristiques
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(self, model: Any, **kwargs):
|
|
37
|
+
"""
|
|
38
|
+
Initialise l'adaptateur pour un modèle XGBoost.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
model: Modèle XGBoost à adapter (peut être un Booster ou un wrapper scikit-learn)
|
|
42
|
+
**kwargs: Arguments additionnels
|
|
43
|
+
- objective: Objectif du modèle ('binary:logistic', 'multi:softprob', 'reg:squarederror', etc.)
|
|
44
|
+
- num_class: Nombre de classes pour les modèles multi-classes
|
|
45
|
+
- feature_names: Noms des caractéristiques
|
|
46
|
+
"""
|
|
47
|
+
if not XGBOOST_AVAILABLE:
|
|
48
|
+
raise ImportError("XGBoost n'est pas installé. Installez-le avec 'pip install xgboost'.")
|
|
49
|
+
|
|
50
|
+
# Extraire le booster si c'est un wrapper scikit-learn
|
|
51
|
+
if hasattr(model, 'get_booster'):
|
|
52
|
+
self._sklearn_wrapper = model
|
|
53
|
+
model = model.get_booster()
|
|
54
|
+
else:
|
|
55
|
+
self._sklearn_wrapper = None
|
|
56
|
+
|
|
57
|
+
# Vérifier que le modèle est un modèle XGBoost valide
|
|
58
|
+
if not isinstance(model, xgb.Booster) and not hasattr(model, 'predict'):
|
|
59
|
+
raise ValueError("Le modèle doit être une instance de xgboost.Booster ou avoir une méthode predict")
|
|
60
|
+
|
|
61
|
+
self._objective = kwargs.get('objective', getattr(model, 'objective', None))
|
|
62
|
+
self._num_class = kwargs.get('num_class', None)
|
|
63
|
+
|
|
64
|
+
super().__init__(model, **kwargs)
|
|
65
|
+
self._framework = "xgboost"
|
|
66
|
+
|
|
67
|
+
# Extraire les noms de caractéristiques si disponibles
|
|
68
|
+
if kwargs.get('feature_names'):
|
|
69
|
+
self.set_feature_names(kwargs.get('feature_names'))
|
|
70
|
+
elif hasattr(model, 'feature_names'):
|
|
71
|
+
self.set_feature_names(model.feature_names)
|
|
72
|
+
elif self._sklearn_wrapper and hasattr(self._sklearn_wrapper, 'feature_names_in_'):
|
|
73
|
+
self.set_feature_names(self._sklearn_wrapper.feature_names_in_.tolist())
|
|
74
|
+
|
|
75
|
+
# Déterminer le type de modèle
|
|
76
|
+
self._infer_model_type()
|
|
77
|
+
|
|
78
|
+
def _infer_model_type(self):
|
|
79
|
+
"""Détermine le type de modèle (classification ou régression)."""
|
|
80
|
+
# Si l'objectif est spécifié, l'utiliser pour déterminer le type
|
|
81
|
+
if self._objective:
|
|
82
|
+
if any(obj in self._objective for obj in ['binary', 'multi', 'softmax', 'softprob']):
|
|
83
|
+
self._model_type = ModelType.CLASSIFICATION
|
|
84
|
+
else:
|
|
85
|
+
self._model_type = ModelType.REGRESSION
|
|
86
|
+
# Sinon, essayer de déterminer à partir du wrapper scikit-learn
|
|
87
|
+
elif self._sklearn_wrapper:
|
|
88
|
+
if hasattr(self._sklearn_wrapper, 'classes_'):
|
|
89
|
+
self._model_type = ModelType.CLASSIFICATION
|
|
90
|
+
# Extraire le nombre de classes
|
|
91
|
+
self._num_class = len(self._sklearn_wrapper.classes_)
|
|
92
|
+
else:
|
|
93
|
+
self._model_type = ModelType.REGRESSION
|
|
94
|
+
# Par défaut, supposer que c'est une régression
|
|
95
|
+
else:
|
|
96
|
+
self._model_type = ModelType.REGRESSION
|
|
97
|
+
|
|
98
|
+
def _extract_metadata(self, **kwargs) -> ModelMetadata:
|
|
99
|
+
"""Extrait les métadonnées du modèle XGBoost."""
|
|
100
|
+
# Extraire les paramètres du modèle
|
|
101
|
+
try:
|
|
102
|
+
if hasattr(self.model, 'get_params'):
|
|
103
|
+
model_params = self.model.get_params()
|
|
104
|
+
elif hasattr(self.model, 'save_config'):
|
|
105
|
+
import json
|
|
106
|
+
model_params = json.loads(self.model.save_config())
|
|
107
|
+
else:
|
|
108
|
+
model_params = {}
|
|
109
|
+
except:
|
|
110
|
+
model_params = {}
|
|
111
|
+
|
|
112
|
+
# Extraire les classes pour les modèles de classification
|
|
113
|
+
classes = None
|
|
114
|
+
if self._model_type == ModelType.CLASSIFICATION:
|
|
115
|
+
if self._sklearn_wrapper and hasattr(self._sklearn_wrapper, 'classes_'):
|
|
116
|
+
classes = self._sklearn_wrapper.classes_.tolist()
|
|
117
|
+
|
|
118
|
+
# Extraire les informations sur l'entraînement
|
|
119
|
+
training_info = {}
|
|
120
|
+
if hasattr(self.model, 'attributes'):
|
|
121
|
+
attrs = self.model.attributes()
|
|
122
|
+
if 'best_iteration' in attrs:
|
|
123
|
+
training_info['best_iteration'] = int(attrs['best_iteration'])
|
|
124
|
+
if 'best_score' in attrs:
|
|
125
|
+
training_info['best_score'] = float(attrs['best_score'])
|
|
126
|
+
|
|
127
|
+
# Ajouter l'objectif et le nombre de classes
|
|
128
|
+
if self._objective:
|
|
129
|
+
training_info['objective'] = self._objective
|
|
130
|
+
if self._num_class:
|
|
131
|
+
training_info['num_class'] = self._num_class
|
|
132
|
+
|
|
133
|
+
return ModelMetadata(
|
|
134
|
+
framework='xgboost',
|
|
135
|
+
model_type=self._model_type,
|
|
136
|
+
model_class='XGBoostModel',
|
|
137
|
+
classes=classes,
|
|
138
|
+
feature_names=self.get_feature_names(),
|
|
139
|
+
model_params=model_params,
|
|
140
|
+
training_info=training_info
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
def _create_dmatrix(self, X: Union[np.ndarray, pd.DataFrame]) -> xgb.DMatrix:
|
|
144
|
+
"""
|
|
145
|
+
Crée une DMatrix XGBoost à partir des données d'entrée.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
X: Données d'entrée (numpy array ou pandas DataFrame)
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
xgb.DMatrix: Données converties en DMatrix XGBoost
|
|
152
|
+
"""
|
|
153
|
+
feature_names = self.get_feature_names()
|
|
154
|
+
|
|
155
|
+
# Si c'est déjà une DMatrix, la retourner telle quelle
|
|
156
|
+
if isinstance(X, xgb.DMatrix):
|
|
157
|
+
return X
|
|
158
|
+
|
|
159
|
+
# Créer une DMatrix avec les noms de caractéristiques si disponibles
|
|
160
|
+
if feature_names:
|
|
161
|
+
return xgb.DMatrix(data=X, feature_names=feature_names)
|
|
162
|
+
else:
|
|
163
|
+
return xgb.DMatrix(data=X)
|
|
164
|
+
|
|
165
|
+
def predict(self, X: Union[np.ndarray, pd.DataFrame, xgb.DMatrix], **kwargs) -> np.ndarray:
|
|
166
|
+
"""
|
|
167
|
+
Effectue une prédiction avec le modèle.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
X: Données d'entrée (numpy array, pandas DataFrame ou XGBoost DMatrix)
|
|
171
|
+
**kwargs: Arguments additionnels pour la prédiction
|
|
172
|
+
- output_margin: Si True, retourne les scores bruts avant transformation
|
|
173
|
+
|
|
174
|
+
Returns:
|
|
175
|
+
Prédictions du modèle sous forme de numpy array
|
|
176
|
+
"""
|
|
177
|
+
# Si c'est un wrapper scikit-learn, utiliser sa méthode predict
|
|
178
|
+
if self._sklearn_wrapper:
|
|
179
|
+
return self._sklearn_wrapper.predict(X)
|
|
180
|
+
|
|
181
|
+
# Sinon, utiliser directement le booster
|
|
182
|
+
output_margin = kwargs.get('output_margin', False)
|
|
183
|
+
|
|
184
|
+
# Convertir en DMatrix si nécessaire
|
|
185
|
+
if not isinstance(X, xgb.DMatrix):
|
|
186
|
+
X_dmatrix = self._create_dmatrix(X)
|
|
187
|
+
else:
|
|
188
|
+
X_dmatrix = X
|
|
189
|
+
|
|
190
|
+
# Pour les modèles de classification multi-classe
|
|
191
|
+
if self._model_type == ModelType.CLASSIFICATION and self._num_class and self._num_class > 2:
|
|
192
|
+
# Prédire les probabilités et prendre la classe avec la probabilité maximale
|
|
193
|
+
probs = self.model.predict(X_dmatrix, output_margin=output_margin)
|
|
194
|
+
if probs.ndim > 1:
|
|
195
|
+
return np.argmax(probs, axis=1)
|
|
196
|
+
else:
|
|
197
|
+
return (probs > 0.5).astype(int) # Cas binaire
|
|
198
|
+
else:
|
|
199
|
+
# Prédiction standard
|
|
200
|
+
preds = self.model.predict(X_dmatrix, output_margin=output_margin)
|
|
201
|
+
|
|
202
|
+
# Pour la classification binaire, convertir les probabilités en classes
|
|
203
|
+
if self._model_type == ModelType.CLASSIFICATION and not output_margin:
|
|
204
|
+
return (preds > 0.5).astype(int)
|
|
205
|
+
else:
|
|
206
|
+
return preds
|
|
207
|
+
|
|
208
|
+
def predict_proba(self, X: Union[np.ndarray, pd.DataFrame, xgb.DMatrix], **kwargs) -> np.ndarray:
|
|
209
|
+
"""
|
|
210
|
+
Retourne les probabilités de prédiction.
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
X: Données d'entrée
|
|
214
|
+
**kwargs: Arguments additionnels pour la prédiction
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
Probabilités de prédiction (shape: n_samples, n_classes)
|
|
218
|
+
|
|
219
|
+
Raises:
|
|
220
|
+
NotImplementedError: Si le modèle n'est pas un modèle de classification
|
|
221
|
+
"""
|
|
222
|
+
if self._model_type != ModelType.CLASSIFICATION:
|
|
223
|
+
raise NotImplementedError("Ce modèle n'est pas un modèle de classification")
|
|
224
|
+
|
|
225
|
+
# Si c'est un wrapper scikit-learn, utiliser sa méthode predict_proba
|
|
226
|
+
if self._sklearn_wrapper and hasattr(self._sklearn_wrapper, 'predict_proba'):
|
|
227
|
+
return self._sklearn_wrapper.predict_proba(X)
|
|
228
|
+
|
|
229
|
+
# Convertir en DMatrix si nécessaire
|
|
230
|
+
if not isinstance(X, xgb.DMatrix):
|
|
231
|
+
X_dmatrix = self._create_dmatrix(X)
|
|
232
|
+
else:
|
|
233
|
+
X_dmatrix = X
|
|
234
|
+
|
|
235
|
+
# Prédire les probabilités
|
|
236
|
+
probs = self.model.predict(X_dmatrix, output_margin=False)
|
|
237
|
+
|
|
238
|
+
# Pour les modèles binaires, convertir en format [1-p, p]
|
|
239
|
+
if probs.ndim == 1 or (probs.ndim == 2 and probs.shape[1] == 1):
|
|
240
|
+
probs = probs.flatten()
|
|
241
|
+
return np.vstack([1 - probs, probs]).T
|
|
242
|
+
|
|
243
|
+
return probs
|
|
244
|
+
|
|
245
|
+
def get_feature_importance(self, importance_type: str = 'weight') -> Dict[str, float]:
|
|
246
|
+
"""
|
|
247
|
+
Retourne l'importance des caractéristiques.
|
|
248
|
+
|
|
249
|
+
Args:
|
|
250
|
+
importance_type: Type d'importance ('weight', 'gain', 'cover', 'total_gain', 'total_cover')
|
|
251
|
+
|
|
252
|
+
Returns:
|
|
253
|
+
Dict[str, float]: Dictionnaire des importances
|
|
254
|
+
"""
|
|
255
|
+
# Obtenir les scores d'importance
|
|
256
|
+
scores = self.model.get_score(importance_type=importance_type)
|
|
257
|
+
|
|
258
|
+
# Si les noms de caractéristiques sont disponibles, les utiliser
|
|
259
|
+
feature_names = self.get_feature_names()
|
|
260
|
+
if feature_names:
|
|
261
|
+
# Créer un dictionnaire avec toutes les caractéristiques (même celles avec score 0)
|
|
262
|
+
result = {name: 0.0 for name in feature_names}
|
|
263
|
+
# Mettre à jour avec les scores disponibles
|
|
264
|
+
result.update(scores)
|
|
265
|
+
return result
|
|
266
|
+
else:
|
|
267
|
+
return scores
|
|
268
|
+
|
|
269
|
+
def get_model_summary(self) -> Dict[str, Any]:
|
|
270
|
+
"""
|
|
271
|
+
Retourne un résumé détaillé du modèle.
|
|
272
|
+
|
|
273
|
+
Returns:
|
|
274
|
+
dict: Dictionnaire contenant les informations du modèle
|
|
275
|
+
"""
|
|
276
|
+
summary = super().get_model_summary()
|
|
277
|
+
|
|
278
|
+
# Ajouter des informations spécifiques à XGBoost
|
|
279
|
+
feature_importance = self.get_feature_importance()
|
|
280
|
+
|
|
281
|
+
summary.update({
|
|
282
|
+
'objective': self._objective,
|
|
283
|
+
'num_class': self._num_class,
|
|
284
|
+
'feature_importance': feature_importance,
|
|
285
|
+
'is_sklearn_wrapper': self._sklearn_wrapper is not None
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
# Ajouter des informations sur l'arbre si disponibles
|
|
289
|
+
try:
|
|
290
|
+
num_trees = len(self.model.get_dump())
|
|
291
|
+
summary['num_trees'] = num_trees
|
|
292
|
+
except:
|
|
293
|
+
pass
|
|
294
|
+
|
|
295
|
+
return summary
|