diff --git a/build/FactorioSync/Analysis-00.toc b/build/FactorioSync/Analysis-00.toc
deleted file mode 100644
index 482f8b4..0000000
--- a/build/FactorioSync/Analysis-00.toc
+++ /dev/null
@@ -1,2428 +0,0 @@
-(['/home/borderban/Рабочий стол/client-py/client.py'],
- ['/home/borderban/Рабочий стол/client-py'],
- [],
- [('/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks',
- -1000),
- ('/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib',
- -1000)],
- {},
- [],
- [],
- False,
- {},
- 0,
- [],
- [],
- '3.12.3 (main, Mar 3 2026, 12:15:18) [GCC 13.3.0]',
- [('pyi_rth_inspect',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
- 'PYSOURCE'),
- ('pyi_rth__tkinter',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py',
- 'PYSOURCE'),
- ('pyi_rth_setuptools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_setuptools.py',
- 'PYSOURCE'),
- ('pyi_rth_pkgutil',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py',
- 'PYSOURCE'),
- ('pyi_rth_multiprocessing',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py',
- 'PYSOURCE'),
- ('client', '/home/borderban/Рабочий стол/client-py/client.py', 'PYSOURCE')],
- [('subprocess', '/usr/lib/python3.12/subprocess.py', 'PYMODULE'),
- ('selectors', '/usr/lib/python3.12/selectors.py', 'PYMODULE'),
- ('contextlib', '/usr/lib/python3.12/contextlib.py', 'PYMODULE'),
- ('signal', '/usr/lib/python3.12/signal.py', 'PYMODULE'),
- ('_strptime', '/usr/lib/python3.12/_strptime.py', 'PYMODULE'),
- ('datetime', '/usr/lib/python3.12/datetime.py', 'PYMODULE'),
- ('_pydatetime', '/usr/lib/python3.12/_pydatetime.py', 'PYMODULE'),
- ('calendar', '/usr/lib/python3.12/calendar.py', 'PYMODULE'),
- ('argparse', '/usr/lib/python3.12/argparse.py', 'PYMODULE'),
- ('textwrap', '/usr/lib/python3.12/textwrap.py', 'PYMODULE'),
- ('shutil', '/usr/lib/python3.12/shutil.py', 'PYMODULE'),
- ('zipfile', '/usr/lib/python3.12/zipfile/__init__.py', 'PYMODULE'),
- ('zipfile._path',
- '/usr/lib/python3.12/zipfile/_path/__init__.py',
- 'PYMODULE'),
- ('zipfile._path.glob',
- '/usr/lib/python3.12/zipfile/_path/glob.py',
- 'PYMODULE'),
- ('py_compile', '/usr/lib/python3.12/py_compile.py', 'PYMODULE'),
- ('importlib.machinery',
- '/usr/lib/python3.12/importlib/machinery.py',
- 'PYMODULE'),
- ('importlib', '/usr/lib/python3.12/importlib/__init__.py', 'PYMODULE'),
- ('importlib._bootstrap',
- '/usr/lib/python3.12/importlib/_bootstrap.py',
- 'PYMODULE'),
- ('importlib._bootstrap_external',
- '/usr/lib/python3.12/importlib/_bootstrap_external.py',
- 'PYMODULE'),
- ('importlib.metadata',
- '/usr/lib/python3.12/importlib/metadata/__init__.py',
- 'PYMODULE'),
- ('typing', '/usr/lib/python3.12/typing.py', 'PYMODULE'),
- ('importlib.abc', '/usr/lib/python3.12/importlib/abc.py', 'PYMODULE'),
- ('importlib.resources.abc',
- '/usr/lib/python3.12/importlib/resources/abc.py',
- 'PYMODULE'),
- ('importlib.resources',
- '/usr/lib/python3.12/importlib/resources/__init__.py',
- 'PYMODULE'),
- ('importlib.resources._legacy',
- '/usr/lib/python3.12/importlib/resources/_legacy.py',
- 'PYMODULE'),
- ('importlib.resources._common',
- '/usr/lib/python3.12/importlib/resources/_common.py',
- 'PYMODULE'),
- ('importlib.resources._adapters',
- '/usr/lib/python3.12/importlib/resources/_adapters.py',
- 'PYMODULE'),
- ('tempfile', '/usr/lib/python3.12/tempfile.py', 'PYMODULE'),
- ('random', '/usr/lib/python3.12/random.py', 'PYMODULE'),
- ('statistics', '/usr/lib/python3.12/statistics.py', 'PYMODULE'),
- ('decimal', '/usr/lib/python3.12/decimal.py', 'PYMODULE'),
- ('_pydecimal', '/usr/lib/python3.12/_pydecimal.py', 'PYMODULE'),
- ('contextvars', '/usr/lib/python3.12/contextvars.py', 'PYMODULE'),
- ('fractions', '/usr/lib/python3.12/fractions.py', 'PYMODULE'),
- ('numbers', '/usr/lib/python3.12/numbers.py', 'PYMODULE'),
- ('bisect', '/usr/lib/python3.12/bisect.py', 'PYMODULE'),
- ('importlib._abc', '/usr/lib/python3.12/importlib/_abc.py', 'PYMODULE'),
- ('importlib.metadata._itertools',
- '/usr/lib/python3.12/importlib/metadata/_itertools.py',
- 'PYMODULE'),
- ('importlib.metadata._functools',
- '/usr/lib/python3.12/importlib/metadata/_functools.py',
- 'PYMODULE'),
- ('importlib.metadata._collections',
- '/usr/lib/python3.12/importlib/metadata/_collections.py',
- 'PYMODULE'),
- ('importlib.metadata._meta',
- '/usr/lib/python3.12/importlib/metadata/_meta.py',
- 'PYMODULE'),
- ('importlib.metadata._adapters',
- '/usr/lib/python3.12/importlib/metadata/_adapters.py',
- 'PYMODULE'),
- ('importlib.metadata._text',
- '/usr/lib/python3.12/importlib/metadata/_text.py',
- 'PYMODULE'),
- ('email.message', '/usr/lib/python3.12/email/message.py', 'PYMODULE'),
- ('email.policy', '/usr/lib/python3.12/email/policy.py', 'PYMODULE'),
- ('email.contentmanager',
- '/usr/lib/python3.12/email/contentmanager.py',
- 'PYMODULE'),
- ('email.quoprimime', '/usr/lib/python3.12/email/quoprimime.py', 'PYMODULE'),
- ('string', '/usr/lib/python3.12/string.py', 'PYMODULE'),
- ('email.headerregistry',
- '/usr/lib/python3.12/email/headerregistry.py',
- 'PYMODULE'),
- ('email._header_value_parser',
- '/usr/lib/python3.12/email/_header_value_parser.py',
- 'PYMODULE'),
- ('urllib', '/usr/lib/python3.12/urllib/__init__.py', 'PYMODULE'),
- ('email.iterators', '/usr/lib/python3.12/email/iterators.py', 'PYMODULE'),
- ('email.generator', '/usr/lib/python3.12/email/generator.py', 'PYMODULE'),
- ('email._encoded_words',
- '/usr/lib/python3.12/email/_encoded_words.py',
- 'PYMODULE'),
- ('base64', '/usr/lib/python3.12/base64.py', 'PYMODULE'),
- ('getopt', '/usr/lib/python3.12/getopt.py', 'PYMODULE'),
- ('email.charset', '/usr/lib/python3.12/email/charset.py', 'PYMODULE'),
- ('email.encoders', '/usr/lib/python3.12/email/encoders.py', 'PYMODULE'),
- ('email.base64mime', '/usr/lib/python3.12/email/base64mime.py', 'PYMODULE'),
- ('email._policybase', '/usr/lib/python3.12/email/_policybase.py', 'PYMODULE'),
- ('email.header', '/usr/lib/python3.12/email/header.py', 'PYMODULE'),
- ('email.errors', '/usr/lib/python3.12/email/errors.py', 'PYMODULE'),
- ('email.utils', '/usr/lib/python3.12/email/utils.py', 'PYMODULE'),
- ('email._parseaddr', '/usr/lib/python3.12/email/_parseaddr.py', 'PYMODULE'),
- ('urllib.parse', '/usr/lib/python3.12/urllib/parse.py', 'PYMODULE'),
- ('ipaddress', '/usr/lib/python3.12/ipaddress.py', 'PYMODULE'),
- ('socket', '/usr/lib/python3.12/socket.py', 'PYMODULE'),
- ('quopri', '/usr/lib/python3.12/quopri.py', 'PYMODULE'),
- ('inspect', '/usr/lib/python3.12/inspect.py', 'PYMODULE'),
- ('token', '/usr/lib/python3.12/token.py', 'PYMODULE'),
- ('dis', '/usr/lib/python3.12/dis.py', 'PYMODULE'),
- ('opcode', '/usr/lib/python3.12/opcode.py', 'PYMODULE'),
- ('ast', '/usr/lib/python3.12/ast.py', 'PYMODULE'),
- ('email', '/usr/lib/python3.12/email/__init__.py', 'PYMODULE'),
- ('email.parser', '/usr/lib/python3.12/email/parser.py', 'PYMODULE'),
- ('email.feedparser', '/usr/lib/python3.12/email/feedparser.py', 'PYMODULE'),
- ('csv', '/usr/lib/python3.12/csv.py', 'PYMODULE'),
- ('importlib.readers', '/usr/lib/python3.12/importlib/readers.py', 'PYMODULE'),
- ('importlib.resources.readers',
- '/usr/lib/python3.12/importlib/resources/readers.py',
- 'PYMODULE'),
- ('importlib.resources._itertools',
- '/usr/lib/python3.12/importlib/resources/_itertools.py',
- 'PYMODULE'),
- ('tokenize', '/usr/lib/python3.12/tokenize.py', 'PYMODULE'),
- ('struct', '/usr/lib/python3.12/struct.py', 'PYMODULE'),
- ('importlib.util', '/usr/lib/python3.12/importlib/util.py', 'PYMODULE'),
- ('tarfile', '/usr/lib/python3.12/tarfile.py', 'PYMODULE'),
- ('gzip', '/usr/lib/python3.12/gzip.py', 'PYMODULE'),
- ('_compression', '/usr/lib/python3.12/_compression.py', 'PYMODULE'),
- ('lzma', '/usr/lib/python3.12/lzma.py', 'PYMODULE'),
- ('bz2', '/usr/lib/python3.12/bz2.py', 'PYMODULE'),
- ('fnmatch', '/usr/lib/python3.12/fnmatch.py', 'PYMODULE'),
- ('copy', '/usr/lib/python3.12/copy.py', 'PYMODULE'),
- ('gettext', '/usr/lib/python3.12/gettext.py', 'PYMODULE'),
- ('multiprocessing.spawn',
- '/usr/lib/python3.12/multiprocessing/spawn.py',
- 'PYMODULE'),
- ('multiprocessing.resource_tracker',
- '/usr/lib/python3.12/multiprocessing/resource_tracker.py',
- 'PYMODULE'),
- ('multiprocessing.util',
- '/usr/lib/python3.12/multiprocessing/util.py',
- 'PYMODULE'),
- ('multiprocessing.forkserver',
- '/usr/lib/python3.12/multiprocessing/forkserver.py',
- 'PYMODULE'),
- ('multiprocessing.connection',
- '/usr/lib/python3.12/multiprocessing/connection.py',
- 'PYMODULE'),
- ('multiprocessing.resource_sharer',
- '/usr/lib/python3.12/multiprocessing/resource_sharer.py',
- 'PYMODULE'),
- ('xmlrpc.client', '/usr/lib/python3.12/xmlrpc/client.py', 'PYMODULE'),
- ('xmlrpc', '/usr/lib/python3.12/xmlrpc/__init__.py', 'PYMODULE'),
- ('xml.parsers.expat', '/usr/lib/python3.12/xml/parsers/expat.py', 'PYMODULE'),
- ('xml.parsers', '/usr/lib/python3.12/xml/parsers/__init__.py', 'PYMODULE'),
- ('xml', '/usr/lib/python3.12/xml/__init__.py', 'PYMODULE'),
- ('xml.sax.expatreader',
- '/usr/lib/python3.12/xml/sax/expatreader.py',
- 'PYMODULE'),
- ('xml.sax.saxutils', '/usr/lib/python3.12/xml/sax/saxutils.py', 'PYMODULE'),
- ('urllib.request', '/usr/lib/python3.12/urllib/request.py', 'PYMODULE'),
- ('getpass', '/usr/lib/python3.12/getpass.py', 'PYMODULE'),
- ('nturl2path', '/usr/lib/python3.12/nturl2path.py', 'PYMODULE'),
- ('ftplib', '/usr/lib/python3.12/ftplib.py', 'PYMODULE'),
- ('netrc', '/usr/lib/python3.12/netrc.py', 'PYMODULE'),
- ('mimetypes', '/usr/lib/python3.12/mimetypes.py', 'PYMODULE'),
- ('http.cookiejar', '/usr/lib/python3.12/http/cookiejar.py', 'PYMODULE'),
- ('http', '/usr/lib/python3.12/http/__init__.py', 'PYMODULE'),
- ('ssl', '/usr/lib/python3.12/ssl.py', 'PYMODULE'),
- ('urllib.response', '/usr/lib/python3.12/urllib/response.py', 'PYMODULE'),
- ('urllib.error', '/usr/lib/python3.12/urllib/error.py', 'PYMODULE'),
- ('xml.sax', '/usr/lib/python3.12/xml/sax/__init__.py', 'PYMODULE'),
- ('xml.sax.handler', '/usr/lib/python3.12/xml/sax/handler.py', 'PYMODULE'),
- ('xml.sax._exceptions',
- '/usr/lib/python3.12/xml/sax/_exceptions.py',
- 'PYMODULE'),
- ('xml.sax.xmlreader', '/usr/lib/python3.12/xml/sax/xmlreader.py', 'PYMODULE'),
- ('http.client', '/usr/lib/python3.12/http/client.py', 'PYMODULE'),
- ('hmac', '/usr/lib/python3.12/hmac.py', 'PYMODULE'),
- ('logging', '/usr/lib/python3.12/logging/__init__.py', 'PYMODULE'),
- ('pickle', '/usr/lib/python3.12/pickle.py', 'PYMODULE'),
- ('pprint', '/usr/lib/python3.12/pprint.py', 'PYMODULE'),
- ('dataclasses', '/usr/lib/python3.12/dataclasses.py', 'PYMODULE'),
- ('_compat_pickle', '/usr/lib/python3.12/_compat_pickle.py', 'PYMODULE'),
- ('multiprocessing.context',
- '/usr/lib/python3.12/multiprocessing/context.py',
- 'PYMODULE'),
- ('multiprocessing.popen_spawn_win32',
- '/usr/lib/python3.12/multiprocessing/popen_spawn_win32.py',
- 'PYMODULE'),
- ('multiprocessing.popen_forkserver',
- '/usr/lib/python3.12/multiprocessing/popen_forkserver.py',
- 'PYMODULE'),
- ('multiprocessing.popen_spawn_posix',
- '/usr/lib/python3.12/multiprocessing/popen_spawn_posix.py',
- 'PYMODULE'),
- ('multiprocessing.popen_fork',
- '/usr/lib/python3.12/multiprocessing/popen_fork.py',
- 'PYMODULE'),
- ('multiprocessing.sharedctypes',
- '/usr/lib/python3.12/multiprocessing/sharedctypes.py',
- 'PYMODULE'),
- ('multiprocessing.heap',
- '/usr/lib/python3.12/multiprocessing/heap.py',
- 'PYMODULE'),
- ('ctypes', '/usr/lib/python3.12/ctypes/__init__.py', 'PYMODULE'),
- ('ctypes._endian', '/usr/lib/python3.12/ctypes/_endian.py', 'PYMODULE'),
- ('multiprocessing.pool',
- '/usr/lib/python3.12/multiprocessing/pool.py',
- 'PYMODULE'),
- ('multiprocessing.dummy',
- '/usr/lib/python3.12/multiprocessing/dummy/__init__.py',
- 'PYMODULE'),
- ('multiprocessing.dummy.connection',
- '/usr/lib/python3.12/multiprocessing/dummy/connection.py',
- 'PYMODULE'),
- ('queue', '/usr/lib/python3.12/queue.py', 'PYMODULE'),
- ('multiprocessing.queues',
- '/usr/lib/python3.12/multiprocessing/queues.py',
- 'PYMODULE'),
- ('multiprocessing.synchronize',
- '/usr/lib/python3.12/multiprocessing/synchronize.py',
- 'PYMODULE'),
- ('multiprocessing.managers',
- '/usr/lib/python3.12/multiprocessing/managers.py',
- 'PYMODULE'),
- ('multiprocessing.shared_memory',
- '/usr/lib/python3.12/multiprocessing/shared_memory.py',
- 'PYMODULE'),
- ('secrets', '/usr/lib/python3.12/secrets.py', 'PYMODULE'),
- ('multiprocessing.reduction',
- '/usr/lib/python3.12/multiprocessing/reduction.py',
- 'PYMODULE'),
- ('multiprocessing.process',
- '/usr/lib/python3.12/multiprocessing/process.py',
- 'PYMODULE'),
- ('runpy', '/usr/lib/python3.12/runpy.py', 'PYMODULE'),
- ('pkgutil', '/usr/lib/python3.12/pkgutil.py', 'PYMODULE'),
- ('zipimport', '/usr/lib/python3.12/zipimport.py', 'PYMODULE'),
- ('multiprocessing',
- '/usr/lib/python3.12/multiprocessing/__init__.py',
- 'PYMODULE'),
- ('_distutils_hack',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/_distutils_hack/__init__.py',
- 'PYMODULE'),
- ('setuptools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/__init__.py',
- 'PYMODULE'),
- ('setuptools.msvc',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/msvc.py',
- 'PYMODULE'),
- ('setuptools._distutils.errors',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/errors.py',
- 'PYMODULE'),
- ('setuptools._distutils.sysconfig',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/sysconfig.py',
- 'PYMODULE'),
- ('setuptools._distutils.text_file',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/text_file.py',
- 'PYMODULE'),
- ('setuptools._distutils.util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/util.py',
- 'PYMODULE'),
- ('setuptools._distutils.spawn',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/spawn.py',
- 'PYMODULE'),
- ('setuptools._distutils.debug',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/debug.py',
- 'PYMODULE'),
- ('setuptools._distutils._modified',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/_modified.py',
- 'PYMODULE'),
- ('setuptools._distutils._log',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/_log.py',
- 'PYMODULE'),
- ('setuptools._distutils.compat.py39',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compat/py39.py',
- 'PYMODULE'),
- ('setuptools._distutils.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools._distutils.ccompiler',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py',
- 'PYMODULE'),
- ('setuptools._distutils.compilers.C.base',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/C/base.py',
- 'PYMODULE'),
- ('setuptools._distutils.fancy_getopt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/fancy_getopt.py',
- 'PYMODULE'),
- ('setuptools._distutils.file_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/file_util.py',
- 'PYMODULE'),
- ('setuptools._distutils.dir_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/dir_util.py',
- 'PYMODULE'),
- ('setuptools._distutils.compilers.C', '-', 'PYMODULE'),
- ('setuptools._distutils.compilers.C.msvc',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/C/msvc.py',
- 'PYMODULE'),
- ('unittest.mock', '/usr/lib/python3.12/unittest/mock.py', 'PYMODULE'),
- ('unittest', '/usr/lib/python3.12/unittest/__init__.py', 'PYMODULE'),
- ('unittest.async_case',
- '/usr/lib/python3.12/unittest/async_case.py',
- 'PYMODULE'),
- ('unittest.signals', '/usr/lib/python3.12/unittest/signals.py', 'PYMODULE'),
- ('unittest.main', '/usr/lib/python3.12/unittest/main.py', 'PYMODULE'),
- ('unittest.runner', '/usr/lib/python3.12/unittest/runner.py', 'PYMODULE'),
- ('unittest.loader', '/usr/lib/python3.12/unittest/loader.py', 'PYMODULE'),
- ('unittest.suite', '/usr/lib/python3.12/unittest/suite.py', 'PYMODULE'),
- ('unittest.case', '/usr/lib/python3.12/unittest/case.py', 'PYMODULE'),
- ('unittest._log', '/usr/lib/python3.12/unittest/_log.py', 'PYMODULE'),
- ('difflib', '/usr/lib/python3.12/difflib.py', 'PYMODULE'),
- ('unittest.result', '/usr/lib/python3.12/unittest/result.py', 'PYMODULE'),
- ('unittest.util', '/usr/lib/python3.12/unittest/util.py', 'PYMODULE'),
- ('asyncio', '/usr/lib/python3.12/asyncio/__init__.py', 'PYMODULE'),
- ('asyncio.unix_events',
- '/usr/lib/python3.12/asyncio/unix_events.py',
- 'PYMODULE'),
- ('asyncio.log', '/usr/lib/python3.12/asyncio/log.py', 'PYMODULE'),
- ('asyncio.windows_events',
- '/usr/lib/python3.12/asyncio/windows_events.py',
- 'PYMODULE'),
- ('asyncio.windows_utils',
- '/usr/lib/python3.12/asyncio/windows_utils.py',
- 'PYMODULE'),
- ('asyncio.selector_events',
- '/usr/lib/python3.12/asyncio/selector_events.py',
- 'PYMODULE'),
- ('asyncio.proactor_events',
- '/usr/lib/python3.12/asyncio/proactor_events.py',
- 'PYMODULE'),
- ('asyncio.base_subprocess',
- '/usr/lib/python3.12/asyncio/base_subprocess.py',
- 'PYMODULE'),
- ('asyncio.threads', '/usr/lib/python3.12/asyncio/threads.py', 'PYMODULE'),
- ('asyncio.taskgroups',
- '/usr/lib/python3.12/asyncio/taskgroups.py',
- 'PYMODULE'),
- ('asyncio.subprocess',
- '/usr/lib/python3.12/asyncio/subprocess.py',
- 'PYMODULE'),
- ('asyncio.streams', '/usr/lib/python3.12/asyncio/streams.py', 'PYMODULE'),
- ('asyncio.queues', '/usr/lib/python3.12/asyncio/queues.py', 'PYMODULE'),
- ('asyncio.runners', '/usr/lib/python3.12/asyncio/runners.py', 'PYMODULE'),
- ('asyncio.base_events',
- '/usr/lib/python3.12/asyncio/base_events.py',
- 'PYMODULE'),
- ('concurrent.futures',
- '/usr/lib/python3.12/concurrent/futures/__init__.py',
- 'PYMODULE'),
- ('concurrent.futures.thread',
- '/usr/lib/python3.12/concurrent/futures/thread.py',
- 'PYMODULE'),
- ('concurrent.futures.process',
- '/usr/lib/python3.12/concurrent/futures/process.py',
- 'PYMODULE'),
- ('concurrent.futures._base',
- '/usr/lib/python3.12/concurrent/futures/_base.py',
- 'PYMODULE'),
- ('concurrent', '/usr/lib/python3.12/concurrent/__init__.py', 'PYMODULE'),
- ('asyncio.trsock', '/usr/lib/python3.12/asyncio/trsock.py', 'PYMODULE'),
- ('asyncio.staggered', '/usr/lib/python3.12/asyncio/staggered.py', 'PYMODULE'),
- ('asyncio.timeouts', '/usr/lib/python3.12/asyncio/timeouts.py', 'PYMODULE'),
- ('asyncio.tasks', '/usr/lib/python3.12/asyncio/tasks.py', 'PYMODULE'),
- ('asyncio.base_tasks',
- '/usr/lib/python3.12/asyncio/base_tasks.py',
- 'PYMODULE'),
- ('asyncio.locks', '/usr/lib/python3.12/asyncio/locks.py', 'PYMODULE'),
- ('asyncio.mixins', '/usr/lib/python3.12/asyncio/mixins.py', 'PYMODULE'),
- ('asyncio.sslproto', '/usr/lib/python3.12/asyncio/sslproto.py', 'PYMODULE'),
- ('asyncio.transports',
- '/usr/lib/python3.12/asyncio/transports.py',
- 'PYMODULE'),
- ('asyncio.protocols', '/usr/lib/python3.12/asyncio/protocols.py', 'PYMODULE'),
- ('asyncio.futures', '/usr/lib/python3.12/asyncio/futures.py', 'PYMODULE'),
- ('asyncio.base_futures',
- '/usr/lib/python3.12/asyncio/base_futures.py',
- 'PYMODULE'),
- ('asyncio.exceptions',
- '/usr/lib/python3.12/asyncio/exceptions.py',
- 'PYMODULE'),
- ('asyncio.events', '/usr/lib/python3.12/asyncio/events.py', 'PYMODULE'),
- ('asyncio.format_helpers',
- '/usr/lib/python3.12/asyncio/format_helpers.py',
- 'PYMODULE'),
- ('asyncio.coroutines',
- '/usr/lib/python3.12/asyncio/coroutines.py',
- 'PYMODULE'),
- ('asyncio.constants', '/usr/lib/python3.12/asyncio/constants.py', 'PYMODULE'),
- ('setuptools._distutils.compilers', '-', 'PYMODULE'),
- ('setuptools._distutils.compat.numpy',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compat/numpy.py',
- 'PYMODULE'),
- ('setuptools._vendor.jaraco.functools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/functools/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.jaraco', '-', 'PYMODULE'),
- ('setuptools._vendor', '-', 'PYMODULE'),
- ('sysconfig', '/usr/lib/python3.12/sysconfig.py', 'PYMODULE'),
- ('_sysconfigdata__x86_64-linux-gnu',
- '/usr/lib/python3.12/_sysconfigdata__x86_64-linux-gnu.py',
- 'PYMODULE'),
- ('_aix_support', '/usr/lib/python3.12/_aix_support.py', 'PYMODULE'),
- ('setuptools._distutils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/__init__.py',
- 'PYMODULE'),
- ('setuptools._distutils.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/version.py',
- 'PYMODULE'),
- ('setuptools._distutils.archive_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/archive_util.py',
- 'PYMODULE'),
- ('setuptools._distutils.compilers.C.errors',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/C/errors.py',
- 'PYMODULE'),
- ('setuptools.compat.py310',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/py310.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli._parser',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/_parser.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli._types',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/_types.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli._re',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/_re.py',
- 'PYMODULE'),
- ('tomllib', '/usr/lib/python3.12/tomllib/__init__.py', 'PYMODULE'),
- ('tomllib._parser', '/usr/lib/python3.12/tomllib/_parser.py', 'PYMODULE'),
- ('tomllib._types', '/usr/lib/python3.12/tomllib/_types.py', 'PYMODULE'),
- ('tomllib._re', '/usr/lib/python3.12/tomllib/_re.py', 'PYMODULE'),
- ('setuptools.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools.compat.py311',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/py311.py',
- 'PYMODULE'),
- ('setuptools.compat.py39',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/py39.py',
- 'PYMODULE'),
- ('setuptools._path',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_path.py',
- 'PYMODULE'),
- ('setuptools._vendor.more_itertools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.more_itertools.recipes',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools/recipes.py',
- 'PYMODULE'),
- ('setuptools._vendor.more_itertools.more',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools/more.py',
- 'PYMODULE'),
- ('platform', '/usr/lib/python3.12/platform.py', 'PYMODULE'),
- ('setuptools._distutils.command.build_ext',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py',
- 'PYMODULE'),
- ('setuptools._distutils.command',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/__init__.py',
- 'PYMODULE'),
- ('setuptools._distutils._msvccompiler',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/_msvccompiler.py',
- 'PYMODULE'),
- ('setuptools._distutils.extension',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/extension.py',
- 'PYMODULE'),
- ('site', '/usr/lib/python3.12/site.py', 'PYMODULE'),
- ('sitecustomize', '/usr/lib/python3.12/sitecustomize.py', 'PYMODULE'),
- ('rlcompleter', '/usr/lib/python3.12/rlcompleter.py', 'PYMODULE'),
- ('_sitebuiltins', '/usr/lib/python3.12/_sitebuiltins.py', 'PYMODULE'),
- ('pydoc', '/usr/lib/python3.12/pydoc.py', 'PYMODULE'),
- ('webbrowser', '/usr/lib/python3.12/webbrowser.py', 'PYMODULE'),
- ('shlex', '/usr/lib/python3.12/shlex.py', 'PYMODULE'),
- ('http.server', '/usr/lib/python3.12/http/server.py', 'PYMODULE'),
- ('socketserver', '/usr/lib/python3.12/socketserver.py', 'PYMODULE'),
- ('html', '/usr/lib/python3.12/html/__init__.py', 'PYMODULE'),
- ('html.entities', '/usr/lib/python3.12/html/entities.py', 'PYMODULE'),
- ('pydoc_data.topics', '/usr/lib/python3.12/pydoc_data/topics.py', 'PYMODULE'),
- ('pydoc_data', '/usr/lib/python3.12/pydoc_data/__init__.py', 'PYMODULE'),
- ('tty', '/usr/lib/python3.12/tty.py', 'PYMODULE'),
- ('setuptools._distutils.core',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/core.py',
- 'PYMODULE'),
- ('setuptools._distutils.dist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/dist.py',
- 'PYMODULE'),
- ('setuptools._distutils.versionpredicate',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/versionpredicate.py',
- 'PYMODULE'),
- ('configparser', '/usr/lib/python3.12/configparser.py', 'PYMODULE'),
- ('packaging.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/utils.py',
- 'PYMODULE'),
- ('packaging',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/__init__.py',
- 'PYMODULE'),
- ('packaging._musllinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_musllinux.py',
- 'PYMODULE'),
- ('packaging._elffile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_elffile.py',
- 'PYMODULE'),
- ('packaging._manylinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_manylinux.py',
- 'PYMODULE'),
- ('packaging.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/version.py',
- 'PYMODULE'),
- ('packaging._structures',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_structures.py',
- 'PYMODULE'),
- ('packaging.tags',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/tags.py',
- 'PYMODULE'),
- ('setuptools._distutils.cmd',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/cmd.py',
- 'PYMODULE'),
- ('setuptools.warnings',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/warnings.py',
- 'PYMODULE'),
- ('setuptools.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/version.py',
- 'PYMODULE'),
- ('setuptools._importlib',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_importlib.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat.overlay',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/overlay.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.glob',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/glob.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat.py313',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/py313.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat.py310',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/py310.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp._functools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/_functools.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._adapters',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._text',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_text.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata.compat.py311',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata.compat.py39',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._typing',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_typing.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._itertools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._functools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_functools.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_compat.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._collections',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_collections.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._meta',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_meta.py',
- 'PYMODULE'),
- ('setuptools.extension',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/extension.py',
- 'PYMODULE'),
- ('setuptools.dist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/dist.py',
- 'PYMODULE'),
- ('setuptools.command.bdist_wheel',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/bdist_wheel.py',
- 'PYMODULE'),
- ('setuptools._vendor.wheel.macosx_libfile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/wheel/macosx_libfile.py',
- 'PYMODULE'),
- ('setuptools._vendor.wheel',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/wheel/__init__.py',
- 'PYMODULE'),
- ('setuptools.command.egg_info',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/egg_info.py',
- 'PYMODULE'),
- ('setuptools._distutils.filelist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/filelist.py',
- 'PYMODULE'),
- ('setuptools.command._requirestxt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/_requirestxt.py',
- 'PYMODULE'),
- ('setuptools._vendor.jaraco.text',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/text/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.jaraco.context',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/context/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.backports.tarfile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.backports',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.backports.tarfile.compat.py38',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py',
- 'PYMODULE'),
- ('setuptools._vendor.backports.tarfile.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools.glob',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/glob.py',
- 'PYMODULE'),
- ('setuptools.command.setopt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/setopt.py',
- 'PYMODULE'),
- ('setuptools.command.sdist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/sdist.py',
- 'PYMODULE'),
- ('setuptools._distutils.command.sdist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/sdist.py',
- 'PYMODULE'),
- ('setuptools.command.build',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/build.py',
- 'PYMODULE'),
- ('setuptools._distutils.command.build',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/build.py',
- 'PYMODULE'),
- ('setuptools.command.bdist_egg',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/bdist_egg.py',
- 'PYMODULE'),
- ('setuptools.unicode_utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/unicode_utils.py',
- 'PYMODULE'),
- ('packaging.requirements',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/requirements.py',
- 'PYMODULE'),
- ('packaging._tokenizer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_tokenizer.py',
- 'PYMODULE'),
- ('packaging._parser',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_parser.py',
- 'PYMODULE'),
- ('setuptools._vendor.wheel.wheelfile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/wheel/wheelfile.py',
- 'PYMODULE'),
- ('setuptools.installer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/installer.py',
- 'PYMODULE'),
- ('setuptools.wheel',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/wheel.py',
- 'PYMODULE'),
- ('setuptools._discovery',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_discovery.py',
- 'PYMODULE'),
- ('setuptools.archive_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/archive_util.py',
- 'PYMODULE'),
- ('setuptools._distutils.log',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/log.py',
- 'PYMODULE'),
- ('setuptools.errors',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/errors.py',
- 'PYMODULE'),
- ('setuptools.config.setupcfg',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/setupcfg.py',
- 'PYMODULE'),
- ('setuptools.config.expand',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/expand.py',
- 'PYMODULE'),
- ('setuptools.config.pyprojecttoml',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/pyprojecttoml.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/__init__.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.fastjsonschema_validations',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.fastjsonschema_exceptions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.extra_validations',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/extra_validations.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.error_reporting',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/error_reporting.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.formats',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/formats.py',
- 'PYMODULE'),
- ('packaging.licenses',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/licenses/__init__.py',
- 'PYMODULE'),
- ('packaging.licenses._spdx',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/licenses/_spdx.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.requirements',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/requirements.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/utils.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/version.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._structures',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_structures.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.tags',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/tags.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._musllinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_musllinux.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._elffile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_elffile.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._manylinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_manylinux.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.specifiers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/specifiers.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.markers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/markers.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._tokenizer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_tokenizer.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._parser',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_parser.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/__init__.py',
- 'PYMODULE'),
- ('setuptools.config._apply_pyprojecttoml',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_apply_pyprojecttoml.py',
- 'PYMODULE'),
- ('setuptools.config',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/__init__.py',
- 'PYMODULE'),
- ('setuptools._static',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_static.py',
- 'PYMODULE'),
- ('packaging.specifiers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/specifiers.py',
- 'PYMODULE'),
- ('packaging.markers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/markers.py',
- 'PYMODULE'),
- ('glob', '/usr/lib/python3.12/glob.py', 'PYMODULE'),
- ('setuptools._shutil',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_shutil.py',
- 'PYMODULE'),
- ('setuptools.windows_support',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/windows_support.py',
- 'PYMODULE'),
- ('ctypes.wintypes', '/usr/lib/python3.12/ctypes/wintypes.py', 'PYMODULE'),
- ('setuptools.command',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/__init__.py',
- 'PYMODULE'),
- ('setuptools._distutils.command.bdist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/bdist.py',
- 'PYMODULE'),
- ('setuptools._entry_points',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_entry_points.py',
- 'PYMODULE'),
- ('setuptools._itertools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_itertools.py',
- 'PYMODULE'),
- ('setuptools.discovery',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/discovery.py',
- 'PYMODULE'),
- ('setuptools.depends',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/depends.py',
- 'PYMODULE'),
- ('setuptools._imp',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_imp.py',
- 'PYMODULE'),
- ('setuptools.logging',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/logging.py',
- 'PYMODULE'),
- ('setuptools.monkey',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/monkey.py',
- 'PYMODULE'),
- ('setuptools._core_metadata',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_core_metadata.py',
- 'PYMODULE'),
- ('setuptools._reqs',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_reqs.py',
- 'PYMODULE'),
- ('setuptools._normalization',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_normalization.py',
- 'PYMODULE'),
- ('_distutils_hack.override',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/_distutils_hack/override.py',
- 'PYMODULE'),
- ('__future__', '/usr/lib/python3.12/__future__.py', 'PYMODULE'),
- ('stringprep', '/usr/lib/python3.12/stringprep.py', 'PYMODULE'),
- ('_py_abc', '/usr/lib/python3.12/_py_abc.py', 'PYMODULE'),
- ('tracemalloc', '/usr/lib/python3.12/tracemalloc.py', 'PYMODULE'),
- ('threading', '/usr/lib/python3.12/threading.py', 'PYMODULE'),
- ('_threading_local', '/usr/lib/python3.12/_threading_local.py', 'PYMODULE'),
- ('pathlib', '/usr/lib/python3.12/pathlib.py', 'PYMODULE'),
- ('tkinter.ttk', '/usr/lib/python3.12/tkinter/ttk.py', 'PYMODULE'),
- ('tkinter.messagebox',
- '/usr/lib/python3.12/tkinter/messagebox.py',
- 'PYMODULE'),
- ('tkinter.commondialog',
- '/usr/lib/python3.12/tkinter/commondialog.py',
- 'PYMODULE'),
- ('tkinter.filedialog',
- '/usr/lib/python3.12/tkinter/filedialog.py',
- 'PYMODULE'),
- ('tkinter.simpledialog',
- '/usr/lib/python3.12/tkinter/simpledialog.py',
- 'PYMODULE'),
- ('tkinter.dialog', '/usr/lib/python3.12/tkinter/dialog.py', 'PYMODULE'),
- ('tkinter', '/usr/lib/python3.12/tkinter/__init__.py', 'PYMODULE'),
- ('tkinter.constants', '/usr/lib/python3.12/tkinter/constants.py', 'PYMODULE'),
- ('requests',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/__init__.py',
- 'PYMODULE'),
- ('requests.status_codes',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/status_codes.py',
- 'PYMODULE'),
- ('requests.structures',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/structures.py',
- 'PYMODULE'),
- ('requests.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/compat.py',
- 'PYMODULE'),
- ('http.cookies', '/usr/lib/python3.12/http/cookies.py', 'PYMODULE'),
- ('requests.models',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/models.py',
- 'PYMODULE'),
- ('idna',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/__init__.py',
- 'PYMODULE'),
- ('idna.package_data',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/package_data.py',
- 'PYMODULE'),
- ('idna.intranges',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/intranges.py',
- 'PYMODULE'),
- ('idna.core',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/core.py',
- 'PYMODULE'),
- ('idna.uts46data',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/uts46data.py',
- 'PYMODULE'),
- ('idna.idnadata',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/idnadata.py',
- 'PYMODULE'),
- ('requests.hooks',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/hooks.py',
- 'PYMODULE'),
- ('requests.cookies',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/cookies.py',
- 'PYMODULE'),
- ('requests.auth',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/auth.py',
- 'PYMODULE'),
- ('requests._internal_utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/_internal_utils.py',
- 'PYMODULE'),
- ('urllib3.util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/__init__.py',
- 'PYMODULE'),
- ('urllib3.util.wait',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/wait.py',
- 'PYMODULE'),
- ('urllib3.util.url',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/url.py',
- 'PYMODULE'),
- ('urllib3.util.util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/util.py',
- 'PYMODULE'),
- ('urllib3.util.timeout',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/timeout.py',
- 'PYMODULE'),
- ('urllib3.util.ssl_',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/ssl_.py',
- 'PYMODULE'),
- ('urllib3.util.ssltransport',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py',
- 'PYMODULE'),
- ('urllib3.util.retry',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/retry.py',
- 'PYMODULE'),
- ('urllib3.response',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/response.py',
- 'PYMODULE'),
- ('urllib3.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/connection.py',
- 'PYMODULE'),
- ('urllib3.util.ssl_match_hostname',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py',
- 'PYMODULE'),
- ('urllib3._version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_version.py',
- 'PYMODULE'),
- ('urllib3.http2.probe',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/http2/probe.py',
- 'PYMODULE'),
- ('urllib3.http2',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/http2/__init__.py',
- 'PYMODULE'),
- ('urllib3.http2.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/http2/connection.py',
- 'PYMODULE'),
- ('urllib3._collections',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_collections.py',
- 'PYMODULE'),
- ('urllib3._base_connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_base_connection.py',
- 'PYMODULE'),
- ('urllib3.connectionpool',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/connectionpool.py',
- 'PYMODULE'),
- ('urllib3.util.proxy',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/proxy.py',
- 'PYMODULE'),
- ('urllib3._request_methods',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_request_methods.py',
- 'PYMODULE'),
- ('urllib3.util.response',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/response.py',
- 'PYMODULE'),
- ('urllib3.util.request',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/request.py',
- 'PYMODULE'),
- ('urllib3.util.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/connection.py',
- 'PYMODULE'),
- ('urllib3.filepost',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/filepost.py',
- 'PYMODULE'),
- ('urllib3.fields',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/fields.py',
- 'PYMODULE'),
- ('requests.api',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/api.py',
- 'PYMODULE'),
- ('requests.sessions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/sessions.py',
- 'PYMODULE'),
- ('requests.adapters',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/adapters.py',
- 'PYMODULE'),
- ('urllib3.contrib.socks',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/socks.py',
- 'PYMODULE'),
- ('urllib3.poolmanager',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/poolmanager.py',
- 'PYMODULE'),
- ('requests.__version__',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/__version__.py',
- 'PYMODULE'),
- ('requests.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/utils.py',
- 'PYMODULE'),
- ('requests.certs',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/certs.py',
- 'PYMODULE'),
- ('certifi',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/__init__.py',
- 'PYMODULE'),
- ('certifi.core',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/core.py',
- 'PYMODULE'),
- ('requests.packages',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/packages.py',
- 'PYMODULE'),
- ('urllib3.exceptions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/exceptions.py',
- 'PYMODULE'),
- ('urllib3.contrib.pyopenssl',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py',
- 'PYMODULE'),
- ('urllib3.contrib',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/__init__.py',
- 'PYMODULE'),
- ('charset_normalizer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py',
- 'PYMODULE'),
- ('charset_normalizer.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/version.py',
- 'PYMODULE'),
- ('charset_normalizer.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/utils.py',
- 'PYMODULE'),
- ('charset_normalizer.constant',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/constant.py',
- 'PYMODULE'),
- ('charset_normalizer.models',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/models.py',
- 'PYMODULE'),
- ('charset_normalizer.legacy',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py',
- 'PYMODULE'),
- ('charset_normalizer.api',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/api.py',
- 'PYMODULE'),
- ('requests.exceptions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/exceptions.py',
- 'PYMODULE'),
- ('urllib3',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/__init__.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.response',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.request',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.fetch',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py',
- 'PYMODULE'),
- ('json', '/usr/lib/python3.12/json/__init__.py', 'PYMODULE'),
- ('json.encoder', '/usr/lib/python3.12/json/encoder.py', 'PYMODULE'),
- ('json.decoder', '/usr/lib/python3.12/json/decoder.py', 'PYMODULE'),
- ('json.scanner', '/usr/lib/python3.12/json/scanner.py', 'PYMODULE'),
- ('hashlib', '/usr/lib/python3.12/hashlib.py', 'PYMODULE')],
- [('libpython3.12.so.1.0',
- '/lib/x86_64-linux-gnu/libpython3.12.so.1.0',
- 'BINARY'),
- ('python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('charset_normalizer/md.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
- ('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
- ('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
- ('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
- ('libssl.so.3', '/lib/x86_64-linux-gnu/libssl.so.3', 'BINARY'),
- ('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
- ('libffi.so.8', '/lib/x86_64-linux-gnu/libffi.so.8', 'BINARY'),
- ('libreadline.so.8', '/lib/x86_64-linux-gnu/libreadline.so.8', 'BINARY'),
- ('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
- ('libXss.so.1', '/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
- ('libbrotlicommon.so.1',
- '/lib/x86_64-linux-gnu/libbrotlicommon.so.1',
- 'BINARY'),
- ('libXext.so.6', '/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
- ('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
- ('libtcl8.6.so', '/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
- ('libfreetype.so.6', '/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
- ('libX11.so.6', '/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
- ('libXau.so.6', '/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
- ('libbrotlidec.so.1', '/lib/x86_64-linux-gnu/libbrotlidec.so.1', 'BINARY'),
- ('libXft.so.2', '/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
- ('libmd.so.0', '/lib/x86_64-linux-gnu/libmd.so.0', 'BINARY'),
- ('libBLT.2.5.so.8.6', '/lib/libBLT.2.5.so.8.6', 'BINARY'),
- ('libpng16.so.16', '/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
- ('libXdmcp.so.6', '/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
- ('libfontconfig.so.1', '/lib/x86_64-linux-gnu/libfontconfig.so.1', 'BINARY'),
- ('libtk8.6.so', '/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
- ('libXrender.so.1', '/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY')],
- [],
- [],
- [('_tcl_data/encoding/cp949.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
- 'DATA'),
- ('_tcl_data/msgs/en_ca.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ca.msg',
- 'DATA'),
- ('_tcl_data/msgs/es_cl.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_cl.msg',
- 'DATA'),
- ('_tcl_data/encoding/dingbats.enc',
- '/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
- 'DATA'),
- ('_tcl_data/msgs/te_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/te_in.msg',
- 'DATA'),
- ('_tk_data/ttk/scrollbar.tcl',
- '/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-1.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
- 'DATA'),
- ('_tcl_data/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
- ('_tcl_data/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-14.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
- 'DATA'),
- ('_tcl_data/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
- ('_tk_data/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
- ('_tk_data/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
- ('_tcl_data/msgs/eu_es.msg',
- '/usr/share/tcltk/tcl8.6/msgs/eu_es.msg',
- 'DATA'),
- ('_tk_data/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
- ('_tcl_data/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
- ('_tcl_data/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
- ('_tcl_data/msgs/zh_hk.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg',
- 'DATA'),
- ('_tcl_data/encoding/macUkraine.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1256.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
- 'DATA'),
- ('_tcl_data/encoding/macRomania.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
- 'DATA'),
- ('_tcl_data/encoding/macTurkish.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb1988.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
- 'DATA'),
- ('_tcl_data/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
- ('_tk_data/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
- ('_tk_data/ttk/xpTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-15.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-4.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
- 'DATA'),
- ('_tcl_data/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
- ('_tk_data/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
- ('_tk_data/images/pwrdLogo75.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
- 'DATA'),
- ('_tk_data/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-5.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
- 'DATA'),
- ('_tcl_data/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
- ('_tk_data/images/logo100.gif',
- '/usr/share/tcltk/tk8.6/images/logo100.gif',
- 'DATA'),
- ('_tcl_data/encoding/cp737.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
- 'DATA'),
- ('_tcl_data/tcl8/platform-1.0.19.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.19.tm',
- 'DATA'),
- ('_tk_data/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
- ('_tcl_data/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
- ('_tk_data/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
- ('_tk_data/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
- ('_tcl_data/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
- ('_tcl_data/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
- ('_tk_data/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
- ('_tcl_data/encoding/cp866.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
- 'DATA'),
- ('_tk_data/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
- ('_tk_data/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
- ('_tcl_data/msgs/de_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/de_be.msg',
- 'DATA'),
- ('_tk_data/ttk/defaults.tcl',
- '/usr/share/tcltk/tk8.6/ttk/defaults.tcl',
- 'DATA'),
- ('_tcl_data/encoding/cp1252.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
- 'DATA'),
- ('_tk_data/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
- ('_tk_data/msgs/fi.msg', '/usr/share/tcltk/tk8.6/msgs/fi.msg', 'DATA'),
- ('_tk_data/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-11.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-11.enc',
- 'DATA'),
- ('_tcl_data/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
- ('_tcl_data/msgs/es_co.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_co.msg',
- 'DATA'),
- ('_tk_data/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-10.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
- 'DATA'),
- ('_tcl_data/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
- ('_tcl_data/msgs/nl_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/nl_be.msg',
- 'DATA'),
- ('_tcl_data/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
- ('_tcl_data/msgs/ar_sy.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg',
- 'DATA'),
- ('_tcl_data/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
- ('_tcl_data/encoding/shiftjis.enc',
- '/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb2312-raw.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
- 'DATA'),
- ('_tk_data/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
- ('_tcl_data/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
- ('_tcl_data/encoding/koi8-u.enc',
- '/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp775.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_mx.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_mx.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-2.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
- 'DATA'),
- ('_tcl_data/encoding/euc-cn.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
- 'DATA'),
- ('_tcl_data/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
- ('_tcl_data/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
- ('_tcl_data/msgs/en_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_gb.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp1251.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
- 'DATA'),
- ('_tcl_data/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
- ('_tk_data/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
- ('_tcl_data/msgs/fr_ch.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-9.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
- 'DATA'),
- ('_tcl_data/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
- ('_tcl_data/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
- ('_tcl_data/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
- ('_tk_data/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
- ('_tcl_data/http1.0/http.tcl',
- '/usr/share/tcltk/tcl8.6/http1.0/http.tcl',
- 'DATA'),
- ('_tcl_data/encoding/cp862.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
- 'DATA'),
- ('_tcl_data/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-8.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
- 'DATA'),
- ('_tk_data/ttk/altTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/altTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
- ('_tcl_data/encoding/cns11643.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cns11643.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1257.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
- 'DATA'),
- ('_tcl_data/encoding/symbol.enc',
- '/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
- 'DATA'),
- ('_tcl_data/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
- ('_tcl_data/msgs/gl_es.msg',
- '/usr/share/tcltk/tcl8.6/msgs/gl_es.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_au.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_au.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp1258.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_bo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_bo.msg',
- 'DATA'),
- ('_tcl_data/msgs/bn_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/bn_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
- ('_tcl_data/msgs/fa_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fa_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/es_hn.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_hn.msg',
- 'DATA'),
- ('_tcl_data/msgs/id_id.msg',
- '/usr/share/tcltk/tcl8.6/msgs/id_id.msg',
- 'DATA'),
- ('_tk_data/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
- ('_tcl_data/msgs/es_gt.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_gt.msg',
- 'DATA'),
- ('_tk_data/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
- ('_tk_data/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
- ('_tcl_data/encoding/macThai.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
- 'DATA'),
- ('_tk_data/ttk/panedwindow.tcl',
- '/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
- 'DATA'),
- ('_tcl_data/encoding/macJapan.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
- 'DATA'),
- ('_tcl_data/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-6.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp863.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
- 'DATA'),
- ('_tcl_data/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
- ('_tk_data/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
- ('_tcl_data/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
- ('_tcl_data/encoding/cp1254.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
- 'DATA'),
- ('_tk_data/ttk/clamTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl',
- 'DATA'),
- ('_tcl_data/encoding/ksc5601.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
- 'DATA'),
- ('_tcl_data/msgs/en_za.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_za.msg',
- 'DATA'),
- ('_tcl_data/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
- ('_tk_data/ttk/spinbox.tcl',
- '/usr/share/tcltk/tk8.6/ttk/spinbox.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ta_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ta_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
- ('_tcl_data/msgs/ga_ie.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg',
- 'DATA'),
- ('_tcl_data/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
- ('_tk_data/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
- ('_tcl_data/msgs/es_ar.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ar.msg',
- 'DATA'),
- ('_tk_data/ttk/progress.tcl',
- '/usr/share/tcltk/tk8.6/ttk/progress.tcl',
- 'DATA'),
- ('_tk_data/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
- ('_tk_data/ttk/menubutton.tcl',
- '/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
- ('_tcl_data/encoding/cp850.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
- 'DATA'),
- ('_tcl_data/msgs/mr_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/mr_in.msg',
- 'DATA'),
- ('_tk_data/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
- ('_tk_data/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
- ('_tk_data/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
- ('_tcl_data/encoding/cp857.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
- 'DATA'),
- ('_tcl_data/opt0.4/pkgIndex.tcl',
- '/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
- 'DATA'),
- ('_tk_data/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
- ('_tk_data/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
- ('_tcl_data/encoding/cp932.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_pa.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pa.msg',
- 'DATA'),
- ('_tk_data/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
- ('_tk_data/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-3.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
- 'DATA'),
- ('_tk_data/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
- ('_tcl_data/msgs/kw_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg',
- 'DATA'),
- ('_tcl_data/encoding/euc-kr.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
- 'DATA'),
- ('_tk_data/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
- ('_tcl_data/msgs/es_ec.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ec.msg',
- 'DATA'),
- ('_tcl_data/encoding/jis0201.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
- 'DATA'),
- ('_tcl_data/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
- ('_tcl_data/msgs/fo_fo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg',
- 'DATA'),
- ('_tcl_data/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
- ('_tcl_data/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
- ('_tcl_data/encoding/cp852.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
- 'DATA'),
- ('_tcl_data/encoding/ascii.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
- 'DATA'),
- ('_tcl_data/msgs/af_za.msg',
- '/usr/share/tcltk/tcl8.6/msgs/af_za.msg',
- 'DATA'),
- ('_tk_data/ttk/classicTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
- 'DATA'),
- ('_tcl_data/encoding/koi8-r.enc',
- '/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
- 'DATA'),
- ('_tcl_data/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
- ('_tcl_data/msgs/zh_cn.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg',
- 'DATA'),
- ('_tk_data/ttk/treeview.tcl',
- '/usr/share/tcltk/tk8.6/ttk/treeview.tcl',
- 'DATA'),
- ('_tcl_data/tcl8/tcltest-2.5.7.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.5.7.tm',
- 'DATA'),
- ('_tcl_data/msgs/es_pe.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pe.msg',
- 'DATA'),
- ('_tcl_data/msgs/ko_kr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg',
- 'DATA'),
- ('_tcl_data/msgs/ar_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/ar_jo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_nz.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_nz.msg',
- 'DATA'),
- ('_tk_data/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
- ('_tcl_data/encoding/cp874.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1250.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_ni.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ni.msg',
- 'DATA'),
- ('_tk_data/ttk/cursors.tcl',
- '/usr/share/tcltk/tk8.6/ttk/cursors.tcl',
- 'DATA'),
- ('_tk_data/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
- ('_tcl_data/msgs/gv_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg',
- 'DATA'),
- ('_tk_data/panedwindow.tcl',
- '/usr/share/tcltk/tk8.6/panedwindow.tcl',
- 'DATA'),
- ('_tk_data/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
- ('_tcl_data/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
- ('_tk_data/ttk/combobox.tcl',
- '/usr/share/tcltk/tk8.6/ttk/combobox.tcl',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-16.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
- 'DATA'),
- ('_tk_data/images/logo64.gif',
- '/usr/share/tcltk/tk8.6/images/logo64.gif',
- 'DATA'),
- ('_tk_data/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
- ('_tcl_data/msgs/en_ie.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ie.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_sg.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_sg.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp855.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
- 'DATA'),
- ('_tcl_data/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
- ('_tk_data/images/logoMed.gif',
- '/usr/share/tcltk/tk8.6/images/logoMed.gif',
- 'DATA'),
- ('_tcl_data/encoding/macCentEuro.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
- 'DATA'),
- ('_tk_data/images/pwrdLogo.eps',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
- 'DATA'),
- ('_tk_data/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
- ('_tcl_data/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
- ('_tcl_data/msgs/es_sv.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_sv.msg',
- 'DATA'),
- ('_tcl_data/encoding/macGreek.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_uy.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_uy.msg',
- 'DATA'),
- ('_tk_data/ttk/vistaTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
- ('_tcl_data/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
- ('_tcl_data/msgs/es_cr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_cr.msg',
- 'DATA'),
- ('_tcl_data/encoding/euc-jp.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
- 'DATA'),
- ('_tcl_data/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
- ('_tcl_data/encoding/cp869.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
- 'DATA'),
- ('_tcl_data/http1.0/pkgIndex.tcl',
- '/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
- 'DATA'),
- ('_tcl_data/tcl8/http-2.9.8.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/http-2.9.8.tm',
- 'DATA'),
- ('_tk_data/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
- ('_tcl_data/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
- ('_tcl_data/encoding/cp1255.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb2312.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
- 'DATA'),
- ('_tcl_data/msgs/hi_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/hi_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_ph.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ph.msg',
- 'DATA'),
- ('_tcl_data/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
- ('_tcl_data/tcl8/msgcat-1.6.1.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
- 'DATA'),
- ('_tcl_data/encoding/iso2022-kr.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
- 'DATA'),
- ('_tcl_data/msgs/zh_tw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg',
- 'DATA'),
- ('_tcl_data/msgs/ru_ua.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp950.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
- 'DATA'),
- ('_tcl_data/encoding/jis0212.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
- 'DATA'),
- ('_tcl_data/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
- ('_tk_data/ttk/aquaTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl',
- 'DATA'),
- ('_tk_data/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
- ('_tk_data/images/tai-ku.gif',
- '/usr/share/tcltk/tk8.6/images/tai-ku.gif',
- 'DATA'),
- ('_tcl_data/encoding/macCyrillic.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
- 'DATA'),
- ('_tcl_data/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
- ('_tcl_data/encoding/iso2022.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
- 'DATA'),
- ('_tcl_data/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
- ('_tk_data/images/pwrdLogo100.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
- 'DATA'),
- ('_tcl_data/encoding/cp437.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp864.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_pr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pr.msg',
- 'DATA'),
- ('_tk_data/images/pwrdLogo175.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
- 'DATA'),
- ('_tk_data/ttk/notebook.tcl',
- '/usr/share/tcltk/tk8.6/ttk/notebook.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
- ('_tcl_data/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
- ('_tcl_data/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
- ('_tcl_data/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
- ('_tk_data/unsupported.tcl',
- '/usr/share/tcltk/tk8.6/unsupported.tcl',
- 'DATA'),
- ('_tcl_data/msgs/fr_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_be.msg',
- 'DATA'),
- ('_tcl_data/encoding/big5.enc',
- '/usr/share/tcltk/tcl8.6/encoding/big5.enc',
- 'DATA'),
- ('_tk_data/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
- ('_tcl_data/msgs/es_ve.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ve.msg',
- 'DATA'),
- ('_tcl_data/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
- ('_tk_data/images/logoLarge.gif',
- '/usr/share/tcltk/tk8.6/images/logoLarge.gif',
- 'DATA'),
- ('_tk_data/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
- ('_tcl_data/opt0.4/optparse.tcl',
- '/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
- 'DATA'),
- ('_tk_data/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
- ('_tcl_data/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
- ('_tcl_data/msgs/es_do.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_do.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_hk.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_hk.msg',
- 'DATA'),
- ('_tk_data/ttk/sizegrip.tcl',
- '/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl',
- 'DATA'),
- ('_tcl_data/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
- ('_tcl_data/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
- ('_tk_data/images/pwrdLogo200.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
- 'DATA'),
- ('_tcl_data/msgs/en_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_in.msg',
- 'DATA'),
- ('_tk_data/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
- ('_tcl_data/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
- ('_tcl_data/msgs/ar_lb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg',
- 'DATA'),
- ('_tcl_data/msgs/zh_sg.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_be.msg',
- 'DATA'),
- ('_tk_data/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
- ('_tcl_data/encoding/cp865.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
- 'DATA'),
- ('_tcl_data/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
- ('_tcl_data/encoding/tis-620.enc',
- '/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
- 'DATA'),
- ('_tcl_data/msgs/kl_gl.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp860.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
- 'DATA'),
- ('_tk_data/images/pwrdLogo150.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
- 'DATA'),
- ('_tcl_data/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
- ('_tk_data/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
- ('_tcl_data/msgs/en_zw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_zw.msg',
- 'DATA'),
- ('_tk_data/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
- ('_tcl_data/tcl8/platform/shell-1.1.4.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
- 'DATA'),
- ('_tcl_data/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
- ('_tcl_data/msgs/de_at.msg',
- '/usr/share/tcltk/tcl8.6/msgs/de_at.msg',
- 'DATA'),
- ('_tk_data/fontchooser.tcl',
- '/usr/share/tcltk/tk8.6/fontchooser.tcl',
- 'DATA'),
- ('_tcl_data/msgs/pt_br.msg',
- '/usr/share/tcltk/tcl8.6/msgs/pt_br.msg',
- 'DATA'),
- ('_tcl_data/encoding/macDingbats.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
- 'DATA'),
- ('_tk_data/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-13.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
- 'DATA'),
- ('_tk_data/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
- ('_tcl_data/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
- ('_tk_data/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
- ('_tcl_data/encoding/cp1253.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
- 'DATA'),
- ('_tcl_data/encoding/macRoman.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
- 'DATA'),
- ('_tcl_data/encoding/macCroatian.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
- 'DATA'),
- ('_tcl_data/encoding/ebcdic.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
- 'DATA'),
- ('_tcl_data/msgs/kok_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kok_in.msg',
- 'DATA'),
- ('_tcl_data/encoding/gb12345.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
- 'DATA'),
- ('_tcl_data/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
- ('_tcl_data/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
- ('_tcl_data/encoding/jis0208.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
- 'DATA'),
- ('_tcl_data/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
- ('_tk_data/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
- ('_tcl_data/msgs/fr_ca.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-7.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
- 'DATA'),
- ('_tcl_data/msgs/ms_my.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ms_my.msg',
- 'DATA'),
- ('_tk_data/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
- ('_tcl_data/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
- ('_tcl_data/encoding/macIceland.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
- 'DATA'),
- ('_tcl_data/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
- ('_tk_data/msgs/zh_cn.msg', '/usr/share/tcltk/tk8.6/msgs/zh_cn.msg', 'DATA'),
- ('_tcl_data/msgs/es_py.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_py.msg',
- 'DATA'),
- ('_tcl_data/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
- ('_tcl_data/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
- ('_tk_data/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
- ('_tcl_data/encoding/cp936.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
- 'DATA'),
- ('_tk_data/images/logo.eps',
- '/usr/share/tcltk/tk8.6/images/logo.eps',
- 'DATA'),
- ('_tcl_data/msgs/it_ch.msg',
- '/usr/share/tcltk/tcl8.6/msgs/it_ch.msg',
- 'DATA'),
- ('_tcl_data/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
- ('_tcl_data/encoding/cp861.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
- 'DATA'),
- ('_tk_data/ttk/winTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/winTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
- ('_tcl_data/encoding/iso2022-jp.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
- 'DATA'),
- ('_tcl_data/msgs/fa_ir.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_bw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_bw.msg',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD',
- 'DATA'),
- ('setuptools/_vendor/jaraco/text/Lorem ipsum.txt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/text/Lorem '
- 'ipsum.txt',
- 'DATA'),
- ('certifi/py.typed',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/py.typed',
- 'DATA'),
- ('certifi/cacert.pem',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/cacert.pem',
- 'DATA'),
- ('base_library.zip',
- '/home/borderban/Рабочий стол/client-py/build/FactorioSync/base_library.zip',
- 'DATA')],
- [('copyreg', '/usr/lib/python3.12/copyreg.py', 'PYMODULE'),
- ('re._parser', '/usr/lib/python3.12/re/_parser.py', 'PYMODULE'),
- ('re._constants', '/usr/lib/python3.12/re/_constants.py', 'PYMODULE'),
- ('re._compiler', '/usr/lib/python3.12/re/_compiler.py', 'PYMODULE'),
- ('re._casefix', '/usr/lib/python3.12/re/_casefix.py', 'PYMODULE'),
- ('re', '/usr/lib/python3.12/re/__init__.py', 'PYMODULE'),
- ('locale', '/usr/lib/python3.12/locale.py', 'PYMODULE'),
- ('sre_parse', '/usr/lib/python3.12/sre_parse.py', 'PYMODULE'),
- ('encodings.zlib_codec',
- '/usr/lib/python3.12/encodings/zlib_codec.py',
- 'PYMODULE'),
- ('encodings.uu_codec',
- '/usr/lib/python3.12/encodings/uu_codec.py',
- 'PYMODULE'),
- ('encodings.utf_8_sig',
- '/usr/lib/python3.12/encodings/utf_8_sig.py',
- 'PYMODULE'),
- ('encodings.utf_8', '/usr/lib/python3.12/encodings/utf_8.py', 'PYMODULE'),
- ('encodings.utf_7', '/usr/lib/python3.12/encodings/utf_7.py', 'PYMODULE'),
- ('encodings.utf_32_le',
- '/usr/lib/python3.12/encodings/utf_32_le.py',
- 'PYMODULE'),
- ('encodings.utf_32_be',
- '/usr/lib/python3.12/encodings/utf_32_be.py',
- 'PYMODULE'),
- ('encodings.utf_32', '/usr/lib/python3.12/encodings/utf_32.py', 'PYMODULE'),
- ('encodings.utf_16_le',
- '/usr/lib/python3.12/encodings/utf_16_le.py',
- 'PYMODULE'),
- ('encodings.utf_16_be',
- '/usr/lib/python3.12/encodings/utf_16_be.py',
- 'PYMODULE'),
- ('encodings.utf_16', '/usr/lib/python3.12/encodings/utf_16.py', 'PYMODULE'),
- ('encodings.unicode_escape',
- '/usr/lib/python3.12/encodings/unicode_escape.py',
- 'PYMODULE'),
- ('encodings.undefined',
- '/usr/lib/python3.12/encodings/undefined.py',
- 'PYMODULE'),
- ('encodings.tis_620', '/usr/lib/python3.12/encodings/tis_620.py', 'PYMODULE'),
- ('encodings.shift_jisx0213',
- '/usr/lib/python3.12/encodings/shift_jisx0213.py',
- 'PYMODULE'),
- ('encodings.shift_jis_2004',
- '/usr/lib/python3.12/encodings/shift_jis_2004.py',
- 'PYMODULE'),
- ('encodings.shift_jis',
- '/usr/lib/python3.12/encodings/shift_jis.py',
- 'PYMODULE'),
- ('encodings.rot_13', '/usr/lib/python3.12/encodings/rot_13.py', 'PYMODULE'),
- ('encodings.raw_unicode_escape',
- '/usr/lib/python3.12/encodings/raw_unicode_escape.py',
- 'PYMODULE'),
- ('encodings.quopri_codec',
- '/usr/lib/python3.12/encodings/quopri_codec.py',
- 'PYMODULE'),
- ('encodings.punycode',
- '/usr/lib/python3.12/encodings/punycode.py',
- 'PYMODULE'),
- ('encodings.ptcp154', '/usr/lib/python3.12/encodings/ptcp154.py', 'PYMODULE'),
- ('encodings.palmos', '/usr/lib/python3.12/encodings/palmos.py', 'PYMODULE'),
- ('encodings.oem', '/usr/lib/python3.12/encodings/oem.py', 'PYMODULE'),
- ('encodings.mbcs', '/usr/lib/python3.12/encodings/mbcs.py', 'PYMODULE'),
- ('encodings.mac_turkish',
- '/usr/lib/python3.12/encodings/mac_turkish.py',
- 'PYMODULE'),
- ('encodings.mac_romanian',
- '/usr/lib/python3.12/encodings/mac_romanian.py',
- 'PYMODULE'),
- ('encodings.mac_roman',
- '/usr/lib/python3.12/encodings/mac_roman.py',
- 'PYMODULE'),
- ('encodings.mac_latin2',
- '/usr/lib/python3.12/encodings/mac_latin2.py',
- 'PYMODULE'),
- ('encodings.mac_iceland',
- '/usr/lib/python3.12/encodings/mac_iceland.py',
- 'PYMODULE'),
- ('encodings.mac_greek',
- '/usr/lib/python3.12/encodings/mac_greek.py',
- 'PYMODULE'),
- ('encodings.mac_farsi',
- '/usr/lib/python3.12/encodings/mac_farsi.py',
- 'PYMODULE'),
- ('encodings.mac_cyrillic',
- '/usr/lib/python3.12/encodings/mac_cyrillic.py',
- 'PYMODULE'),
- ('encodings.mac_croatian',
- '/usr/lib/python3.12/encodings/mac_croatian.py',
- 'PYMODULE'),
- ('encodings.mac_arabic',
- '/usr/lib/python3.12/encodings/mac_arabic.py',
- 'PYMODULE'),
- ('encodings.latin_1', '/usr/lib/python3.12/encodings/latin_1.py', 'PYMODULE'),
- ('encodings.kz1048', '/usr/lib/python3.12/encodings/kz1048.py', 'PYMODULE'),
- ('encodings.koi8_u', '/usr/lib/python3.12/encodings/koi8_u.py', 'PYMODULE'),
- ('encodings.koi8_t', '/usr/lib/python3.12/encodings/koi8_t.py', 'PYMODULE'),
- ('encodings.koi8_r', '/usr/lib/python3.12/encodings/koi8_r.py', 'PYMODULE'),
- ('encodings.johab', '/usr/lib/python3.12/encodings/johab.py', 'PYMODULE'),
- ('encodings.iso8859_9',
- '/usr/lib/python3.12/encodings/iso8859_9.py',
- 'PYMODULE'),
- ('encodings.iso8859_8',
- '/usr/lib/python3.12/encodings/iso8859_8.py',
- 'PYMODULE'),
- ('encodings.iso8859_7',
- '/usr/lib/python3.12/encodings/iso8859_7.py',
- 'PYMODULE'),
- ('encodings.iso8859_6',
- '/usr/lib/python3.12/encodings/iso8859_6.py',
- 'PYMODULE'),
- ('encodings.iso8859_5',
- '/usr/lib/python3.12/encodings/iso8859_5.py',
- 'PYMODULE'),
- ('encodings.iso8859_4',
- '/usr/lib/python3.12/encodings/iso8859_4.py',
- 'PYMODULE'),
- ('encodings.iso8859_3',
- '/usr/lib/python3.12/encodings/iso8859_3.py',
- 'PYMODULE'),
- ('encodings.iso8859_2',
- '/usr/lib/python3.12/encodings/iso8859_2.py',
- 'PYMODULE'),
- ('encodings.iso8859_16',
- '/usr/lib/python3.12/encodings/iso8859_16.py',
- 'PYMODULE'),
- ('encodings.iso8859_15',
- '/usr/lib/python3.12/encodings/iso8859_15.py',
- 'PYMODULE'),
- ('encodings.iso8859_14',
- '/usr/lib/python3.12/encodings/iso8859_14.py',
- 'PYMODULE'),
- ('encodings.iso8859_13',
- '/usr/lib/python3.12/encodings/iso8859_13.py',
- 'PYMODULE'),
- ('encodings.iso8859_11',
- '/usr/lib/python3.12/encodings/iso8859_11.py',
- 'PYMODULE'),
- ('encodings.iso8859_10',
- '/usr/lib/python3.12/encodings/iso8859_10.py',
- 'PYMODULE'),
- ('encodings.iso8859_1',
- '/usr/lib/python3.12/encodings/iso8859_1.py',
- 'PYMODULE'),
- ('encodings.iso2022_kr',
- '/usr/lib/python3.12/encodings/iso2022_kr.py',
- 'PYMODULE'),
- ('encodings.iso2022_jp_ext',
- '/usr/lib/python3.12/encodings/iso2022_jp_ext.py',
- 'PYMODULE'),
- ('encodings.iso2022_jp_3',
- '/usr/lib/python3.12/encodings/iso2022_jp_3.py',
- 'PYMODULE'),
- ('encodings.iso2022_jp_2004',
- '/usr/lib/python3.12/encodings/iso2022_jp_2004.py',
- 'PYMODULE'),
- ('encodings.iso2022_jp_2',
- '/usr/lib/python3.12/encodings/iso2022_jp_2.py',
- 'PYMODULE'),
- ('encodings.iso2022_jp_1',
- '/usr/lib/python3.12/encodings/iso2022_jp_1.py',
- 'PYMODULE'),
- ('encodings.iso2022_jp',
- '/usr/lib/python3.12/encodings/iso2022_jp.py',
- 'PYMODULE'),
- ('encodings.idna', '/usr/lib/python3.12/encodings/idna.py', 'PYMODULE'),
- ('encodings.hz', '/usr/lib/python3.12/encodings/hz.py', 'PYMODULE'),
- ('encodings.hp_roman8',
- '/usr/lib/python3.12/encodings/hp_roman8.py',
- 'PYMODULE'),
- ('encodings.hex_codec',
- '/usr/lib/python3.12/encodings/hex_codec.py',
- 'PYMODULE'),
- ('encodings.gbk', '/usr/lib/python3.12/encodings/gbk.py', 'PYMODULE'),
- ('encodings.gb2312', '/usr/lib/python3.12/encodings/gb2312.py', 'PYMODULE'),
- ('encodings.gb18030', '/usr/lib/python3.12/encodings/gb18030.py', 'PYMODULE'),
- ('encodings.euc_kr', '/usr/lib/python3.12/encodings/euc_kr.py', 'PYMODULE'),
- ('encodings.euc_jp', '/usr/lib/python3.12/encodings/euc_jp.py', 'PYMODULE'),
- ('encodings.euc_jisx0213',
- '/usr/lib/python3.12/encodings/euc_jisx0213.py',
- 'PYMODULE'),
- ('encodings.euc_jis_2004',
- '/usr/lib/python3.12/encodings/euc_jis_2004.py',
- 'PYMODULE'),
- ('encodings.cp950', '/usr/lib/python3.12/encodings/cp950.py', 'PYMODULE'),
- ('encodings.cp949', '/usr/lib/python3.12/encodings/cp949.py', 'PYMODULE'),
- ('encodings.cp932', '/usr/lib/python3.12/encodings/cp932.py', 'PYMODULE'),
- ('encodings.cp875', '/usr/lib/python3.12/encodings/cp875.py', 'PYMODULE'),
- ('encodings.cp874', '/usr/lib/python3.12/encodings/cp874.py', 'PYMODULE'),
- ('encodings.cp869', '/usr/lib/python3.12/encodings/cp869.py', 'PYMODULE'),
- ('encodings.cp866', '/usr/lib/python3.12/encodings/cp866.py', 'PYMODULE'),
- ('encodings.cp865', '/usr/lib/python3.12/encodings/cp865.py', 'PYMODULE'),
- ('encodings.cp864', '/usr/lib/python3.12/encodings/cp864.py', 'PYMODULE'),
- ('encodings.cp863', '/usr/lib/python3.12/encodings/cp863.py', 'PYMODULE'),
- ('encodings.cp862', '/usr/lib/python3.12/encodings/cp862.py', 'PYMODULE'),
- ('encodings.cp861', '/usr/lib/python3.12/encodings/cp861.py', 'PYMODULE'),
- ('encodings.cp860', '/usr/lib/python3.12/encodings/cp860.py', 'PYMODULE'),
- ('encodings.cp858', '/usr/lib/python3.12/encodings/cp858.py', 'PYMODULE'),
- ('encodings.cp857', '/usr/lib/python3.12/encodings/cp857.py', 'PYMODULE'),
- ('encodings.cp856', '/usr/lib/python3.12/encodings/cp856.py', 'PYMODULE'),
- ('encodings.cp855', '/usr/lib/python3.12/encodings/cp855.py', 'PYMODULE'),
- ('encodings.cp852', '/usr/lib/python3.12/encodings/cp852.py', 'PYMODULE'),
- ('encodings.cp850', '/usr/lib/python3.12/encodings/cp850.py', 'PYMODULE'),
- ('encodings.cp775', '/usr/lib/python3.12/encodings/cp775.py', 'PYMODULE'),
- ('encodings.cp737', '/usr/lib/python3.12/encodings/cp737.py', 'PYMODULE'),
- ('encodings.cp720', '/usr/lib/python3.12/encodings/cp720.py', 'PYMODULE'),
- ('encodings.cp500', '/usr/lib/python3.12/encodings/cp500.py', 'PYMODULE'),
- ('encodings.cp437', '/usr/lib/python3.12/encodings/cp437.py', 'PYMODULE'),
- ('encodings.cp424', '/usr/lib/python3.12/encodings/cp424.py', 'PYMODULE'),
- ('encodings.cp273', '/usr/lib/python3.12/encodings/cp273.py', 'PYMODULE'),
- ('encodings.cp1258', '/usr/lib/python3.12/encodings/cp1258.py', 'PYMODULE'),
- ('encodings.cp1257', '/usr/lib/python3.12/encodings/cp1257.py', 'PYMODULE'),
- ('encodings.cp1256', '/usr/lib/python3.12/encodings/cp1256.py', 'PYMODULE'),
- ('encodings.cp1255', '/usr/lib/python3.12/encodings/cp1255.py', 'PYMODULE'),
- ('encodings.cp1254', '/usr/lib/python3.12/encodings/cp1254.py', 'PYMODULE'),
- ('encodings.cp1253', '/usr/lib/python3.12/encodings/cp1253.py', 'PYMODULE'),
- ('encodings.cp1252', '/usr/lib/python3.12/encodings/cp1252.py', 'PYMODULE'),
- ('encodings.cp1251', '/usr/lib/python3.12/encodings/cp1251.py', 'PYMODULE'),
- ('encodings.cp1250', '/usr/lib/python3.12/encodings/cp1250.py', 'PYMODULE'),
- ('encodings.cp1140', '/usr/lib/python3.12/encodings/cp1140.py', 'PYMODULE'),
- ('encodings.cp1125', '/usr/lib/python3.12/encodings/cp1125.py', 'PYMODULE'),
- ('encodings.cp1026', '/usr/lib/python3.12/encodings/cp1026.py', 'PYMODULE'),
- ('encodings.cp1006', '/usr/lib/python3.12/encodings/cp1006.py', 'PYMODULE'),
- ('encodings.cp037', '/usr/lib/python3.12/encodings/cp037.py', 'PYMODULE'),
- ('encodings.charmap', '/usr/lib/python3.12/encodings/charmap.py', 'PYMODULE'),
- ('encodings.bz2_codec',
- '/usr/lib/python3.12/encodings/bz2_codec.py',
- 'PYMODULE'),
- ('encodings.big5hkscs',
- '/usr/lib/python3.12/encodings/big5hkscs.py',
- 'PYMODULE'),
- ('encodings.big5', '/usr/lib/python3.12/encodings/big5.py', 'PYMODULE'),
- ('encodings.base64_codec',
- '/usr/lib/python3.12/encodings/base64_codec.py',
- 'PYMODULE'),
- ('encodings.ascii', '/usr/lib/python3.12/encodings/ascii.py', 'PYMODULE'),
- ('encodings.aliases', '/usr/lib/python3.12/encodings/aliases.py', 'PYMODULE'),
- ('encodings', '/usr/lib/python3.12/encodings/__init__.py', 'PYMODULE'),
- ('abc', '/usr/lib/python3.12/abc.py', 'PYMODULE'),
- ('warnings', '/usr/lib/python3.12/warnings.py', 'PYMODULE'),
- ('weakref', '/usr/lib/python3.12/weakref.py', 'PYMODULE'),
- ('operator', '/usr/lib/python3.12/operator.py', 'PYMODULE'),
- ('codecs', '/usr/lib/python3.12/codecs.py', 'PYMODULE'),
- ('linecache', '/usr/lib/python3.12/linecache.py', 'PYMODULE'),
- ('sre_compile', '/usr/lib/python3.12/sre_compile.py', 'PYMODULE'),
- ('_weakrefset', '/usr/lib/python3.12/_weakrefset.py', 'PYMODULE'),
- ('genericpath', '/usr/lib/python3.12/genericpath.py', 'PYMODULE'),
- ('keyword', '/usr/lib/python3.12/keyword.py', 'PYMODULE'),
- ('traceback', '/usr/lib/python3.12/traceback.py', 'PYMODULE'),
- ('ntpath', '/usr/lib/python3.12/ntpath.py', 'PYMODULE'),
- ('collections.abc', '/usr/lib/python3.12/collections/abc.py', 'PYMODULE'),
- ('collections', '/usr/lib/python3.12/collections/__init__.py', 'PYMODULE'),
- ('sre_constants', '/usr/lib/python3.12/sre_constants.py', 'PYMODULE'),
- ('posixpath', '/usr/lib/python3.12/posixpath.py', 'PYMODULE'),
- ('enum', '/usr/lib/python3.12/enum.py', 'PYMODULE'),
- ('_collections_abc', '/usr/lib/python3.12/_collections_abc.py', 'PYMODULE'),
- ('heapq', '/usr/lib/python3.12/heapq.py', 'PYMODULE'),
- ('stat', '/usr/lib/python3.12/stat.py', 'PYMODULE'),
- ('types', '/usr/lib/python3.12/types.py', 'PYMODULE'),
- ('reprlib', '/usr/lib/python3.12/reprlib.py', 'PYMODULE'),
- ('io', '/usr/lib/python3.12/io.py', 'PYMODULE'),
- ('functools', '/usr/lib/python3.12/functools.py', 'PYMODULE'),
- ('os', '/usr/lib/python3.12/os.py', 'PYMODULE')])
diff --git a/build/FactorioSync/EXE-00.toc b/build/FactorioSync/EXE-00.toc
deleted file mode 100644
index 9b8172b..0000000
--- a/build/FactorioSync/EXE-00.toc
+++ /dev/null
@@ -1,921 +0,0 @@
-('/home/borderban/Рабочий стол/client-py/dist/FactorioSync',
- False,
- False,
- False,
- None,
- None,
- False,
- False,
- None,
- True,
- False,
- None,
- None,
- None,
- '/home/borderban/Рабочий стол/client-py/build/FactorioSync/FactorioSync.pkg',
- [('pyi-contents-directory _internal', '', 'OPTION'),
- ('PYZ-00.pyz',
- '/home/borderban/Рабочий стол/client-py/build/FactorioSync/PYZ-00.pyz',
- 'PYZ'),
- ('struct',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/struct.pyc',
- 'PYMODULE'),
- ('pyimod01_archive',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/pyimod01_archive.pyc',
- 'PYMODULE'),
- ('pyimod02_importers',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/pyimod02_importers.pyc',
- 'PYMODULE'),
- ('pyimod03_ctypes',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/pyimod03_ctypes.pyc',
- 'PYMODULE'),
- ('pyiboot01_bootstrap',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
- 'PYSOURCE'),
- ('pyi_rth_inspect',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
- 'PYSOURCE'),
- ('pyi_rth__tkinter',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py',
- 'PYSOURCE'),
- ('pyi_rth_setuptools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_setuptools.py',
- 'PYSOURCE'),
- ('pyi_rth_pkgutil',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py',
- 'PYSOURCE'),
- ('pyi_rth_multiprocessing',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py',
- 'PYSOURCE'),
- ('client', '/home/borderban/Рабочий стол/client-py/client.py', 'PYSOURCE'),
- ('libpython3.12.so.1.0',
- '/lib/x86_64-linux-gnu/libpython3.12.so.1.0',
- 'BINARY'),
- ('python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('charset_normalizer/md.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
- ('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
- ('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
- ('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
- ('libssl.so.3', '/lib/x86_64-linux-gnu/libssl.so.3', 'BINARY'),
- ('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
- ('libffi.so.8', '/lib/x86_64-linux-gnu/libffi.so.8', 'BINARY'),
- ('libreadline.so.8', '/lib/x86_64-linux-gnu/libreadline.so.8', 'BINARY'),
- ('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
- ('libXss.so.1', '/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
- ('libbrotlicommon.so.1',
- '/lib/x86_64-linux-gnu/libbrotlicommon.so.1',
- 'BINARY'),
- ('libXext.so.6', '/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
- ('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
- ('libtcl8.6.so', '/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
- ('libfreetype.so.6', '/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
- ('libX11.so.6', '/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
- ('libXau.so.6', '/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
- ('libbrotlidec.so.1', '/lib/x86_64-linux-gnu/libbrotlidec.so.1', 'BINARY'),
- ('libXft.so.2', '/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
- ('libmd.so.0', '/lib/x86_64-linux-gnu/libmd.so.0', 'BINARY'),
- ('libBLT.2.5.so.8.6', '/lib/libBLT.2.5.so.8.6', 'BINARY'),
- ('libpng16.so.16', '/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
- ('libXdmcp.so.6', '/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
- ('libfontconfig.so.1', '/lib/x86_64-linux-gnu/libfontconfig.so.1', 'BINARY'),
- ('libtk8.6.so', '/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
- ('libXrender.so.1', '/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY'),
- ('_tcl_data/encoding/cp949.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
- 'DATA'),
- ('_tcl_data/msgs/en_ca.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ca.msg',
- 'DATA'),
- ('_tcl_data/msgs/es_cl.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_cl.msg',
- 'DATA'),
- ('_tcl_data/encoding/dingbats.enc',
- '/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
- 'DATA'),
- ('_tcl_data/msgs/te_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/te_in.msg',
- 'DATA'),
- ('_tk_data/ttk/scrollbar.tcl',
- '/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-1.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
- 'DATA'),
- ('_tcl_data/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
- ('_tcl_data/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-14.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
- 'DATA'),
- ('_tcl_data/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
- ('_tk_data/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
- ('_tk_data/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
- ('_tcl_data/msgs/eu_es.msg',
- '/usr/share/tcltk/tcl8.6/msgs/eu_es.msg',
- 'DATA'),
- ('_tk_data/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
- ('_tcl_data/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
- ('_tcl_data/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
- ('_tcl_data/msgs/zh_hk.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg',
- 'DATA'),
- ('_tcl_data/encoding/macUkraine.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1256.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
- 'DATA'),
- ('_tcl_data/encoding/macRomania.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
- 'DATA'),
- ('_tcl_data/encoding/macTurkish.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb1988.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
- 'DATA'),
- ('_tcl_data/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
- ('_tk_data/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
- ('_tk_data/ttk/xpTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-15.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-4.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
- 'DATA'),
- ('_tcl_data/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
- ('_tk_data/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
- ('_tk_data/images/pwrdLogo75.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
- 'DATA'),
- ('_tk_data/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-5.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
- 'DATA'),
- ('_tcl_data/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
- ('_tk_data/images/logo100.gif',
- '/usr/share/tcltk/tk8.6/images/logo100.gif',
- 'DATA'),
- ('_tcl_data/encoding/cp737.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
- 'DATA'),
- ('_tcl_data/tcl8/platform-1.0.19.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.19.tm',
- 'DATA'),
- ('_tk_data/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
- ('_tcl_data/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
- ('_tk_data/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
- ('_tk_data/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
- ('_tcl_data/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
- ('_tcl_data/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
- ('_tk_data/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
- ('_tcl_data/encoding/cp866.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
- 'DATA'),
- ('_tk_data/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
- ('_tk_data/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
- ('_tcl_data/msgs/de_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/de_be.msg',
- 'DATA'),
- ('_tk_data/ttk/defaults.tcl',
- '/usr/share/tcltk/tk8.6/ttk/defaults.tcl',
- 'DATA'),
- ('_tcl_data/encoding/cp1252.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
- 'DATA'),
- ('_tk_data/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
- ('_tk_data/msgs/fi.msg', '/usr/share/tcltk/tk8.6/msgs/fi.msg', 'DATA'),
- ('_tk_data/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-11.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-11.enc',
- 'DATA'),
- ('_tcl_data/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
- ('_tcl_data/msgs/es_co.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_co.msg',
- 'DATA'),
- ('_tk_data/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-10.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
- 'DATA'),
- ('_tcl_data/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
- ('_tcl_data/msgs/nl_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/nl_be.msg',
- 'DATA'),
- ('_tcl_data/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
- ('_tcl_data/msgs/ar_sy.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg',
- 'DATA'),
- ('_tcl_data/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
- ('_tcl_data/encoding/shiftjis.enc',
- '/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb2312-raw.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
- 'DATA'),
- ('_tk_data/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
- ('_tcl_data/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
- ('_tcl_data/encoding/koi8-u.enc',
- '/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp775.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_mx.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_mx.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-2.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
- 'DATA'),
- ('_tcl_data/encoding/euc-cn.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
- 'DATA'),
- ('_tcl_data/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
- ('_tcl_data/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
- ('_tcl_data/msgs/en_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_gb.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp1251.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
- 'DATA'),
- ('_tcl_data/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
- ('_tk_data/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
- ('_tcl_data/msgs/fr_ch.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-9.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
- 'DATA'),
- ('_tcl_data/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
- ('_tcl_data/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
- ('_tcl_data/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
- ('_tk_data/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
- ('_tcl_data/http1.0/http.tcl',
- '/usr/share/tcltk/tcl8.6/http1.0/http.tcl',
- 'DATA'),
- ('_tcl_data/encoding/cp862.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
- 'DATA'),
- ('_tcl_data/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-8.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
- 'DATA'),
- ('_tk_data/ttk/altTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/altTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
- ('_tcl_data/encoding/cns11643.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cns11643.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1257.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
- 'DATA'),
- ('_tcl_data/encoding/symbol.enc',
- '/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
- 'DATA'),
- ('_tcl_data/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
- ('_tcl_data/msgs/gl_es.msg',
- '/usr/share/tcltk/tcl8.6/msgs/gl_es.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_au.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_au.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp1258.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_bo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_bo.msg',
- 'DATA'),
- ('_tcl_data/msgs/bn_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/bn_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
- ('_tcl_data/msgs/fa_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fa_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/es_hn.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_hn.msg',
- 'DATA'),
- ('_tcl_data/msgs/id_id.msg',
- '/usr/share/tcltk/tcl8.6/msgs/id_id.msg',
- 'DATA'),
- ('_tk_data/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
- ('_tcl_data/msgs/es_gt.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_gt.msg',
- 'DATA'),
- ('_tk_data/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
- ('_tk_data/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
- ('_tcl_data/encoding/macThai.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
- 'DATA'),
- ('_tk_data/ttk/panedwindow.tcl',
- '/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
- 'DATA'),
- ('_tcl_data/encoding/macJapan.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
- 'DATA'),
- ('_tcl_data/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-6.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp863.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
- 'DATA'),
- ('_tcl_data/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
- ('_tk_data/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
- ('_tcl_data/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
- ('_tcl_data/encoding/cp1254.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
- 'DATA'),
- ('_tk_data/ttk/clamTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl',
- 'DATA'),
- ('_tcl_data/encoding/ksc5601.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
- 'DATA'),
- ('_tcl_data/msgs/en_za.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_za.msg',
- 'DATA'),
- ('_tcl_data/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
- ('_tk_data/ttk/spinbox.tcl',
- '/usr/share/tcltk/tk8.6/ttk/spinbox.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ta_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ta_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
- ('_tcl_data/msgs/ga_ie.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg',
- 'DATA'),
- ('_tcl_data/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
- ('_tk_data/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
- ('_tcl_data/msgs/es_ar.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ar.msg',
- 'DATA'),
- ('_tk_data/ttk/progress.tcl',
- '/usr/share/tcltk/tk8.6/ttk/progress.tcl',
- 'DATA'),
- ('_tk_data/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
- ('_tk_data/ttk/menubutton.tcl',
- '/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
- ('_tcl_data/encoding/cp850.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
- 'DATA'),
- ('_tcl_data/msgs/mr_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/mr_in.msg',
- 'DATA'),
- ('_tk_data/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
- ('_tk_data/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
- ('_tk_data/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
- ('_tcl_data/encoding/cp857.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
- 'DATA'),
- ('_tcl_data/opt0.4/pkgIndex.tcl',
- '/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
- 'DATA'),
- ('_tk_data/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
- ('_tk_data/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
- ('_tcl_data/encoding/cp932.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_pa.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pa.msg',
- 'DATA'),
- ('_tk_data/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
- ('_tk_data/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-3.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
- 'DATA'),
- ('_tk_data/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
- ('_tcl_data/msgs/kw_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg',
- 'DATA'),
- ('_tcl_data/encoding/euc-kr.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
- 'DATA'),
- ('_tk_data/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
- ('_tcl_data/msgs/es_ec.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ec.msg',
- 'DATA'),
- ('_tcl_data/encoding/jis0201.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
- 'DATA'),
- ('_tcl_data/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
- ('_tcl_data/msgs/fo_fo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg',
- 'DATA'),
- ('_tcl_data/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
- ('_tcl_data/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
- ('_tcl_data/encoding/cp852.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
- 'DATA'),
- ('_tcl_data/encoding/ascii.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
- 'DATA'),
- ('_tcl_data/msgs/af_za.msg',
- '/usr/share/tcltk/tcl8.6/msgs/af_za.msg',
- 'DATA'),
- ('_tk_data/ttk/classicTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
- 'DATA'),
- ('_tcl_data/encoding/koi8-r.enc',
- '/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
- 'DATA'),
- ('_tcl_data/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
- ('_tcl_data/msgs/zh_cn.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg',
- 'DATA'),
- ('_tk_data/ttk/treeview.tcl',
- '/usr/share/tcltk/tk8.6/ttk/treeview.tcl',
- 'DATA'),
- ('_tcl_data/tcl8/tcltest-2.5.7.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.5.7.tm',
- 'DATA'),
- ('_tcl_data/msgs/es_pe.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pe.msg',
- 'DATA'),
- ('_tcl_data/msgs/ko_kr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg',
- 'DATA'),
- ('_tcl_data/msgs/ar_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/ar_jo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_nz.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_nz.msg',
- 'DATA'),
- ('_tk_data/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
- ('_tcl_data/encoding/cp874.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1250.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_ni.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ni.msg',
- 'DATA'),
- ('_tk_data/ttk/cursors.tcl',
- '/usr/share/tcltk/tk8.6/ttk/cursors.tcl',
- 'DATA'),
- ('_tk_data/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
- ('_tcl_data/msgs/gv_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg',
- 'DATA'),
- ('_tk_data/panedwindow.tcl',
- '/usr/share/tcltk/tk8.6/panedwindow.tcl',
- 'DATA'),
- ('_tk_data/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
- ('_tcl_data/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
- ('_tk_data/ttk/combobox.tcl',
- '/usr/share/tcltk/tk8.6/ttk/combobox.tcl',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-16.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
- 'DATA'),
- ('_tk_data/images/logo64.gif',
- '/usr/share/tcltk/tk8.6/images/logo64.gif',
- 'DATA'),
- ('_tk_data/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
- ('_tcl_data/msgs/en_ie.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ie.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_sg.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_sg.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp855.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
- 'DATA'),
- ('_tcl_data/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
- ('_tk_data/images/logoMed.gif',
- '/usr/share/tcltk/tk8.6/images/logoMed.gif',
- 'DATA'),
- ('_tcl_data/encoding/macCentEuro.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
- 'DATA'),
- ('_tk_data/images/pwrdLogo.eps',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
- 'DATA'),
- ('_tk_data/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
- ('_tcl_data/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
- ('_tcl_data/msgs/es_sv.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_sv.msg',
- 'DATA'),
- ('_tcl_data/encoding/macGreek.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_uy.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_uy.msg',
- 'DATA'),
- ('_tk_data/ttk/vistaTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
- ('_tcl_data/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
- ('_tcl_data/msgs/es_cr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_cr.msg',
- 'DATA'),
- ('_tcl_data/encoding/euc-jp.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
- 'DATA'),
- ('_tcl_data/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
- ('_tcl_data/encoding/cp869.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
- 'DATA'),
- ('_tcl_data/http1.0/pkgIndex.tcl',
- '/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
- 'DATA'),
- ('_tcl_data/tcl8/http-2.9.8.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/http-2.9.8.tm',
- 'DATA'),
- ('_tk_data/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
- ('_tcl_data/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
- ('_tcl_data/encoding/cp1255.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb2312.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
- 'DATA'),
- ('_tcl_data/msgs/hi_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/hi_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_ph.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ph.msg',
- 'DATA'),
- ('_tcl_data/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
- ('_tcl_data/tcl8/msgcat-1.6.1.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
- 'DATA'),
- ('_tcl_data/encoding/iso2022-kr.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
- 'DATA'),
- ('_tcl_data/msgs/zh_tw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg',
- 'DATA'),
- ('_tcl_data/msgs/ru_ua.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp950.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
- 'DATA'),
- ('_tcl_data/encoding/jis0212.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
- 'DATA'),
- ('_tcl_data/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
- ('_tk_data/ttk/aquaTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl',
- 'DATA'),
- ('_tk_data/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
- ('_tk_data/images/tai-ku.gif',
- '/usr/share/tcltk/tk8.6/images/tai-ku.gif',
- 'DATA'),
- ('_tcl_data/encoding/macCyrillic.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
- 'DATA'),
- ('_tcl_data/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
- ('_tcl_data/encoding/iso2022.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
- 'DATA'),
- ('_tcl_data/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
- ('_tk_data/images/pwrdLogo100.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
- 'DATA'),
- ('_tcl_data/encoding/cp437.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp864.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_pr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pr.msg',
- 'DATA'),
- ('_tk_data/images/pwrdLogo175.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
- 'DATA'),
- ('_tk_data/ttk/notebook.tcl',
- '/usr/share/tcltk/tk8.6/ttk/notebook.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
- ('_tcl_data/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
- ('_tcl_data/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
- ('_tcl_data/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
- ('_tk_data/unsupported.tcl',
- '/usr/share/tcltk/tk8.6/unsupported.tcl',
- 'DATA'),
- ('_tcl_data/msgs/fr_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_be.msg',
- 'DATA'),
- ('_tcl_data/encoding/big5.enc',
- '/usr/share/tcltk/tcl8.6/encoding/big5.enc',
- 'DATA'),
- ('_tk_data/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
- ('_tcl_data/msgs/es_ve.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ve.msg',
- 'DATA'),
- ('_tcl_data/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
- ('_tk_data/images/logoLarge.gif',
- '/usr/share/tcltk/tk8.6/images/logoLarge.gif',
- 'DATA'),
- ('_tk_data/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
- ('_tcl_data/opt0.4/optparse.tcl',
- '/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
- 'DATA'),
- ('_tk_data/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
- ('_tcl_data/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
- ('_tcl_data/msgs/es_do.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_do.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_hk.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_hk.msg',
- 'DATA'),
- ('_tk_data/ttk/sizegrip.tcl',
- '/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl',
- 'DATA'),
- ('_tcl_data/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
- ('_tcl_data/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
- ('_tk_data/images/pwrdLogo200.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
- 'DATA'),
- ('_tcl_data/msgs/en_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_in.msg',
- 'DATA'),
- ('_tk_data/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
- ('_tcl_data/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
- ('_tcl_data/msgs/ar_lb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg',
- 'DATA'),
- ('_tcl_data/msgs/zh_sg.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_be.msg',
- 'DATA'),
- ('_tk_data/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
- ('_tcl_data/encoding/cp865.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
- 'DATA'),
- ('_tcl_data/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
- ('_tcl_data/encoding/tis-620.enc',
- '/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
- 'DATA'),
- ('_tcl_data/msgs/kl_gl.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp860.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
- 'DATA'),
- ('_tk_data/images/pwrdLogo150.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
- 'DATA'),
- ('_tcl_data/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
- ('_tk_data/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
- ('_tcl_data/msgs/en_zw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_zw.msg',
- 'DATA'),
- ('_tk_data/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
- ('_tcl_data/tcl8/platform/shell-1.1.4.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
- 'DATA'),
- ('_tcl_data/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
- ('_tcl_data/msgs/de_at.msg',
- '/usr/share/tcltk/tcl8.6/msgs/de_at.msg',
- 'DATA'),
- ('_tk_data/fontchooser.tcl',
- '/usr/share/tcltk/tk8.6/fontchooser.tcl',
- 'DATA'),
- ('_tcl_data/msgs/pt_br.msg',
- '/usr/share/tcltk/tcl8.6/msgs/pt_br.msg',
- 'DATA'),
- ('_tcl_data/encoding/macDingbats.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
- 'DATA'),
- ('_tk_data/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-13.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
- 'DATA'),
- ('_tk_data/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
- ('_tcl_data/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
- ('_tk_data/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
- ('_tcl_data/encoding/cp1253.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
- 'DATA'),
- ('_tcl_data/encoding/macRoman.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
- 'DATA'),
- ('_tcl_data/encoding/macCroatian.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
- 'DATA'),
- ('_tcl_data/encoding/ebcdic.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
- 'DATA'),
- ('_tcl_data/msgs/kok_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kok_in.msg',
- 'DATA'),
- ('_tcl_data/encoding/gb12345.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
- 'DATA'),
- ('_tcl_data/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
- ('_tcl_data/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
- ('_tcl_data/encoding/jis0208.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
- 'DATA'),
- ('_tcl_data/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
- ('_tk_data/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
- ('_tcl_data/msgs/fr_ca.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-7.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
- 'DATA'),
- ('_tcl_data/msgs/ms_my.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ms_my.msg',
- 'DATA'),
- ('_tk_data/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
- ('_tcl_data/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
- ('_tcl_data/encoding/macIceland.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
- 'DATA'),
- ('_tcl_data/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
- ('_tk_data/msgs/zh_cn.msg', '/usr/share/tcltk/tk8.6/msgs/zh_cn.msg', 'DATA'),
- ('_tcl_data/msgs/es_py.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_py.msg',
- 'DATA'),
- ('_tcl_data/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
- ('_tcl_data/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
- ('_tk_data/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
- ('_tcl_data/encoding/cp936.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
- 'DATA'),
- ('_tk_data/images/logo.eps',
- '/usr/share/tcltk/tk8.6/images/logo.eps',
- 'DATA'),
- ('_tcl_data/msgs/it_ch.msg',
- '/usr/share/tcltk/tcl8.6/msgs/it_ch.msg',
- 'DATA'),
- ('_tcl_data/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
- ('_tcl_data/encoding/cp861.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
- 'DATA'),
- ('_tk_data/ttk/winTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/winTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
- ('_tcl_data/encoding/iso2022-jp.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
- 'DATA'),
- ('_tcl_data/msgs/fa_ir.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_bw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_bw.msg',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD',
- 'DATA'),
- ('setuptools/_vendor/jaraco/text/Lorem ipsum.txt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/text/Lorem '
- 'ipsum.txt',
- 'DATA'),
- ('certifi/py.typed',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/py.typed',
- 'DATA'),
- ('certifi/cacert.pem',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/cacert.pem',
- 'DATA'),
- ('base_library.zip',
- '/home/borderban/Рабочий стол/client-py/build/FactorioSync/base_library.zip',
- 'DATA')],
- [],
- False,
- False,
- 1776188915,
- [('run',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run',
- 'EXECUTABLE')],
- '/lib/x86_64-linux-gnu/libpython3.12.so.1.0')
diff --git a/build/FactorioSync/FactorioSync.pkg b/build/FactorioSync/FactorioSync.pkg
deleted file mode 100644
index 2d37c20..0000000
Binary files a/build/FactorioSync/FactorioSync.pkg and /dev/null differ
diff --git a/build/FactorioSync/PKG-00.toc b/build/FactorioSync/PKG-00.toc
deleted file mode 100644
index cc02d22..0000000
--- a/build/FactorioSync/PKG-00.toc
+++ /dev/null
@@ -1,915 +0,0 @@
-('/home/borderban/Рабочий стол/client-py/build/FactorioSync/FactorioSync.pkg',
- {'BINARY': True,
- 'DATA': True,
- 'EXECUTABLE': True,
- 'EXTENSION': True,
- 'PYMODULE': True,
- 'PYSOURCE': True,
- 'PYZ': False,
- 'SPLASH': True,
- 'SYMLINK': False},
- [('pyi-contents-directory _internal', '', 'OPTION'),
- ('PYZ-00.pyz',
- '/home/borderban/Рабочий стол/client-py/build/FactorioSync/PYZ-00.pyz',
- 'PYZ'),
- ('struct',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/struct.pyc',
- 'PYMODULE'),
- ('pyimod01_archive',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/pyimod01_archive.pyc',
- 'PYMODULE'),
- ('pyimod02_importers',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/pyimod02_importers.pyc',
- 'PYMODULE'),
- ('pyimod03_ctypes',
- '/home/borderban/Рабочий '
- 'стол/client-py/build/FactorioSync/localpycs/pyimod03_ctypes.pyc',
- 'PYMODULE'),
- ('pyiboot01_bootstrap',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
- 'PYSOURCE'),
- ('pyi_rth_inspect',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
- 'PYSOURCE'),
- ('pyi_rth__tkinter',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py',
- 'PYSOURCE'),
- ('pyi_rth_setuptools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_setuptools.py',
- 'PYSOURCE'),
- ('pyi_rth_pkgutil',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py',
- 'PYSOURCE'),
- ('pyi_rth_multiprocessing',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py',
- 'PYSOURCE'),
- ('client', '/home/borderban/Рабочий стол/client-py/client.py', 'PYSOURCE'),
- ('libpython3.12.so.1.0',
- '/lib/x86_64-linux-gnu/libpython3.12.so.1.0',
- 'BINARY'),
- ('python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('charset_normalizer/md.cpython-312-x86_64-linux-gnu.so',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so',
- '/usr/lib/python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so',
- 'EXTENSION'),
- ('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
- ('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
- ('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
- ('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
- ('libssl.so.3', '/lib/x86_64-linux-gnu/libssl.so.3', 'BINARY'),
- ('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
- ('libffi.so.8', '/lib/x86_64-linux-gnu/libffi.so.8', 'BINARY'),
- ('libreadline.so.8', '/lib/x86_64-linux-gnu/libreadline.so.8', 'BINARY'),
- ('libtinfo.so.6', '/lib/x86_64-linux-gnu/libtinfo.so.6', 'BINARY'),
- ('libXss.so.1', '/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
- ('libbrotlicommon.so.1',
- '/lib/x86_64-linux-gnu/libbrotlicommon.so.1',
- 'BINARY'),
- ('libXext.so.6', '/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
- ('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
- ('libtcl8.6.so', '/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
- ('libfreetype.so.6', '/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
- ('libX11.so.6', '/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
- ('libXau.so.6', '/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
- ('libbrotlidec.so.1', '/lib/x86_64-linux-gnu/libbrotlidec.so.1', 'BINARY'),
- ('libXft.so.2', '/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
- ('libmd.so.0', '/lib/x86_64-linux-gnu/libmd.so.0', 'BINARY'),
- ('libBLT.2.5.so.8.6', '/lib/libBLT.2.5.so.8.6', 'BINARY'),
- ('libpng16.so.16', '/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
- ('libXdmcp.so.6', '/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
- ('libfontconfig.so.1', '/lib/x86_64-linux-gnu/libfontconfig.so.1', 'BINARY'),
- ('libtk8.6.so', '/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
- ('libXrender.so.1', '/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY'),
- ('_tcl_data/encoding/cp949.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
- 'DATA'),
- ('_tcl_data/msgs/en_ca.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ca.msg',
- 'DATA'),
- ('_tcl_data/msgs/es_cl.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_cl.msg',
- 'DATA'),
- ('_tcl_data/encoding/dingbats.enc',
- '/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
- 'DATA'),
- ('_tcl_data/msgs/te_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/te_in.msg',
- 'DATA'),
- ('_tk_data/ttk/scrollbar.tcl',
- '/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-1.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
- 'DATA'),
- ('_tcl_data/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
- ('_tcl_data/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-14.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
- 'DATA'),
- ('_tcl_data/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
- ('_tk_data/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
- ('_tk_data/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
- ('_tcl_data/msgs/eu_es.msg',
- '/usr/share/tcltk/tcl8.6/msgs/eu_es.msg',
- 'DATA'),
- ('_tk_data/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
- ('_tcl_data/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
- ('_tcl_data/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
- ('_tcl_data/msgs/zh_hk.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg',
- 'DATA'),
- ('_tcl_data/encoding/macUkraine.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1256.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
- 'DATA'),
- ('_tcl_data/encoding/macRomania.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
- 'DATA'),
- ('_tcl_data/encoding/macTurkish.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb1988.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
- 'DATA'),
- ('_tcl_data/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
- ('_tk_data/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
- ('_tk_data/ttk/xpTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-15.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-4.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
- 'DATA'),
- ('_tcl_data/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
- ('_tk_data/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
- ('_tk_data/images/pwrdLogo75.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
- 'DATA'),
- ('_tk_data/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-5.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
- 'DATA'),
- ('_tcl_data/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
- ('_tk_data/images/logo100.gif',
- '/usr/share/tcltk/tk8.6/images/logo100.gif',
- 'DATA'),
- ('_tcl_data/encoding/cp737.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
- 'DATA'),
- ('_tcl_data/tcl8/platform-1.0.19.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.19.tm',
- 'DATA'),
- ('_tk_data/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
- ('_tcl_data/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
- ('_tk_data/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
- ('_tk_data/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
- ('_tcl_data/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
- ('_tcl_data/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
- ('_tk_data/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
- ('_tcl_data/encoding/cp866.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
- 'DATA'),
- ('_tk_data/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
- ('_tk_data/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
- ('_tcl_data/msgs/de_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/de_be.msg',
- 'DATA'),
- ('_tk_data/ttk/defaults.tcl',
- '/usr/share/tcltk/tk8.6/ttk/defaults.tcl',
- 'DATA'),
- ('_tcl_data/encoding/cp1252.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
- 'DATA'),
- ('_tk_data/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
- ('_tk_data/msgs/fi.msg', '/usr/share/tcltk/tk8.6/msgs/fi.msg', 'DATA'),
- ('_tk_data/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-11.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-11.enc',
- 'DATA'),
- ('_tcl_data/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
- ('_tcl_data/msgs/es_co.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_co.msg',
- 'DATA'),
- ('_tk_data/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-10.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
- 'DATA'),
- ('_tcl_data/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
- ('_tcl_data/msgs/nl_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/nl_be.msg',
- 'DATA'),
- ('_tcl_data/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
- ('_tcl_data/msgs/ar_sy.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg',
- 'DATA'),
- ('_tcl_data/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
- ('_tcl_data/encoding/shiftjis.enc',
- '/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb2312-raw.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
- 'DATA'),
- ('_tk_data/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
- ('_tcl_data/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
- ('_tcl_data/encoding/koi8-u.enc',
- '/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp775.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_mx.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_mx.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-2.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
- 'DATA'),
- ('_tcl_data/encoding/euc-cn.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
- 'DATA'),
- ('_tcl_data/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
- ('_tcl_data/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
- ('_tcl_data/msgs/en_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_gb.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp1251.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
- 'DATA'),
- ('_tcl_data/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
- ('_tk_data/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
- ('_tcl_data/msgs/fr_ch.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-9.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
- 'DATA'),
- ('_tcl_data/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
- ('_tcl_data/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
- ('_tcl_data/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
- ('_tk_data/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
- ('_tcl_data/http1.0/http.tcl',
- '/usr/share/tcltk/tcl8.6/http1.0/http.tcl',
- 'DATA'),
- ('_tcl_data/encoding/cp862.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
- 'DATA'),
- ('_tcl_data/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-8.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
- 'DATA'),
- ('_tk_data/ttk/altTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/altTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
- ('_tcl_data/encoding/cns11643.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cns11643.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1257.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
- 'DATA'),
- ('_tcl_data/encoding/symbol.enc',
- '/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
- 'DATA'),
- ('_tcl_data/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
- ('_tcl_data/msgs/gl_es.msg',
- '/usr/share/tcltk/tcl8.6/msgs/gl_es.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_au.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_au.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp1258.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_bo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_bo.msg',
- 'DATA'),
- ('_tcl_data/msgs/bn_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/bn_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
- ('_tcl_data/msgs/fa_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fa_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/es_hn.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_hn.msg',
- 'DATA'),
- ('_tcl_data/msgs/id_id.msg',
- '/usr/share/tcltk/tcl8.6/msgs/id_id.msg',
- 'DATA'),
- ('_tk_data/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
- ('_tcl_data/msgs/es_gt.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_gt.msg',
- 'DATA'),
- ('_tk_data/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
- ('_tk_data/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
- ('_tcl_data/encoding/macThai.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
- 'DATA'),
- ('_tk_data/ttk/panedwindow.tcl',
- '/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
- 'DATA'),
- ('_tcl_data/encoding/macJapan.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
- 'DATA'),
- ('_tcl_data/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
- ('_tcl_data/encoding/iso8859-6.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp863.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
- 'DATA'),
- ('_tcl_data/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
- ('_tk_data/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
- ('_tcl_data/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
- ('_tcl_data/encoding/cp1254.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
- 'DATA'),
- ('_tk_data/ttk/clamTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl',
- 'DATA'),
- ('_tcl_data/encoding/ksc5601.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
- 'DATA'),
- ('_tcl_data/msgs/en_za.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_za.msg',
- 'DATA'),
- ('_tcl_data/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
- ('_tk_data/ttk/spinbox.tcl',
- '/usr/share/tcltk/tk8.6/ttk/spinbox.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ta_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ta_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
- ('_tcl_data/msgs/ga_ie.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg',
- 'DATA'),
- ('_tcl_data/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
- ('_tk_data/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
- ('_tcl_data/msgs/es_ar.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ar.msg',
- 'DATA'),
- ('_tk_data/ttk/progress.tcl',
- '/usr/share/tcltk/tk8.6/ttk/progress.tcl',
- 'DATA'),
- ('_tk_data/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
- ('_tk_data/ttk/menubutton.tcl',
- '/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
- ('_tcl_data/encoding/cp850.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
- 'DATA'),
- ('_tcl_data/msgs/mr_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/mr_in.msg',
- 'DATA'),
- ('_tk_data/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
- ('_tk_data/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
- ('_tk_data/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
- ('_tcl_data/encoding/cp857.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
- 'DATA'),
- ('_tcl_data/opt0.4/pkgIndex.tcl',
- '/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
- 'DATA'),
- ('_tk_data/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
- ('_tk_data/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
- ('_tcl_data/encoding/cp932.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_pa.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pa.msg',
- 'DATA'),
- ('_tk_data/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
- ('_tk_data/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-3.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
- 'DATA'),
- ('_tk_data/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
- ('_tcl_data/msgs/kw_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg',
- 'DATA'),
- ('_tcl_data/encoding/euc-kr.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
- 'DATA'),
- ('_tk_data/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
- ('_tcl_data/msgs/es_ec.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ec.msg',
- 'DATA'),
- ('_tcl_data/encoding/jis0201.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
- 'DATA'),
- ('_tcl_data/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
- ('_tcl_data/msgs/fo_fo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg',
- 'DATA'),
- ('_tcl_data/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
- ('_tcl_data/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
- ('_tcl_data/encoding/cp852.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
- 'DATA'),
- ('_tcl_data/encoding/ascii.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
- 'DATA'),
- ('_tcl_data/msgs/af_za.msg',
- '/usr/share/tcltk/tcl8.6/msgs/af_za.msg',
- 'DATA'),
- ('_tk_data/ttk/classicTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
- 'DATA'),
- ('_tcl_data/encoding/koi8-r.enc',
- '/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
- 'DATA'),
- ('_tcl_data/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
- ('_tcl_data/msgs/zh_cn.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg',
- 'DATA'),
- ('_tk_data/ttk/treeview.tcl',
- '/usr/share/tcltk/tk8.6/ttk/treeview.tcl',
- 'DATA'),
- ('_tcl_data/tcl8/tcltest-2.5.7.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.5.7.tm',
- 'DATA'),
- ('_tcl_data/msgs/es_pe.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pe.msg',
- 'DATA'),
- ('_tcl_data/msgs/ko_kr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg',
- 'DATA'),
- ('_tcl_data/msgs/ar_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/ar_jo.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_nz.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_nz.msg',
- 'DATA'),
- ('_tk_data/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
- ('_tcl_data/encoding/cp874.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp1250.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_ni.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ni.msg',
- 'DATA'),
- ('_tk_data/ttk/cursors.tcl',
- '/usr/share/tcltk/tk8.6/ttk/cursors.tcl',
- 'DATA'),
- ('_tk_data/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
- ('_tcl_data/msgs/gv_gb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg',
- 'DATA'),
- ('_tk_data/panedwindow.tcl',
- '/usr/share/tcltk/tk8.6/panedwindow.tcl',
- 'DATA'),
- ('_tk_data/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
- ('_tcl_data/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
- ('_tk_data/ttk/combobox.tcl',
- '/usr/share/tcltk/tk8.6/ttk/combobox.tcl',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-16.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
- 'DATA'),
- ('_tk_data/images/logo64.gif',
- '/usr/share/tcltk/tk8.6/images/logo64.gif',
- 'DATA'),
- ('_tk_data/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
- ('_tcl_data/msgs/en_ie.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ie.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_sg.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_sg.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp855.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
- 'DATA'),
- ('_tcl_data/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
- ('_tk_data/images/logoMed.gif',
- '/usr/share/tcltk/tk8.6/images/logoMed.gif',
- 'DATA'),
- ('_tcl_data/encoding/macCentEuro.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
- 'DATA'),
- ('_tk_data/images/pwrdLogo.eps',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
- 'DATA'),
- ('_tk_data/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
- ('_tcl_data/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
- ('_tcl_data/msgs/es_sv.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_sv.msg',
- 'DATA'),
- ('_tcl_data/encoding/macGreek.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_uy.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_uy.msg',
- 'DATA'),
- ('_tk_data/ttk/vistaTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
- ('_tcl_data/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
- ('_tcl_data/msgs/es_cr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_cr.msg',
- 'DATA'),
- ('_tcl_data/encoding/euc-jp.enc',
- '/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
- 'DATA'),
- ('_tcl_data/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
- ('_tcl_data/encoding/cp869.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
- 'DATA'),
- ('_tcl_data/http1.0/pkgIndex.tcl',
- '/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
- 'DATA'),
- ('_tcl_data/tcl8/http-2.9.8.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/http-2.9.8.tm',
- 'DATA'),
- ('_tk_data/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
- ('_tcl_data/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
- ('_tcl_data/encoding/cp1255.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
- 'DATA'),
- ('_tcl_data/encoding/gb2312.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
- 'DATA'),
- ('_tcl_data/msgs/hi_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/hi_in.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_ph.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_ph.msg',
- 'DATA'),
- ('_tcl_data/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
- ('_tcl_data/tcl8/msgcat-1.6.1.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
- 'DATA'),
- ('_tcl_data/encoding/iso2022-kr.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
- 'DATA'),
- ('_tcl_data/msgs/zh_tw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg',
- 'DATA'),
- ('_tcl_data/msgs/ru_ua.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp950.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
- 'DATA'),
- ('_tcl_data/encoding/jis0212.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
- 'DATA'),
- ('_tcl_data/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
- ('_tk_data/ttk/aquaTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl',
- 'DATA'),
- ('_tk_data/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
- ('_tk_data/images/tai-ku.gif',
- '/usr/share/tcltk/tk8.6/images/tai-ku.gif',
- 'DATA'),
- ('_tcl_data/encoding/macCyrillic.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
- 'DATA'),
- ('_tcl_data/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
- ('_tcl_data/encoding/iso2022.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
- 'DATA'),
- ('_tcl_data/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
- ('_tk_data/images/pwrdLogo100.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
- 'DATA'),
- ('_tcl_data/encoding/cp437.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
- 'DATA'),
- ('_tcl_data/encoding/cp864.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
- 'DATA'),
- ('_tcl_data/msgs/es_pr.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_pr.msg',
- 'DATA'),
- ('_tk_data/images/pwrdLogo175.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
- 'DATA'),
- ('_tk_data/ttk/notebook.tcl',
- '/usr/share/tcltk/tk8.6/ttk/notebook.tcl',
- 'DATA'),
- ('_tcl_data/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
- ('_tcl_data/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
- ('_tcl_data/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
- ('_tcl_data/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
- ('_tk_data/unsupported.tcl',
- '/usr/share/tcltk/tk8.6/unsupported.tcl',
- 'DATA'),
- ('_tcl_data/msgs/fr_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_be.msg',
- 'DATA'),
- ('_tcl_data/encoding/big5.enc',
- '/usr/share/tcltk/tcl8.6/encoding/big5.enc',
- 'DATA'),
- ('_tk_data/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
- ('_tcl_data/msgs/es_ve.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_ve.msg',
- 'DATA'),
- ('_tcl_data/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
- ('_tk_data/images/logoLarge.gif',
- '/usr/share/tcltk/tk8.6/images/logoLarge.gif',
- 'DATA'),
- ('_tk_data/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
- ('_tcl_data/opt0.4/optparse.tcl',
- '/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
- 'DATA'),
- ('_tk_data/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
- ('_tcl_data/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
- ('_tcl_data/msgs/es_do.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_do.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_hk.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_hk.msg',
- 'DATA'),
- ('_tk_data/ttk/sizegrip.tcl',
- '/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl',
- 'DATA'),
- ('_tcl_data/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
- ('_tcl_data/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
- ('_tk_data/images/pwrdLogo200.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
- 'DATA'),
- ('_tcl_data/msgs/en_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_in.msg',
- 'DATA'),
- ('_tk_data/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
- ('_tcl_data/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
- ('_tcl_data/msgs/ar_lb.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg',
- 'DATA'),
- ('_tcl_data/msgs/zh_sg.msg',
- '/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_be.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_be.msg',
- 'DATA'),
- ('_tk_data/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
- ('_tcl_data/encoding/cp865.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
- 'DATA'),
- ('_tcl_data/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
- ('_tcl_data/encoding/tis-620.enc',
- '/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
- 'DATA'),
- ('_tcl_data/msgs/kl_gl.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg',
- 'DATA'),
- ('_tcl_data/encoding/cp860.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
- 'DATA'),
- ('_tk_data/images/pwrdLogo150.gif',
- '/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
- 'DATA'),
- ('_tcl_data/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
- ('_tk_data/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
- ('_tcl_data/msgs/en_zw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_zw.msg',
- 'DATA'),
- ('_tk_data/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
- ('_tcl_data/tcl8/platform/shell-1.1.4.tm',
- '/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
- 'DATA'),
- ('_tcl_data/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
- ('_tcl_data/msgs/de_at.msg',
- '/usr/share/tcltk/tcl8.6/msgs/de_at.msg',
- 'DATA'),
- ('_tk_data/fontchooser.tcl',
- '/usr/share/tcltk/tk8.6/fontchooser.tcl',
- 'DATA'),
- ('_tcl_data/msgs/pt_br.msg',
- '/usr/share/tcltk/tcl8.6/msgs/pt_br.msg',
- 'DATA'),
- ('_tcl_data/encoding/macDingbats.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
- 'DATA'),
- ('_tk_data/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
- ('_tcl_data/encoding/iso8859-13.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
- 'DATA'),
- ('_tk_data/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
- ('_tcl_data/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
- ('_tk_data/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
- ('_tcl_data/encoding/cp1253.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
- 'DATA'),
- ('_tcl_data/encoding/macRoman.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
- 'DATA'),
- ('_tcl_data/encoding/macCroatian.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
- 'DATA'),
- ('_tcl_data/encoding/ebcdic.enc',
- '/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
- 'DATA'),
- ('_tcl_data/msgs/kok_in.msg',
- '/usr/share/tcltk/tcl8.6/msgs/kok_in.msg',
- 'DATA'),
- ('_tcl_data/encoding/gb12345.enc',
- '/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
- 'DATA'),
- ('_tcl_data/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
- ('_tcl_data/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
- ('_tcl_data/encoding/jis0208.enc',
- '/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
- 'DATA'),
- ('_tcl_data/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
- ('_tk_data/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
- ('_tcl_data/msgs/fr_ca.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg',
- 'DATA'),
- ('_tcl_data/encoding/iso8859-7.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
- 'DATA'),
- ('_tcl_data/msgs/ms_my.msg',
- '/usr/share/tcltk/tcl8.6/msgs/ms_my.msg',
- 'DATA'),
- ('_tk_data/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
- ('_tcl_data/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
- ('_tcl_data/encoding/macIceland.enc',
- '/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
- 'DATA'),
- ('_tcl_data/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
- ('_tk_data/msgs/zh_cn.msg', '/usr/share/tcltk/tk8.6/msgs/zh_cn.msg', 'DATA'),
- ('_tcl_data/msgs/es_py.msg',
- '/usr/share/tcltk/tcl8.6/msgs/es_py.msg',
- 'DATA'),
- ('_tcl_data/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
- ('_tcl_data/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
- ('_tk_data/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
- ('_tcl_data/encoding/cp936.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
- 'DATA'),
- ('_tk_data/images/logo.eps',
- '/usr/share/tcltk/tk8.6/images/logo.eps',
- 'DATA'),
- ('_tcl_data/msgs/it_ch.msg',
- '/usr/share/tcltk/tcl8.6/msgs/it_ch.msg',
- 'DATA'),
- ('_tcl_data/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
- ('_tcl_data/encoding/cp861.enc',
- '/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
- 'DATA'),
- ('_tk_data/ttk/winTheme.tcl',
- '/usr/share/tcltk/tk8.6/ttk/winTheme.tcl',
- 'DATA'),
- ('_tcl_data/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
- ('_tcl_data/encoding/iso2022-jp.enc',
- '/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
- 'DATA'),
- ('_tcl_data/msgs/fa_ir.msg',
- '/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg',
- 'DATA'),
- ('_tcl_data/msgs/en_bw.msg',
- '/usr/share/tcltk/tcl8.6/msgs/en_bw.msg',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA',
- 'DATA'),
- ('setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD',
- 'DATA'),
- ('setuptools/_vendor/jaraco/text/Lorem ipsum.txt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/text/Lorem '
- 'ipsum.txt',
- 'DATA'),
- ('certifi/py.typed',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/py.typed',
- 'DATA'),
- ('certifi/cacert.pem',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/cacert.pem',
- 'DATA'),
- ('base_library.zip',
- '/home/borderban/Рабочий стол/client-py/build/FactorioSync/base_library.zip',
- 'DATA')],
- 'libpython3.12.so.1.0',
- False,
- False,
- False,
- [],
- None,
- None,
- None)
diff --git a/build/FactorioSync/PYZ-00.pyz b/build/FactorioSync/PYZ-00.pyz
deleted file mode 100644
index 2b69e5f..0000000
Binary files a/build/FactorioSync/PYZ-00.pyz and /dev/null differ
diff --git a/build/FactorioSync/PYZ-00.toc b/build/FactorioSync/PYZ-00.toc
deleted file mode 100644
index bd70acb..0000000
--- a/build/FactorioSync/PYZ-00.toc
+++ /dev/null
@@ -1,1272 +0,0 @@
-('/home/borderban/Рабочий стол/client-py/build/FactorioSync/PYZ-00.pyz',
- [('__future__', '/usr/lib/python3.12/__future__.py', 'PYMODULE'),
- ('_aix_support', '/usr/lib/python3.12/_aix_support.py', 'PYMODULE'),
- ('_compat_pickle', '/usr/lib/python3.12/_compat_pickle.py', 'PYMODULE'),
- ('_compression', '/usr/lib/python3.12/_compression.py', 'PYMODULE'),
- ('_distutils_hack',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/_distutils_hack/__init__.py',
- 'PYMODULE'),
- ('_distutils_hack.override',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/_distutils_hack/override.py',
- 'PYMODULE'),
- ('_py_abc', '/usr/lib/python3.12/_py_abc.py', 'PYMODULE'),
- ('_pydatetime', '/usr/lib/python3.12/_pydatetime.py', 'PYMODULE'),
- ('_pydecimal', '/usr/lib/python3.12/_pydecimal.py', 'PYMODULE'),
- ('_sitebuiltins', '/usr/lib/python3.12/_sitebuiltins.py', 'PYMODULE'),
- ('_strptime', '/usr/lib/python3.12/_strptime.py', 'PYMODULE'),
- ('_sysconfigdata__x86_64-linux-gnu',
- '/usr/lib/python3.12/_sysconfigdata__x86_64-linux-gnu.py',
- 'PYMODULE'),
- ('_threading_local', '/usr/lib/python3.12/_threading_local.py', 'PYMODULE'),
- ('argparse', '/usr/lib/python3.12/argparse.py', 'PYMODULE'),
- ('ast', '/usr/lib/python3.12/ast.py', 'PYMODULE'),
- ('asyncio', '/usr/lib/python3.12/asyncio/__init__.py', 'PYMODULE'),
- ('asyncio.base_events',
- '/usr/lib/python3.12/asyncio/base_events.py',
- 'PYMODULE'),
- ('asyncio.base_futures',
- '/usr/lib/python3.12/asyncio/base_futures.py',
- 'PYMODULE'),
- ('asyncio.base_subprocess',
- '/usr/lib/python3.12/asyncio/base_subprocess.py',
- 'PYMODULE'),
- ('asyncio.base_tasks',
- '/usr/lib/python3.12/asyncio/base_tasks.py',
- 'PYMODULE'),
- ('asyncio.constants', '/usr/lib/python3.12/asyncio/constants.py', 'PYMODULE'),
- ('asyncio.coroutines',
- '/usr/lib/python3.12/asyncio/coroutines.py',
- 'PYMODULE'),
- ('asyncio.events', '/usr/lib/python3.12/asyncio/events.py', 'PYMODULE'),
- ('asyncio.exceptions',
- '/usr/lib/python3.12/asyncio/exceptions.py',
- 'PYMODULE'),
- ('asyncio.format_helpers',
- '/usr/lib/python3.12/asyncio/format_helpers.py',
- 'PYMODULE'),
- ('asyncio.futures', '/usr/lib/python3.12/asyncio/futures.py', 'PYMODULE'),
- ('asyncio.locks', '/usr/lib/python3.12/asyncio/locks.py', 'PYMODULE'),
- ('asyncio.log', '/usr/lib/python3.12/asyncio/log.py', 'PYMODULE'),
- ('asyncio.mixins', '/usr/lib/python3.12/asyncio/mixins.py', 'PYMODULE'),
- ('asyncio.proactor_events',
- '/usr/lib/python3.12/asyncio/proactor_events.py',
- 'PYMODULE'),
- ('asyncio.protocols', '/usr/lib/python3.12/asyncio/protocols.py', 'PYMODULE'),
- ('asyncio.queues', '/usr/lib/python3.12/asyncio/queues.py', 'PYMODULE'),
- ('asyncio.runners', '/usr/lib/python3.12/asyncio/runners.py', 'PYMODULE'),
- ('asyncio.selector_events',
- '/usr/lib/python3.12/asyncio/selector_events.py',
- 'PYMODULE'),
- ('asyncio.sslproto', '/usr/lib/python3.12/asyncio/sslproto.py', 'PYMODULE'),
- ('asyncio.staggered', '/usr/lib/python3.12/asyncio/staggered.py', 'PYMODULE'),
- ('asyncio.streams', '/usr/lib/python3.12/asyncio/streams.py', 'PYMODULE'),
- ('asyncio.subprocess',
- '/usr/lib/python3.12/asyncio/subprocess.py',
- 'PYMODULE'),
- ('asyncio.taskgroups',
- '/usr/lib/python3.12/asyncio/taskgroups.py',
- 'PYMODULE'),
- ('asyncio.tasks', '/usr/lib/python3.12/asyncio/tasks.py', 'PYMODULE'),
- ('asyncio.threads', '/usr/lib/python3.12/asyncio/threads.py', 'PYMODULE'),
- ('asyncio.timeouts', '/usr/lib/python3.12/asyncio/timeouts.py', 'PYMODULE'),
- ('asyncio.transports',
- '/usr/lib/python3.12/asyncio/transports.py',
- 'PYMODULE'),
- ('asyncio.trsock', '/usr/lib/python3.12/asyncio/trsock.py', 'PYMODULE'),
- ('asyncio.unix_events',
- '/usr/lib/python3.12/asyncio/unix_events.py',
- 'PYMODULE'),
- ('asyncio.windows_events',
- '/usr/lib/python3.12/asyncio/windows_events.py',
- 'PYMODULE'),
- ('asyncio.windows_utils',
- '/usr/lib/python3.12/asyncio/windows_utils.py',
- 'PYMODULE'),
- ('base64', '/usr/lib/python3.12/base64.py', 'PYMODULE'),
- ('bisect', '/usr/lib/python3.12/bisect.py', 'PYMODULE'),
- ('bz2', '/usr/lib/python3.12/bz2.py', 'PYMODULE'),
- ('calendar', '/usr/lib/python3.12/calendar.py', 'PYMODULE'),
- ('certifi',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/__init__.py',
- 'PYMODULE'),
- ('certifi.core',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/certifi/core.py',
- 'PYMODULE'),
- ('charset_normalizer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/__init__.py',
- 'PYMODULE'),
- ('charset_normalizer.api',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/api.py',
- 'PYMODULE'),
- ('charset_normalizer.constant',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/constant.py',
- 'PYMODULE'),
- ('charset_normalizer.legacy',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/legacy.py',
- 'PYMODULE'),
- ('charset_normalizer.models',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/models.py',
- 'PYMODULE'),
- ('charset_normalizer.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/utils.py',
- 'PYMODULE'),
- ('charset_normalizer.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/version.py',
- 'PYMODULE'),
- ('concurrent', '/usr/lib/python3.12/concurrent/__init__.py', 'PYMODULE'),
- ('concurrent.futures',
- '/usr/lib/python3.12/concurrent/futures/__init__.py',
- 'PYMODULE'),
- ('concurrent.futures._base',
- '/usr/lib/python3.12/concurrent/futures/_base.py',
- 'PYMODULE'),
- ('concurrent.futures.process',
- '/usr/lib/python3.12/concurrent/futures/process.py',
- 'PYMODULE'),
- ('concurrent.futures.thread',
- '/usr/lib/python3.12/concurrent/futures/thread.py',
- 'PYMODULE'),
- ('configparser', '/usr/lib/python3.12/configparser.py', 'PYMODULE'),
- ('contextlib', '/usr/lib/python3.12/contextlib.py', 'PYMODULE'),
- ('contextvars', '/usr/lib/python3.12/contextvars.py', 'PYMODULE'),
- ('copy', '/usr/lib/python3.12/copy.py', 'PYMODULE'),
- ('csv', '/usr/lib/python3.12/csv.py', 'PYMODULE'),
- ('ctypes', '/usr/lib/python3.12/ctypes/__init__.py', 'PYMODULE'),
- ('ctypes._endian', '/usr/lib/python3.12/ctypes/_endian.py', 'PYMODULE'),
- ('ctypes.wintypes', '/usr/lib/python3.12/ctypes/wintypes.py', 'PYMODULE'),
- ('dataclasses', '/usr/lib/python3.12/dataclasses.py', 'PYMODULE'),
- ('datetime', '/usr/lib/python3.12/datetime.py', 'PYMODULE'),
- ('decimal', '/usr/lib/python3.12/decimal.py', 'PYMODULE'),
- ('difflib', '/usr/lib/python3.12/difflib.py', 'PYMODULE'),
- ('dis', '/usr/lib/python3.12/dis.py', 'PYMODULE'),
- ('email', '/usr/lib/python3.12/email/__init__.py', 'PYMODULE'),
- ('email._encoded_words',
- '/usr/lib/python3.12/email/_encoded_words.py',
- 'PYMODULE'),
- ('email._header_value_parser',
- '/usr/lib/python3.12/email/_header_value_parser.py',
- 'PYMODULE'),
- ('email._parseaddr', '/usr/lib/python3.12/email/_parseaddr.py', 'PYMODULE'),
- ('email._policybase', '/usr/lib/python3.12/email/_policybase.py', 'PYMODULE'),
- ('email.base64mime', '/usr/lib/python3.12/email/base64mime.py', 'PYMODULE'),
- ('email.charset', '/usr/lib/python3.12/email/charset.py', 'PYMODULE'),
- ('email.contentmanager',
- '/usr/lib/python3.12/email/contentmanager.py',
- 'PYMODULE'),
- ('email.encoders', '/usr/lib/python3.12/email/encoders.py', 'PYMODULE'),
- ('email.errors', '/usr/lib/python3.12/email/errors.py', 'PYMODULE'),
- ('email.feedparser', '/usr/lib/python3.12/email/feedparser.py', 'PYMODULE'),
- ('email.generator', '/usr/lib/python3.12/email/generator.py', 'PYMODULE'),
- ('email.header', '/usr/lib/python3.12/email/header.py', 'PYMODULE'),
- ('email.headerregistry',
- '/usr/lib/python3.12/email/headerregistry.py',
- 'PYMODULE'),
- ('email.iterators', '/usr/lib/python3.12/email/iterators.py', 'PYMODULE'),
- ('email.message', '/usr/lib/python3.12/email/message.py', 'PYMODULE'),
- ('email.parser', '/usr/lib/python3.12/email/parser.py', 'PYMODULE'),
- ('email.policy', '/usr/lib/python3.12/email/policy.py', 'PYMODULE'),
- ('email.quoprimime', '/usr/lib/python3.12/email/quoprimime.py', 'PYMODULE'),
- ('email.utils', '/usr/lib/python3.12/email/utils.py', 'PYMODULE'),
- ('fnmatch', '/usr/lib/python3.12/fnmatch.py', 'PYMODULE'),
- ('fractions', '/usr/lib/python3.12/fractions.py', 'PYMODULE'),
- ('ftplib', '/usr/lib/python3.12/ftplib.py', 'PYMODULE'),
- ('getopt', '/usr/lib/python3.12/getopt.py', 'PYMODULE'),
- ('getpass', '/usr/lib/python3.12/getpass.py', 'PYMODULE'),
- ('gettext', '/usr/lib/python3.12/gettext.py', 'PYMODULE'),
- ('glob', '/usr/lib/python3.12/glob.py', 'PYMODULE'),
- ('gzip', '/usr/lib/python3.12/gzip.py', 'PYMODULE'),
- ('hashlib', '/usr/lib/python3.12/hashlib.py', 'PYMODULE'),
- ('hmac', '/usr/lib/python3.12/hmac.py', 'PYMODULE'),
- ('html', '/usr/lib/python3.12/html/__init__.py', 'PYMODULE'),
- ('html.entities', '/usr/lib/python3.12/html/entities.py', 'PYMODULE'),
- ('http', '/usr/lib/python3.12/http/__init__.py', 'PYMODULE'),
- ('http.client', '/usr/lib/python3.12/http/client.py', 'PYMODULE'),
- ('http.cookiejar', '/usr/lib/python3.12/http/cookiejar.py', 'PYMODULE'),
- ('http.cookies', '/usr/lib/python3.12/http/cookies.py', 'PYMODULE'),
- ('http.server', '/usr/lib/python3.12/http/server.py', 'PYMODULE'),
- ('idna',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/__init__.py',
- 'PYMODULE'),
- ('idna.core',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/core.py',
- 'PYMODULE'),
- ('idna.idnadata',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/idnadata.py',
- 'PYMODULE'),
- ('idna.intranges',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/intranges.py',
- 'PYMODULE'),
- ('idna.package_data',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/package_data.py',
- 'PYMODULE'),
- ('idna.uts46data',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/idna/uts46data.py',
- 'PYMODULE'),
- ('importlib', '/usr/lib/python3.12/importlib/__init__.py', 'PYMODULE'),
- ('importlib._abc', '/usr/lib/python3.12/importlib/_abc.py', 'PYMODULE'),
- ('importlib._bootstrap',
- '/usr/lib/python3.12/importlib/_bootstrap.py',
- 'PYMODULE'),
- ('importlib._bootstrap_external',
- '/usr/lib/python3.12/importlib/_bootstrap_external.py',
- 'PYMODULE'),
- ('importlib.abc', '/usr/lib/python3.12/importlib/abc.py', 'PYMODULE'),
- ('importlib.machinery',
- '/usr/lib/python3.12/importlib/machinery.py',
- 'PYMODULE'),
- ('importlib.metadata',
- '/usr/lib/python3.12/importlib/metadata/__init__.py',
- 'PYMODULE'),
- ('importlib.metadata._adapters',
- '/usr/lib/python3.12/importlib/metadata/_adapters.py',
- 'PYMODULE'),
- ('importlib.metadata._collections',
- '/usr/lib/python3.12/importlib/metadata/_collections.py',
- 'PYMODULE'),
- ('importlib.metadata._functools',
- '/usr/lib/python3.12/importlib/metadata/_functools.py',
- 'PYMODULE'),
- ('importlib.metadata._itertools',
- '/usr/lib/python3.12/importlib/metadata/_itertools.py',
- 'PYMODULE'),
- ('importlib.metadata._meta',
- '/usr/lib/python3.12/importlib/metadata/_meta.py',
- 'PYMODULE'),
- ('importlib.metadata._text',
- '/usr/lib/python3.12/importlib/metadata/_text.py',
- 'PYMODULE'),
- ('importlib.readers', '/usr/lib/python3.12/importlib/readers.py', 'PYMODULE'),
- ('importlib.resources',
- '/usr/lib/python3.12/importlib/resources/__init__.py',
- 'PYMODULE'),
- ('importlib.resources._adapters',
- '/usr/lib/python3.12/importlib/resources/_adapters.py',
- 'PYMODULE'),
- ('importlib.resources._common',
- '/usr/lib/python3.12/importlib/resources/_common.py',
- 'PYMODULE'),
- ('importlib.resources._itertools',
- '/usr/lib/python3.12/importlib/resources/_itertools.py',
- 'PYMODULE'),
- ('importlib.resources._legacy',
- '/usr/lib/python3.12/importlib/resources/_legacy.py',
- 'PYMODULE'),
- ('importlib.resources.abc',
- '/usr/lib/python3.12/importlib/resources/abc.py',
- 'PYMODULE'),
- ('importlib.resources.readers',
- '/usr/lib/python3.12/importlib/resources/readers.py',
- 'PYMODULE'),
- ('importlib.util', '/usr/lib/python3.12/importlib/util.py', 'PYMODULE'),
- ('inspect', '/usr/lib/python3.12/inspect.py', 'PYMODULE'),
- ('ipaddress', '/usr/lib/python3.12/ipaddress.py', 'PYMODULE'),
- ('json', '/usr/lib/python3.12/json/__init__.py', 'PYMODULE'),
- ('json.decoder', '/usr/lib/python3.12/json/decoder.py', 'PYMODULE'),
- ('json.encoder', '/usr/lib/python3.12/json/encoder.py', 'PYMODULE'),
- ('json.scanner', '/usr/lib/python3.12/json/scanner.py', 'PYMODULE'),
- ('logging', '/usr/lib/python3.12/logging/__init__.py', 'PYMODULE'),
- ('lzma', '/usr/lib/python3.12/lzma.py', 'PYMODULE'),
- ('mimetypes', '/usr/lib/python3.12/mimetypes.py', 'PYMODULE'),
- ('multiprocessing',
- '/usr/lib/python3.12/multiprocessing/__init__.py',
- 'PYMODULE'),
- ('multiprocessing.connection',
- '/usr/lib/python3.12/multiprocessing/connection.py',
- 'PYMODULE'),
- ('multiprocessing.context',
- '/usr/lib/python3.12/multiprocessing/context.py',
- 'PYMODULE'),
- ('multiprocessing.dummy',
- '/usr/lib/python3.12/multiprocessing/dummy/__init__.py',
- 'PYMODULE'),
- ('multiprocessing.dummy.connection',
- '/usr/lib/python3.12/multiprocessing/dummy/connection.py',
- 'PYMODULE'),
- ('multiprocessing.forkserver',
- '/usr/lib/python3.12/multiprocessing/forkserver.py',
- 'PYMODULE'),
- ('multiprocessing.heap',
- '/usr/lib/python3.12/multiprocessing/heap.py',
- 'PYMODULE'),
- ('multiprocessing.managers',
- '/usr/lib/python3.12/multiprocessing/managers.py',
- 'PYMODULE'),
- ('multiprocessing.pool',
- '/usr/lib/python3.12/multiprocessing/pool.py',
- 'PYMODULE'),
- ('multiprocessing.popen_fork',
- '/usr/lib/python3.12/multiprocessing/popen_fork.py',
- 'PYMODULE'),
- ('multiprocessing.popen_forkserver',
- '/usr/lib/python3.12/multiprocessing/popen_forkserver.py',
- 'PYMODULE'),
- ('multiprocessing.popen_spawn_posix',
- '/usr/lib/python3.12/multiprocessing/popen_spawn_posix.py',
- 'PYMODULE'),
- ('multiprocessing.popen_spawn_win32',
- '/usr/lib/python3.12/multiprocessing/popen_spawn_win32.py',
- 'PYMODULE'),
- ('multiprocessing.process',
- '/usr/lib/python3.12/multiprocessing/process.py',
- 'PYMODULE'),
- ('multiprocessing.queues',
- '/usr/lib/python3.12/multiprocessing/queues.py',
- 'PYMODULE'),
- ('multiprocessing.reduction',
- '/usr/lib/python3.12/multiprocessing/reduction.py',
- 'PYMODULE'),
- ('multiprocessing.resource_sharer',
- '/usr/lib/python3.12/multiprocessing/resource_sharer.py',
- 'PYMODULE'),
- ('multiprocessing.resource_tracker',
- '/usr/lib/python3.12/multiprocessing/resource_tracker.py',
- 'PYMODULE'),
- ('multiprocessing.shared_memory',
- '/usr/lib/python3.12/multiprocessing/shared_memory.py',
- 'PYMODULE'),
- ('multiprocessing.sharedctypes',
- '/usr/lib/python3.12/multiprocessing/sharedctypes.py',
- 'PYMODULE'),
- ('multiprocessing.spawn',
- '/usr/lib/python3.12/multiprocessing/spawn.py',
- 'PYMODULE'),
- ('multiprocessing.synchronize',
- '/usr/lib/python3.12/multiprocessing/synchronize.py',
- 'PYMODULE'),
- ('multiprocessing.util',
- '/usr/lib/python3.12/multiprocessing/util.py',
- 'PYMODULE'),
- ('netrc', '/usr/lib/python3.12/netrc.py', 'PYMODULE'),
- ('nturl2path', '/usr/lib/python3.12/nturl2path.py', 'PYMODULE'),
- ('numbers', '/usr/lib/python3.12/numbers.py', 'PYMODULE'),
- ('opcode', '/usr/lib/python3.12/opcode.py', 'PYMODULE'),
- ('packaging',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/__init__.py',
- 'PYMODULE'),
- ('packaging._elffile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_elffile.py',
- 'PYMODULE'),
- ('packaging._manylinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_manylinux.py',
- 'PYMODULE'),
- ('packaging._musllinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_musllinux.py',
- 'PYMODULE'),
- ('packaging._parser',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_parser.py',
- 'PYMODULE'),
- ('packaging._structures',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_structures.py',
- 'PYMODULE'),
- ('packaging._tokenizer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/_tokenizer.py',
- 'PYMODULE'),
- ('packaging.licenses',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/licenses/__init__.py',
- 'PYMODULE'),
- ('packaging.licenses._spdx',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/licenses/_spdx.py',
- 'PYMODULE'),
- ('packaging.markers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/markers.py',
- 'PYMODULE'),
- ('packaging.requirements',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/requirements.py',
- 'PYMODULE'),
- ('packaging.specifiers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/specifiers.py',
- 'PYMODULE'),
- ('packaging.tags',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/tags.py',
- 'PYMODULE'),
- ('packaging.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/utils.py',
- 'PYMODULE'),
- ('packaging.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/packaging/version.py',
- 'PYMODULE'),
- ('pathlib', '/usr/lib/python3.12/pathlib.py', 'PYMODULE'),
- ('pickle', '/usr/lib/python3.12/pickle.py', 'PYMODULE'),
- ('pkgutil', '/usr/lib/python3.12/pkgutil.py', 'PYMODULE'),
- ('platform', '/usr/lib/python3.12/platform.py', 'PYMODULE'),
- ('pprint', '/usr/lib/python3.12/pprint.py', 'PYMODULE'),
- ('py_compile', '/usr/lib/python3.12/py_compile.py', 'PYMODULE'),
- ('pydoc', '/usr/lib/python3.12/pydoc.py', 'PYMODULE'),
- ('pydoc_data', '/usr/lib/python3.12/pydoc_data/__init__.py', 'PYMODULE'),
- ('pydoc_data.topics', '/usr/lib/python3.12/pydoc_data/topics.py', 'PYMODULE'),
- ('queue', '/usr/lib/python3.12/queue.py', 'PYMODULE'),
- ('quopri', '/usr/lib/python3.12/quopri.py', 'PYMODULE'),
- ('random', '/usr/lib/python3.12/random.py', 'PYMODULE'),
- ('requests',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/__init__.py',
- 'PYMODULE'),
- ('requests.__version__',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/__version__.py',
- 'PYMODULE'),
- ('requests._internal_utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/_internal_utils.py',
- 'PYMODULE'),
- ('requests.adapters',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/adapters.py',
- 'PYMODULE'),
- ('requests.api',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/api.py',
- 'PYMODULE'),
- ('requests.auth',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/auth.py',
- 'PYMODULE'),
- ('requests.certs',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/certs.py',
- 'PYMODULE'),
- ('requests.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/compat.py',
- 'PYMODULE'),
- ('requests.cookies',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/cookies.py',
- 'PYMODULE'),
- ('requests.exceptions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/exceptions.py',
- 'PYMODULE'),
- ('requests.hooks',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/hooks.py',
- 'PYMODULE'),
- ('requests.models',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/models.py',
- 'PYMODULE'),
- ('requests.packages',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/packages.py',
- 'PYMODULE'),
- ('requests.sessions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/sessions.py',
- 'PYMODULE'),
- ('requests.status_codes',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/status_codes.py',
- 'PYMODULE'),
- ('requests.structures',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/structures.py',
- 'PYMODULE'),
- ('requests.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/requests/utils.py',
- 'PYMODULE'),
- ('rlcompleter', '/usr/lib/python3.12/rlcompleter.py', 'PYMODULE'),
- ('runpy', '/usr/lib/python3.12/runpy.py', 'PYMODULE'),
- ('secrets', '/usr/lib/python3.12/secrets.py', 'PYMODULE'),
- ('selectors', '/usr/lib/python3.12/selectors.py', 'PYMODULE'),
- ('setuptools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/__init__.py',
- 'PYMODULE'),
- ('setuptools._core_metadata',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_core_metadata.py',
- 'PYMODULE'),
- ('setuptools._discovery',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_discovery.py',
- 'PYMODULE'),
- ('setuptools._distutils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/__init__.py',
- 'PYMODULE'),
- ('setuptools._distutils._log',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/_log.py',
- 'PYMODULE'),
- ('setuptools._distutils._modified',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/_modified.py',
- 'PYMODULE'),
- ('setuptools._distutils._msvccompiler',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/_msvccompiler.py',
- 'PYMODULE'),
- ('setuptools._distutils.archive_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/archive_util.py',
- 'PYMODULE'),
- ('setuptools._distutils.ccompiler',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/ccompiler.py',
- 'PYMODULE'),
- ('setuptools._distutils.cmd',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/cmd.py',
- 'PYMODULE'),
- ('setuptools._distutils.command',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/__init__.py',
- 'PYMODULE'),
- ('setuptools._distutils.command.bdist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/bdist.py',
- 'PYMODULE'),
- ('setuptools._distutils.command.build',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/build.py',
- 'PYMODULE'),
- ('setuptools._distutils.command.build_ext',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py',
- 'PYMODULE'),
- ('setuptools._distutils.command.sdist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/command/sdist.py',
- 'PYMODULE'),
- ('setuptools._distutils.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools._distutils.compat.numpy',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compat/numpy.py',
- 'PYMODULE'),
- ('setuptools._distutils.compat.py39',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compat/py39.py',
- 'PYMODULE'),
- ('setuptools._distutils.compilers', '-', 'PYMODULE'),
- ('setuptools._distutils.compilers.C', '-', 'PYMODULE'),
- ('setuptools._distutils.compilers.C.base',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/C/base.py',
- 'PYMODULE'),
- ('setuptools._distutils.compilers.C.errors',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/C/errors.py',
- 'PYMODULE'),
- ('setuptools._distutils.compilers.C.msvc',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/C/msvc.py',
- 'PYMODULE'),
- ('setuptools._distutils.core',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/core.py',
- 'PYMODULE'),
- ('setuptools._distutils.debug',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/debug.py',
- 'PYMODULE'),
- ('setuptools._distutils.dir_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/dir_util.py',
- 'PYMODULE'),
- ('setuptools._distutils.dist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/dist.py',
- 'PYMODULE'),
- ('setuptools._distutils.errors',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/errors.py',
- 'PYMODULE'),
- ('setuptools._distutils.extension',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/extension.py',
- 'PYMODULE'),
- ('setuptools._distutils.fancy_getopt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/fancy_getopt.py',
- 'PYMODULE'),
- ('setuptools._distutils.file_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/file_util.py',
- 'PYMODULE'),
- ('setuptools._distutils.filelist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/filelist.py',
- 'PYMODULE'),
- ('setuptools._distutils.log',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/log.py',
- 'PYMODULE'),
- ('setuptools._distutils.spawn',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/spawn.py',
- 'PYMODULE'),
- ('setuptools._distutils.sysconfig',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/sysconfig.py',
- 'PYMODULE'),
- ('setuptools._distutils.text_file',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/text_file.py',
- 'PYMODULE'),
- ('setuptools._distutils.util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/util.py',
- 'PYMODULE'),
- ('setuptools._distutils.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/version.py',
- 'PYMODULE'),
- ('setuptools._distutils.versionpredicate',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_distutils/versionpredicate.py',
- 'PYMODULE'),
- ('setuptools._entry_points',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_entry_points.py',
- 'PYMODULE'),
- ('setuptools._imp',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_imp.py',
- 'PYMODULE'),
- ('setuptools._importlib',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_importlib.py',
- 'PYMODULE'),
- ('setuptools._itertools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_itertools.py',
- 'PYMODULE'),
- ('setuptools._normalization',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_normalization.py',
- 'PYMODULE'),
- ('setuptools._path',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_path.py',
- 'PYMODULE'),
- ('setuptools._reqs',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_reqs.py',
- 'PYMODULE'),
- ('setuptools._shutil',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_shutil.py',
- 'PYMODULE'),
- ('setuptools._static',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_static.py',
- 'PYMODULE'),
- ('setuptools._vendor', '-', 'PYMODULE'),
- ('setuptools._vendor.backports',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.backports.tarfile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.backports.tarfile.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.backports.tarfile.compat.py38',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._adapters',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._collections',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_collections.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_compat.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._functools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_functools.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._itertools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._meta',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_meta.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._text',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_text.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata._typing',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/_typing.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata.compat.py311',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py',
- 'PYMODULE'),
- ('setuptools._vendor.importlib_metadata.compat.py39',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py',
- 'PYMODULE'),
- ('setuptools._vendor.jaraco', '-', 'PYMODULE'),
- ('setuptools._vendor.jaraco.context',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/context/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.jaraco.functools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/functools/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.jaraco.text',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/text/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.more_itertools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.more_itertools.more',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools/more.py',
- 'PYMODULE'),
- ('setuptools._vendor.more_itertools.recipes',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools/recipes.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._elffile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_elffile.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._manylinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_manylinux.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._musllinux',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_musllinux.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._parser',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_parser.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._structures',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_structures.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging._tokenizer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/_tokenizer.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.markers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/markers.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.requirements',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/requirements.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.specifiers',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/specifiers.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.tags',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/tags.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/utils.py',
- 'PYMODULE'),
- ('setuptools._vendor.packaging.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/version.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli._parser',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/_parser.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli._re',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/_re.py',
- 'PYMODULE'),
- ('setuptools._vendor.tomli._types',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/tomli/_types.py',
- 'PYMODULE'),
- ('setuptools._vendor.wheel',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/wheel/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.wheel.macosx_libfile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/wheel/macosx_libfile.py',
- 'PYMODULE'),
- ('setuptools._vendor.wheel.wheelfile',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/wheel/wheelfile.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp._functools',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/_functools.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat.overlay',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/overlay.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat.py310',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/py310.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.compat.py313',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat/py313.py',
- 'PYMODULE'),
- ('setuptools._vendor.zipp.glob',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/glob.py',
- 'PYMODULE'),
- ('setuptools.archive_util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/archive_util.py',
- 'PYMODULE'),
- ('setuptools.command',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/__init__.py',
- 'PYMODULE'),
- ('setuptools.command._requirestxt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/_requirestxt.py',
- 'PYMODULE'),
- ('setuptools.command.bdist_egg',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/bdist_egg.py',
- 'PYMODULE'),
- ('setuptools.command.bdist_wheel',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/bdist_wheel.py',
- 'PYMODULE'),
- ('setuptools.command.build',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/build.py',
- 'PYMODULE'),
- ('setuptools.command.egg_info',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/egg_info.py',
- 'PYMODULE'),
- ('setuptools.command.sdist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/sdist.py',
- 'PYMODULE'),
- ('setuptools.command.setopt',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/command/setopt.py',
- 'PYMODULE'),
- ('setuptools.compat',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/__init__.py',
- 'PYMODULE'),
- ('setuptools.compat.py310',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/py310.py',
- 'PYMODULE'),
- ('setuptools.compat.py311',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/py311.py',
- 'PYMODULE'),
- ('setuptools.compat.py39',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/compat/py39.py',
- 'PYMODULE'),
- ('setuptools.config',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/__init__.py',
- 'PYMODULE'),
- ('setuptools.config._apply_pyprojecttoml',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_apply_pyprojecttoml.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/__init__.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.error_reporting',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/error_reporting.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.extra_validations',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/extra_validations.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.fastjsonschema_exceptions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.fastjsonschema_validations',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py',
- 'PYMODULE'),
- ('setuptools.config._validate_pyproject.formats',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject/formats.py',
- 'PYMODULE'),
- ('setuptools.config.expand',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/expand.py',
- 'PYMODULE'),
- ('setuptools.config.pyprojecttoml',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/pyprojecttoml.py',
- 'PYMODULE'),
- ('setuptools.config.setupcfg',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/config/setupcfg.py',
- 'PYMODULE'),
- ('setuptools.depends',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/depends.py',
- 'PYMODULE'),
- ('setuptools.discovery',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/discovery.py',
- 'PYMODULE'),
- ('setuptools.dist',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/dist.py',
- 'PYMODULE'),
- ('setuptools.errors',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/errors.py',
- 'PYMODULE'),
- ('setuptools.extension',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/extension.py',
- 'PYMODULE'),
- ('setuptools.glob',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/glob.py',
- 'PYMODULE'),
- ('setuptools.installer',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/installer.py',
- 'PYMODULE'),
- ('setuptools.logging',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/logging.py',
- 'PYMODULE'),
- ('setuptools.monkey',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/monkey.py',
- 'PYMODULE'),
- ('setuptools.msvc',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/msvc.py',
- 'PYMODULE'),
- ('setuptools.unicode_utils',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/unicode_utils.py',
- 'PYMODULE'),
- ('setuptools.version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/version.py',
- 'PYMODULE'),
- ('setuptools.warnings',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/warnings.py',
- 'PYMODULE'),
- ('setuptools.wheel',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/wheel.py',
- 'PYMODULE'),
- ('setuptools.windows_support',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/setuptools/windows_support.py',
- 'PYMODULE'),
- ('shlex', '/usr/lib/python3.12/shlex.py', 'PYMODULE'),
- ('shutil', '/usr/lib/python3.12/shutil.py', 'PYMODULE'),
- ('signal', '/usr/lib/python3.12/signal.py', 'PYMODULE'),
- ('site', '/usr/lib/python3.12/site.py', 'PYMODULE'),
- ('sitecustomize', '/usr/lib/python3.12/sitecustomize.py', 'PYMODULE'),
- ('socket', '/usr/lib/python3.12/socket.py', 'PYMODULE'),
- ('socketserver', '/usr/lib/python3.12/socketserver.py', 'PYMODULE'),
- ('ssl', '/usr/lib/python3.12/ssl.py', 'PYMODULE'),
- ('statistics', '/usr/lib/python3.12/statistics.py', 'PYMODULE'),
- ('string', '/usr/lib/python3.12/string.py', 'PYMODULE'),
- ('stringprep', '/usr/lib/python3.12/stringprep.py', 'PYMODULE'),
- ('subprocess', '/usr/lib/python3.12/subprocess.py', 'PYMODULE'),
- ('sysconfig', '/usr/lib/python3.12/sysconfig.py', 'PYMODULE'),
- ('tarfile', '/usr/lib/python3.12/tarfile.py', 'PYMODULE'),
- ('tempfile', '/usr/lib/python3.12/tempfile.py', 'PYMODULE'),
- ('textwrap', '/usr/lib/python3.12/textwrap.py', 'PYMODULE'),
- ('threading', '/usr/lib/python3.12/threading.py', 'PYMODULE'),
- ('tkinter', '/usr/lib/python3.12/tkinter/__init__.py', 'PYMODULE'),
- ('tkinter.commondialog',
- '/usr/lib/python3.12/tkinter/commondialog.py',
- 'PYMODULE'),
- ('tkinter.constants', '/usr/lib/python3.12/tkinter/constants.py', 'PYMODULE'),
- ('tkinter.dialog', '/usr/lib/python3.12/tkinter/dialog.py', 'PYMODULE'),
- ('tkinter.filedialog',
- '/usr/lib/python3.12/tkinter/filedialog.py',
- 'PYMODULE'),
- ('tkinter.messagebox',
- '/usr/lib/python3.12/tkinter/messagebox.py',
- 'PYMODULE'),
- ('tkinter.simpledialog',
- '/usr/lib/python3.12/tkinter/simpledialog.py',
- 'PYMODULE'),
- ('tkinter.ttk', '/usr/lib/python3.12/tkinter/ttk.py', 'PYMODULE'),
- ('token', '/usr/lib/python3.12/token.py', 'PYMODULE'),
- ('tokenize', '/usr/lib/python3.12/tokenize.py', 'PYMODULE'),
- ('tomllib', '/usr/lib/python3.12/tomllib/__init__.py', 'PYMODULE'),
- ('tomllib._parser', '/usr/lib/python3.12/tomllib/_parser.py', 'PYMODULE'),
- ('tomllib._re', '/usr/lib/python3.12/tomllib/_re.py', 'PYMODULE'),
- ('tomllib._types', '/usr/lib/python3.12/tomllib/_types.py', 'PYMODULE'),
- ('tracemalloc', '/usr/lib/python3.12/tracemalloc.py', 'PYMODULE'),
- ('tty', '/usr/lib/python3.12/tty.py', 'PYMODULE'),
- ('typing', '/usr/lib/python3.12/typing.py', 'PYMODULE'),
- ('unittest', '/usr/lib/python3.12/unittest/__init__.py', 'PYMODULE'),
- ('unittest._log', '/usr/lib/python3.12/unittest/_log.py', 'PYMODULE'),
- ('unittest.async_case',
- '/usr/lib/python3.12/unittest/async_case.py',
- 'PYMODULE'),
- ('unittest.case', '/usr/lib/python3.12/unittest/case.py', 'PYMODULE'),
- ('unittest.loader', '/usr/lib/python3.12/unittest/loader.py', 'PYMODULE'),
- ('unittest.main', '/usr/lib/python3.12/unittest/main.py', 'PYMODULE'),
- ('unittest.mock', '/usr/lib/python3.12/unittest/mock.py', 'PYMODULE'),
- ('unittest.result', '/usr/lib/python3.12/unittest/result.py', 'PYMODULE'),
- ('unittest.runner', '/usr/lib/python3.12/unittest/runner.py', 'PYMODULE'),
- ('unittest.signals', '/usr/lib/python3.12/unittest/signals.py', 'PYMODULE'),
- ('unittest.suite', '/usr/lib/python3.12/unittest/suite.py', 'PYMODULE'),
- ('unittest.util', '/usr/lib/python3.12/unittest/util.py', 'PYMODULE'),
- ('urllib', '/usr/lib/python3.12/urllib/__init__.py', 'PYMODULE'),
- ('urllib.error', '/usr/lib/python3.12/urllib/error.py', 'PYMODULE'),
- ('urllib.parse', '/usr/lib/python3.12/urllib/parse.py', 'PYMODULE'),
- ('urllib.request', '/usr/lib/python3.12/urllib/request.py', 'PYMODULE'),
- ('urllib.response', '/usr/lib/python3.12/urllib/response.py', 'PYMODULE'),
- ('urllib3',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/__init__.py',
- 'PYMODULE'),
- ('urllib3._base_connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_base_connection.py',
- 'PYMODULE'),
- ('urllib3._collections',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_collections.py',
- 'PYMODULE'),
- ('urllib3._request_methods',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_request_methods.py',
- 'PYMODULE'),
- ('urllib3._version',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/_version.py',
- 'PYMODULE'),
- ('urllib3.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/connection.py',
- 'PYMODULE'),
- ('urllib3.connectionpool',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/connectionpool.py',
- 'PYMODULE'),
- ('urllib3.contrib',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/__init__.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/__init__.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/connection.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.fetch',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/fetch.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.request',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/request.py',
- 'PYMODULE'),
- ('urllib3.contrib.emscripten.response',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/emscripten/response.py',
- 'PYMODULE'),
- ('urllib3.contrib.pyopenssl',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/pyopenssl.py',
- 'PYMODULE'),
- ('urllib3.contrib.socks',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/contrib/socks.py',
- 'PYMODULE'),
- ('urllib3.exceptions',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/exceptions.py',
- 'PYMODULE'),
- ('urllib3.fields',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/fields.py',
- 'PYMODULE'),
- ('urllib3.filepost',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/filepost.py',
- 'PYMODULE'),
- ('urllib3.http2',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/http2/__init__.py',
- 'PYMODULE'),
- ('urllib3.http2.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/http2/connection.py',
- 'PYMODULE'),
- ('urllib3.http2.probe',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/http2/probe.py',
- 'PYMODULE'),
- ('urllib3.poolmanager',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/poolmanager.py',
- 'PYMODULE'),
- ('urllib3.response',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/response.py',
- 'PYMODULE'),
- ('urllib3.util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/__init__.py',
- 'PYMODULE'),
- ('urllib3.util.connection',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/connection.py',
- 'PYMODULE'),
- ('urllib3.util.proxy',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/proxy.py',
- 'PYMODULE'),
- ('urllib3.util.request',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/request.py',
- 'PYMODULE'),
- ('urllib3.util.response',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/response.py',
- 'PYMODULE'),
- ('urllib3.util.retry',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/retry.py',
- 'PYMODULE'),
- ('urllib3.util.ssl_',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/ssl_.py',
- 'PYMODULE'),
- ('urllib3.util.ssl_match_hostname',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/ssl_match_hostname.py',
- 'PYMODULE'),
- ('urllib3.util.ssltransport',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/ssltransport.py',
- 'PYMODULE'),
- ('urllib3.util.timeout',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/timeout.py',
- 'PYMODULE'),
- ('urllib3.util.url',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/url.py',
- 'PYMODULE'),
- ('urllib3.util.util',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/util.py',
- 'PYMODULE'),
- ('urllib3.util.wait',
- '/home/borderban/Рабочий '
- 'стол/client-py/venv/lib/python3.12/site-packages/urllib3/util/wait.py',
- 'PYMODULE'),
- ('webbrowser', '/usr/lib/python3.12/webbrowser.py', 'PYMODULE'),
- ('xml', '/usr/lib/python3.12/xml/__init__.py', 'PYMODULE'),
- ('xml.parsers', '/usr/lib/python3.12/xml/parsers/__init__.py', 'PYMODULE'),
- ('xml.parsers.expat', '/usr/lib/python3.12/xml/parsers/expat.py', 'PYMODULE'),
- ('xml.sax', '/usr/lib/python3.12/xml/sax/__init__.py', 'PYMODULE'),
- ('xml.sax._exceptions',
- '/usr/lib/python3.12/xml/sax/_exceptions.py',
- 'PYMODULE'),
- ('xml.sax.expatreader',
- '/usr/lib/python3.12/xml/sax/expatreader.py',
- 'PYMODULE'),
- ('xml.sax.handler', '/usr/lib/python3.12/xml/sax/handler.py', 'PYMODULE'),
- ('xml.sax.saxutils', '/usr/lib/python3.12/xml/sax/saxutils.py', 'PYMODULE'),
- ('xml.sax.xmlreader', '/usr/lib/python3.12/xml/sax/xmlreader.py', 'PYMODULE'),
- ('xmlrpc', '/usr/lib/python3.12/xmlrpc/__init__.py', 'PYMODULE'),
- ('xmlrpc.client', '/usr/lib/python3.12/xmlrpc/client.py', 'PYMODULE'),
- ('zipfile', '/usr/lib/python3.12/zipfile/__init__.py', 'PYMODULE'),
- ('zipfile._path',
- '/usr/lib/python3.12/zipfile/_path/__init__.py',
- 'PYMODULE'),
- ('zipfile._path.glob',
- '/usr/lib/python3.12/zipfile/_path/glob.py',
- 'PYMODULE'),
- ('zipimport', '/usr/lib/python3.12/zipimport.py', 'PYMODULE')])
diff --git a/build/FactorioSync/base_library.zip b/build/FactorioSync/base_library.zip
deleted file mode 100644
index d2c4452..0000000
Binary files a/build/FactorioSync/base_library.zip and /dev/null differ
diff --git a/build/FactorioSync/localpycs/pyimod01_archive.pyc b/build/FactorioSync/localpycs/pyimod01_archive.pyc
deleted file mode 100644
index 217c111..0000000
Binary files a/build/FactorioSync/localpycs/pyimod01_archive.pyc and /dev/null differ
diff --git a/build/FactorioSync/localpycs/pyimod02_importers.pyc b/build/FactorioSync/localpycs/pyimod02_importers.pyc
deleted file mode 100644
index 5c87b88..0000000
Binary files a/build/FactorioSync/localpycs/pyimod02_importers.pyc and /dev/null differ
diff --git a/build/FactorioSync/localpycs/pyimod03_ctypes.pyc b/build/FactorioSync/localpycs/pyimod03_ctypes.pyc
deleted file mode 100644
index f58c229..0000000
Binary files a/build/FactorioSync/localpycs/pyimod03_ctypes.pyc and /dev/null differ
diff --git a/build/FactorioSync/localpycs/struct.pyc b/build/FactorioSync/localpycs/struct.pyc
deleted file mode 100644
index ddc45c8..0000000
Binary files a/build/FactorioSync/localpycs/struct.pyc and /dev/null differ
diff --git a/build/FactorioSync/warn-FactorioSync.txt b/build/FactorioSync/warn-FactorioSync.txt
deleted file mode 100644
index 51ec2ba..0000000
--- a/build/FactorioSync/warn-FactorioSync.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-
-This file lists modules PyInstaller was not able to find. This does not
-necessarily mean these modules are required for running your program. Both
-Python's standard library and 3rd-party Python packages often conditionally
-import optional modules, some of which may be available only on certain
-platforms.
-
-Types of import:
-* top-level: imported at the top-level - look at these first
-* conditional: imported within an if-statement
-* delayed: imported within a function
-* optional: imported within a try-except-statement
-
-IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
- tracking down the missing module yourself. Thanks!
-
-missing module named _winapi - imported by encodings (delayed, conditional, optional), shutil (conditional), ntpath (optional), subprocess (conditional), mimetypes (optional), multiprocessing.connection (optional), multiprocessing.spawn (delayed, conditional), multiprocessing.reduction (conditional), multiprocessing.shared_memory (conditional), multiprocessing.heap (conditional), multiprocessing.popen_spawn_win32 (top-level), asyncio.windows_events (top-level), asyncio.windows_utils (top-level)
-missing module named msvcrt - imported by subprocess (optional), getpass (optional), multiprocessing.spawn (delayed, conditional), multiprocessing.popen_spawn_win32 (top-level), asyncio.windows_events (top-level), asyncio.windows_utils (top-level)
-missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
-excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
-missing module named winreg - imported by importlib._bootstrap_external (conditional), platform (delayed, optional), mimetypes (optional), urllib.request (delayed, conditional, optional), requests.utils (delayed, conditional, optional), setuptools._distutils.compilers.C.msvc (top-level), setuptools.msvc (conditional)
-missing module named nt - imported by shutil (conditional), importlib._bootstrap_external (conditional), ntpath (optional), os (delayed, conditional, optional), ctypes (delayed, conditional)
-missing module named _scproxy - imported by urllib.request (conditional)
-missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
-missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
-missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
-missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
-missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
-missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
-missing module named pyimod02_importers - imported by /home/borderban/Рабочий стол/client-py/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py (delayed)
-missing module named typing_extensions - imported by setuptools._distutils.util (conditional), setuptools._distutils.compilers.C.base (conditional), setuptools._distutils.sysconfig (conditional), packaging.version (conditional), setuptools._reqs (conditional), setuptools.warnings (conditional), setuptools._path (conditional), setuptools._distutils.dist (conditional), setuptools._distutils.cmd (conditional), setuptools._distutils.command.bdist (conditional), setuptools.config.expand (conditional), setuptools.config.setupcfg (conditional), setuptools.config._apply_pyprojecttoml (conditional), setuptools.config.pyprojecttoml (conditional), setuptools.config._validate_pyproject.formats (conditional), setuptools._vendor.packaging.version (conditional), setuptools.config._validate_pyproject.error_reporting (conditional), setuptools.dist (conditional), setuptools.command.bdist_egg (conditional), setuptools.compat.py311 (conditional), urllib3.util.retry (conditional), urllib3._collections (conditional), urllib3.util.ssltransport (conditional), urllib3.connectionpool (conditional), urllib3.poolmanager (conditional), urllib3.contrib.emscripten.fetch (conditional), charset_normalizer.md (conditional, optional), setuptools.msvc (conditional)
-missing module named _overlapped - imported by asyncio.windows_events (top-level)
-missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
-missing module named _typeshed - imported by setuptools._distutils.dist (conditional), setuptools.command.bdist_egg (conditional), setuptools.glob (conditional), setuptools._vendor.wheel.wheelfile (conditional), setuptools.compat.py311 (conditional)
-missing module named vms_lib - imported by platform (delayed, optional)
-missing module named 'java.lang' - imported by platform (delayed, optional)
-missing module named java - imported by platform (delayed)
-missing module named _winreg - imported by platform (delayed, optional)
-missing module named _wmi - imported by platform (optional)
-missing module named usercustomize - imported by site (delayed, optional)
-missing module named apport_python_hook - imported by sitecustomize (optional)
-missing module named _manylinux - imported by packaging._manylinux (delayed, optional), setuptools._vendor.packaging._manylinux (delayed, optional)
-missing module named setuptools._vendor.backports.zstd - imported by setuptools._vendor.backports (top-level), urllib3.util.request (conditional, optional), urllib3.response (conditional, optional)
-missing module named importlib_resources - imported by setuptools._vendor.jaraco.text (optional)
-missing module named trove_classifiers - imported by setuptools.config._validate_pyproject.formats (optional)
-missing module named simplejson - imported by requests.compat (conditional, optional)
-missing module named dummy_threading - imported by requests.cookies (optional)
-missing module named compression - imported by urllib3.util.request (conditional, optional), urllib3.response (conditional, optional)
-missing module named 'h2.events' - imported by urllib3.http2.connection (top-level)
-missing module named 'h2.connection' - imported by urllib3.http2.connection (top-level)
-missing module named h2 - imported by urllib3.http2.connection (top-level)
-missing module named brotli - imported by urllib3.util.request (optional), urllib3.response (optional)
-missing module named brotlicffi - imported by urllib3.util.request (optional), urllib3.response (optional)
-missing module named socks - imported by urllib3.contrib.socks (optional)
-missing module named cryptography - imported by urllib3.contrib.pyopenssl (top-level), requests (conditional, optional)
-missing module named 'OpenSSL.crypto' - imported by urllib3.contrib.pyopenssl (delayed, conditional)
-missing module named 'cryptography.x509' - imported by urllib3.contrib.pyopenssl (delayed, optional)
-missing module named OpenSSL - imported by urllib3.contrib.pyopenssl (top-level)
-missing module named chardet - imported by requests (optional)
-missing module named 'pyodide.ffi' - imported by urllib3.contrib.emscripten.fetch (delayed, optional)
-missing module named pyodide - imported by urllib3.contrib.emscripten.fetch (top-level)
-missing module named js - imported by urllib3.contrib.emscripten.fetch (top-level)
diff --git a/build/FactorioSync/xref-FactorioSync.html b/build/FactorioSync/xref-FactorioSync.html
deleted file mode 100644
index bb409f3..0000000
--- a/build/FactorioSync/xref-FactorioSync.html
+++ /dev/null
@@ -1,19508 +0,0 @@
-
-
-
-
- modulegraph cross reference for client.py, pyi_rth__tkinter.py, pyi_rth_inspect.py, pyi_rth_multiprocessing.py, pyi_rth_pkgutil.py, pyi_rth_setuptools.py
-
-
-
- modulegraph cross reference for client.py, pyi_rth__tkinter.py, pyi_rth_inspect.py, pyi_rth_multiprocessing.py, pyi_rth_pkgutil.py, pyi_rth_setuptools.py
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
81d243bd2c585b0f4821__mypyc /home/borderban/Рабочий стол/client-py/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
-
-
_abc (builtin module)
-
-
-
-
-
-
-
-
_ast (builtin module)
-
-
-
-
-
-
_asyncio /usr/lib/python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_bisect (builtin module)
-
-
-
-
-
-
_blake2 (builtin module)
-
-
-
-
-
-
_bz2 /usr/lib/python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_codecs (builtin module)
-
-
-
-
-
-
_codecs_cn /usr/lib/python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_codecs_hk /usr/lib/python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_codecs_iso2022 /usr/lib/python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_codecs_jp /usr/lib/python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_codecs_kr /usr/lib/python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_codecs_tw /usr/lib/python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_collections (builtin module)
-
-
-
-
-
-
-
-
-
-
-
-
_contextvars /usr/lib/python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_csv (builtin module)
-
-
-
-
-
-
_ctypes /usr/lib/python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_datetime (builtin module)
-
-
-
-
-
-
-
_decimal /usr/lib/python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
-
-
-
-
-
-
_functools (builtin module)
-
-
-
-
-
-
_hashlib /usr/lib/python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_heapq (builtin module)
-imported by:
-
heapq
-
-
-
-
-
-
-
-
_imp (builtin module)
-
-
-
-
-
-
_io (builtin module)
-
-
-
-
-
-
_json /usr/lib/python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
_locale (builtin module)
-
-
-
-
-
-
_lzma /usr/lib/python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
_md5 (builtin module)
-
-
-
-
-
-
_multibytecodec /usr/lib/python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_multiprocessing /usr/lib/python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_opcode (builtin module)
-
-
-
-
-
-
_operator (builtin module)
-
-
-
-
-
-
-
-
_pickle (builtin module)
-
-
-
-
-
-
-
_posixshmem /usr/lib/python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_posixsubprocess (builtin module)
-
-
-
-
-
-
-
-
-
-
-
-
-
_queue /usr/lib/python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so
-imported by:
-
queue
-
-
-
-
-
-
-
-
_random (builtin module)
-
-
-
-
-
-
-
-
_sha1 (builtin module)
-
-
-
-
-
-
_sha2 (builtin module)
-
-
-
-
-
-
_sha3 (builtin module)
-
-
-
-
-
-
_signal (builtin module)
-
-
-
-
-
-
-
-
_socket (builtin module)
-
-
-
-
-
-
_sre (builtin module)
-
-
-
-
-
-
-
_ssl /usr/lib/python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
_stat (builtin module)
-
-
-
-
-
-
_statistics (builtin module)
-
-
-
-
-
-
_string (builtin module)
-
-
-
-
-
-
-
-
_struct (builtin module)
-
-
-
-
-
-
-
-
_thread (builtin module)
-
-
-
-
-
-
-
-
_tkinter /usr/lib/python3.12/lib-dynload/_tkinter.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
_tokenize (builtin module)
-
-
-
-
-
-
_tracemalloc (builtin module)
-
-
-
-
-
-
-
-
_typing (builtin module)
-
-
-
-
-
-
_warnings (builtin module)
-
-
-
-
-
-
_weakref (builtin module)
-
-
-
-
-
-
-
-
-
-
-
-
_wmi
-
MissingModule
-
-
-
-
-
-
abc
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
array (builtin module)
-
-
-
-
-
-
ast
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
atexit (builtin module)
-
-
-
-
-
-
-
-
-
-
base64
-
SourceModule
-
-
-
-
-
-
-
binascii (builtin module)
-
-
-
-
-
-
bisect
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
builtins (builtin module)
-
-
-
-
-
-
bz2
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
charset_normalizer.cd /home/borderban/Рабочий стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
-
-
-
charset_normalizer.md /home/borderban/Рабочий стол/client-py/venv/lib/python3.12/site-packages/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
-
-
-
-
-
codecs
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
copy
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
csv
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
dis
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
enum
-
SourceModule
-
-
-
-
-
-
-
errno (builtin module)
-
-
-
-
-
-
fcntl (builtin module)
-
-
-
-
-
-
-
-
-
-
ftplib
-
SourceModule
-
-
-
-
-
-
-
-
-
gc (builtin module)
-
-
-
-
-
-
-
-
-
getopt
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
glob
-
SourceModule
-
-
-
-
-
-
-
grp (builtin module)
-
-
-
-
-
-
gzip
-
SourceModule
-
-
-
-
-
-
-
h2
-
MissingModule
-
-
-
-
-
-
-
-
heapq
-
SourceModule
-
-
-
-
-
-
-
hmac
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
io
-
SourceModule
-
-
-
-
-
-
-
-
-
itertools (builtin module)
-
-
-
-
-
-
-
-
java
-
MissingModule
-
-
-
-
-
-
js
-
MissingModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
locale
-
SourceModule
-
-
-
-
-
-
-
-
-
lzma
-
SourceModule
-
-
-
-
-
-
-
marshal (builtin module)
-
-
-
-
-
-
math (builtin module)
-
-
-
-
-
-
-
-
mmap /usr/lib/python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
netrc
-
SourceModule
-
-
-
-
-
-
-
nt
-
MissingModule
-
-
-
-
-
-
ntpath
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
opcode
-
SourceModule
-
-
-
-
-
-
-
-
-
os
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
pickle
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
posix (builtin module)
-
-
-
-
-
-
-
-
-
pprint
-
SourceModule
-
-
-
-
-
-
-
pwd (builtin module)
-
-
-
-
-
-
-
-
pydoc
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
pyexpat (builtin module)
-
-
-
-
-
-
-
-
-
-
queue
-
SourceModule
-
-
-
-
-
-
-
quopri
-
SourceModule
-
-
-
-
-
-
-
random
-
SourceModule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
readline /usr/lib/python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
resource /usr/lib/python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so
-imported by:
-
posix
-
-
-
-
-
-
-
-
-
-
runpy
-
SourceModule
-
-
-
-
-
-
-
-
-
select (builtin module)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
shlex
-
SourceModule
-
-
-
-
-
-
-
shutil
-
SourceModule
-
-
-
-
-
-
-
signal
-
SourceModule
-
-
-
-
-
-
-
-
-
site
-
SourceModule
-
-
-
-
-
-
-
-
-
socket
-
SourceModule
-
-
-
-
-
-
-
-
-
socks
-
MissingModule
-
-
-
-
-
-
-
-
-
-
-
-
ssl
-
SourceModule
-
-
-
-
-
-
-
stat
-
SourceModule
-
-
-
-
-
-
-
-
-
string
-
SourceModule
-
-
-
-
-
-
-
-
-
struct
-
SourceModule
-
-
-
-
-
-
-
-
-
sys (builtin module)
-
-
-
-
-
-
-
-
syslog (builtin module)
-
-
-
-
-
-
-
-
-
-
termios /usr/lib/python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so
-
-
-
-
-
-
-
-
-
-
time (builtin module)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
token
-
SourceModule
-
-
-
-
-
-
-
-
tomli
-
AliasNode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
tty
-
SourceModule
-
-imported by:
-
pydoc
-
-
-
-
-
-
-
-
types
-
SourceModule
-
-
-
-
-
-
-
typing
-
SourceModule
-
-
-
-
-
-
-
-
-
unicodedata (builtin module)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
wheel
-
AliasNode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
zipp
-
AliasNode
-
-
-
-
-
-
-
zlib (builtin module)
-
-
-
-
-
diff --git a/dist/FactorioSync b/dist/FactorioSync
deleted file mode 100755
index ea638a5..0000000
Binary files a/dist/FactorioSync and /dev/null differ
diff --git a/venv/bin/Activate.ps1 b/venv/bin/Activate.ps1
deleted file mode 100644
index b49d77b..0000000
--- a/venv/bin/Activate.ps1
+++ /dev/null
@@ -1,247 +0,0 @@
-<#
-.Synopsis
-Activate a Python virtual environment for the current PowerShell session.
-
-.Description
-Pushes the python executable for a virtual environment to the front of the
-$Env:PATH environment variable and sets the prompt to signify that you are
-in a Python virtual environment. Makes use of the command line switches as
-well as the `pyvenv.cfg` file values present in the virtual environment.
-
-.Parameter VenvDir
-Path to the directory that contains the virtual environment to activate. The
-default value for this is the parent of the directory that the Activate.ps1
-script is located within.
-
-.Parameter Prompt
-The prompt prefix to display when this virtual environment is activated. By
-default, this prompt is the name of the virtual environment folder (VenvDir)
-surrounded by parentheses and followed by a single space (ie. '(.venv) ').
-
-.Example
-Activate.ps1
-Activates the Python virtual environment that contains the Activate.ps1 script.
-
-.Example
-Activate.ps1 -Verbose
-Activates the Python virtual environment that contains the Activate.ps1 script,
-and shows extra information about the activation as it executes.
-
-.Example
-Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
-Activates the Python virtual environment located in the specified location.
-
-.Example
-Activate.ps1 -Prompt "MyPython"
-Activates the Python virtual environment that contains the Activate.ps1 script,
-and prefixes the current prompt with the specified string (surrounded in
-parentheses) while the virtual environment is active.
-
-.Notes
-On Windows, it may be required to enable this Activate.ps1 script by setting the
-execution policy for the user. You can do this by issuing the following PowerShell
-command:
-
-PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
-
-For more information on Execution Policies:
-https://go.microsoft.com/fwlink/?LinkID=135170
-
-#>
-Param(
- [Parameter(Mandatory = $false)]
- [String]
- $VenvDir,
- [Parameter(Mandatory = $false)]
- [String]
- $Prompt
-)
-
-<# Function declarations --------------------------------------------------- #>
-
-<#
-.Synopsis
-Remove all shell session elements added by the Activate script, including the
-addition of the virtual environment's Python executable from the beginning of
-the PATH variable.
-
-.Parameter NonDestructive
-If present, do not remove this function from the global namespace for the
-session.
-
-#>
-function global:deactivate ([switch]$NonDestructive) {
- # Revert to original values
-
- # The prior prompt:
- if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
- Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
- Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
- }
-
- # The prior PYTHONHOME:
- if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
- Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
- Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
- }
-
- # The prior PATH:
- if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
- Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
- Remove-Item -Path Env:_OLD_VIRTUAL_PATH
- }
-
- # Just remove the VIRTUAL_ENV altogether:
- if (Test-Path -Path Env:VIRTUAL_ENV) {
- Remove-Item -Path env:VIRTUAL_ENV
- }
-
- # Just remove VIRTUAL_ENV_PROMPT altogether.
- if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
- Remove-Item -Path env:VIRTUAL_ENV_PROMPT
- }
-
- # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
- if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
- Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
- }
-
- # Leave deactivate function in the global namespace if requested:
- if (-not $NonDestructive) {
- Remove-Item -Path function:deactivate
- }
-}
-
-<#
-.Description
-Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
-given folder, and returns them in a map.
-
-For each line in the pyvenv.cfg file, if that line can be parsed into exactly
-two strings separated by `=` (with any amount of whitespace surrounding the =)
-then it is considered a `key = value` line. The left hand string is the key,
-the right hand is the value.
-
-If the value starts with a `'` or a `"` then the first and last character is
-stripped from the value before being captured.
-
-.Parameter ConfigDir
-Path to the directory that contains the `pyvenv.cfg` file.
-#>
-function Get-PyVenvConfig(
- [String]
- $ConfigDir
-) {
- Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
-
- # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
- $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
-
- # An empty map will be returned if no config file is found.
- $pyvenvConfig = @{ }
-
- if ($pyvenvConfigPath) {
-
- Write-Verbose "File exists, parse `key = value` lines"
- $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
-
- $pyvenvConfigContent | ForEach-Object {
- $keyval = $PSItem -split "\s*=\s*", 2
- if ($keyval[0] -and $keyval[1]) {
- $val = $keyval[1]
-
- # Remove extraneous quotations around a string value.
- if ("'""".Contains($val.Substring(0, 1))) {
- $val = $val.Substring(1, $val.Length - 2)
- }
-
- $pyvenvConfig[$keyval[0]] = $val
- Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
- }
- }
- }
- return $pyvenvConfig
-}
-
-
-<# Begin Activate script --------------------------------------------------- #>
-
-# Determine the containing directory of this script
-$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
-$VenvExecDir = Get-Item -Path $VenvExecPath
-
-Write-Verbose "Activation script is located in path: '$VenvExecPath'"
-Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
-Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
-
-# Set values required in priority: CmdLine, ConfigFile, Default
-# First, get the location of the virtual environment, it might not be
-# VenvExecDir if specified on the command line.
-if ($VenvDir) {
- Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
-}
-else {
- Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
- $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
- Write-Verbose "VenvDir=$VenvDir"
-}
-
-# Next, read the `pyvenv.cfg` file to determine any required value such
-# as `prompt`.
-$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
-
-# Next, set the prompt from the command line, or the config file, or
-# just use the name of the virtual environment folder.
-if ($Prompt) {
- Write-Verbose "Prompt specified as argument, using '$Prompt'"
-}
-else {
- Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
- if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
- Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
- $Prompt = $pyvenvCfg['prompt'];
- }
- else {
- Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
- Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
- $Prompt = Split-Path -Path $venvDir -Leaf
- }
-}
-
-Write-Verbose "Prompt = '$Prompt'"
-Write-Verbose "VenvDir='$VenvDir'"
-
-# Deactivate any currently active virtual environment, but leave the
-# deactivate function in place.
-deactivate -nondestructive
-
-# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
-# that there is an activated venv.
-$env:VIRTUAL_ENV = $VenvDir
-
-if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
-
- Write-Verbose "Setting prompt to '$Prompt'"
-
- # Set the prompt to include the env name
- # Make sure _OLD_VIRTUAL_PROMPT is global
- function global:_OLD_VIRTUAL_PROMPT { "" }
- Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
- New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
-
- function global:prompt {
- Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
- _OLD_VIRTUAL_PROMPT
- }
- $env:VIRTUAL_ENV_PROMPT = $Prompt
-}
-
-# Clear PYTHONHOME
-if (Test-Path -Path Env:PYTHONHOME) {
- Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
- Remove-Item -Path Env:PYTHONHOME
-}
-
-# Add the venv to the PATH
-Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
-$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
diff --git a/venv/bin/activate b/venv/bin/activate
deleted file mode 100644
index 5f6f1c3..0000000
--- a/venv/bin/activate
+++ /dev/null
@@ -1,70 +0,0 @@
-# This file must be used with "source bin/activate" *from bash*
-# You cannot run it directly
-
-deactivate () {
- # reset old environment variables
- if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
- PATH="${_OLD_VIRTUAL_PATH:-}"
- export PATH
- unset _OLD_VIRTUAL_PATH
- fi
- if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
- PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
- export PYTHONHOME
- unset _OLD_VIRTUAL_PYTHONHOME
- fi
-
- # Call hash to forget past commands. Without forgetting
- # past commands the $PATH changes we made may not be respected
- hash -r 2> /dev/null
-
- if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
- PS1="${_OLD_VIRTUAL_PS1:-}"
- export PS1
- unset _OLD_VIRTUAL_PS1
- fi
-
- unset VIRTUAL_ENV
- unset VIRTUAL_ENV_PROMPT
- if [ ! "${1:-}" = "nondestructive" ] ; then
- # Self destruct!
- unset -f deactivate
- fi
-}
-
-# unset irrelevant variables
-deactivate nondestructive
-
-# on Windows, a path can contain colons and backslashes and has to be converted:
-if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then
- # transform D:\path\to\venv to /d/path/to/venv on MSYS
- # and to /cygdrive/d/path/to/venv on Cygwin
- export VIRTUAL_ENV=$(cygpath '/home/borderban/Рабочий стол/client-py/venv')
-else
- # use the path as-is
- export VIRTUAL_ENV='/home/borderban/Рабочий стол/client-py/venv'
-fi
-
-_OLD_VIRTUAL_PATH="$PATH"
-PATH="$VIRTUAL_ENV/"bin":$PATH"
-export PATH
-
-# unset PYTHONHOME if set
-# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
-# could use `if (set -u; : $PYTHONHOME) ;` in bash
-if [ -n "${PYTHONHOME:-}" ] ; then
- _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
- unset PYTHONHOME
-fi
-
-if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
- _OLD_VIRTUAL_PS1="${PS1:-}"
- PS1='(venv) '"${PS1:-}"
- export PS1
- VIRTUAL_ENV_PROMPT='(venv) '
- export VIRTUAL_ENV_PROMPT
-fi
-
-# Call hash to forget past commands. Without forgetting
-# past commands the $PATH changes we made may not be respected
-hash -r 2> /dev/null
diff --git a/venv/bin/activate.csh b/venv/bin/activate.csh
deleted file mode 100644
index be4817e..0000000
--- a/venv/bin/activate.csh
+++ /dev/null
@@ -1,27 +0,0 @@
-# This file must be used with "source bin/activate.csh" *from csh*.
-# You cannot run it directly.
-
-# Created by Davide Di Blasi .
-# Ported to Python 3.3 venv by Andrew Svetlov
-
-alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate'
-
-# Unset irrelevant variables.
-deactivate nondestructive
-
-setenv VIRTUAL_ENV '/home/borderban/Рабочий стол/client-py/venv'
-
-set _OLD_VIRTUAL_PATH="$PATH"
-setenv PATH "$VIRTUAL_ENV/"bin":$PATH"
-
-
-set _OLD_VIRTUAL_PROMPT="$prompt"
-
-if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
- set prompt = '(venv) '"$prompt"
- setenv VIRTUAL_ENV_PROMPT '(venv) '
-endif
-
-alias pydoc python -m pydoc
-
-rehash
diff --git a/venv/bin/activate.fish b/venv/bin/activate.fish
deleted file mode 100644
index b8844c3..0000000
--- a/venv/bin/activate.fish
+++ /dev/null
@@ -1,69 +0,0 @@
-# This file must be used with "source /bin/activate.fish" *from fish*
-# (https://fishshell.com/). You cannot run it directly.
-
-function deactivate -d "Exit virtual environment and return to normal shell environment"
- # reset old environment variables
- if test -n "$_OLD_VIRTUAL_PATH"
- set -gx PATH $_OLD_VIRTUAL_PATH
- set -e _OLD_VIRTUAL_PATH
- end
- if test -n "$_OLD_VIRTUAL_PYTHONHOME"
- set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
- set -e _OLD_VIRTUAL_PYTHONHOME
- end
-
- if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
- set -e _OLD_FISH_PROMPT_OVERRIDE
- # prevents error when using nested fish instances (Issue #93858)
- if functions -q _old_fish_prompt
- functions -e fish_prompt
- functions -c _old_fish_prompt fish_prompt
- functions -e _old_fish_prompt
- end
- end
-
- set -e VIRTUAL_ENV
- set -e VIRTUAL_ENV_PROMPT
- if test "$argv[1]" != "nondestructive"
- # Self-destruct!
- functions -e deactivate
- end
-end
-
-# Unset irrelevant variables.
-deactivate nondestructive
-
-set -gx VIRTUAL_ENV '/home/borderban/Рабочий стол/client-py/venv'
-
-set -gx _OLD_VIRTUAL_PATH $PATH
-set -gx PATH "$VIRTUAL_ENV/"bin $PATH
-
-# Unset PYTHONHOME if set.
-if set -q PYTHONHOME
- set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
- set -e PYTHONHOME
-end
-
-if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
- # fish uses a function instead of an env var to generate the prompt.
-
- # Save the current fish_prompt function as the function _old_fish_prompt.
- functions -c fish_prompt _old_fish_prompt
-
- # With the original prompt function renamed, we can override with our own.
- function fish_prompt
- # Save the return status of the last command.
- set -l old_status $status
-
- # Output the venv prompt; color taken from the blue of the Python logo.
- printf "%s%s%s" (set_color 4B8BBE) '(venv) ' (set_color normal)
-
- # Restore the return status of the previous command.
- echo "exit $old_status" | .
- # Output the original/"old" prompt.
- _old_fish_prompt
- end
-
- set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
- set -gx VIRTUAL_ENV_PROMPT '(venv) '
-end
diff --git a/venv/bin/autopep8 b/venv/bin/autopep8
deleted file mode 100755
index 69bbf73..0000000
--- a/venv/bin/autopep8
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from autopep8 import main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(main())
diff --git a/venv/bin/black b/venv/bin/black
deleted file mode 100755
index f56f00a..0000000
--- a/venv/bin/black
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from black import patched_main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(patched_main())
diff --git a/venv/bin/blackd b/venv/bin/blackd
deleted file mode 100755
index 1095a39..0000000
--- a/venv/bin/blackd
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from blackd import patched_main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(patched_main())
diff --git a/venv/bin/flake8 b/venv/bin/flake8
deleted file mode 100755
index ba3b4de..0000000
--- a/venv/bin/flake8
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from flake8.main.cli import main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(main())
diff --git a/venv/bin/get_gprof b/venv/bin/get_gprof
deleted file mode 100755
index f3c5d81..0000000
--- a/venv/bin/get_gprof
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/home/borderban/Рабочий стол/client-py/venv/bin/python3
-#
-# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
-# Copyright (c) 2008-2016 California Institute of Technology.
-# Copyright (c) 2016-2026 The Uncertainty Quantification Foundation.
-# License: 3-clause BSD. The full license text is available at:
-# - https://github.com/uqfoundation/dill/blob/master/LICENSE
-'''
-build profile graph for the given instance
-
-running:
- $ get_gprof
-
-executes:
- gprof2dot -f pstats .prof | dot -Tpng -o .call.png
-
-where:
- are arguments for gprof2dot, such as "-n 5 -e 5"
- is code to create the instance to profile
- is the class of the instance (i.e. type(instance))
-
-For example:
- $ get_gprof -n 5 -e 1 "import numpy; numpy.array([1,2])"
-
-will create 'ndarray.call.png' with the profile graph for numpy.array([1,2]),
-where '-n 5' eliminates nodes below 5% threshold, similarly '-e 1' eliminates
-edges below 1% threshold
-'''
-
-if __name__ == "__main__":
- import sys
- if len(sys.argv) < 2:
- print ("Please provide an object instance (e.g. 'import math; math.pi')")
- sys.exit()
- # grab args for gprof2dot
- args = sys.argv[1:-1]
- args = ' '.join(args)
- # last arg builds the object
- obj = sys.argv[-1]
- obj = obj.split(';')
- # multi-line prep for generating an instance
- for line in obj[:-1]:
- exec(line)
- # one-line generation of an instance
- try:
- obj = eval(obj[-1])
- except Exception:
- print ("Error processing object instance")
- sys.exit()
-
- # get object 'name'
- objtype = type(obj)
- name = getattr(objtype, '__name__', getattr(objtype, '__class__', objtype))
-
- # profile dumping an object
- import dill
- import os
- import cProfile
- #name = os.path.splitext(os.path.basename(__file__))[0]
- cProfile.run("dill.dumps(obj)", filename="%s.prof" % name)
- msg = "gprof2dot -f pstats %s %s.prof | dot -Tpng -o %s.call.png" % (args, name, name)
- try:
- res = os.system(msg)
- except Exception:
- print ("Please verify install of 'gprof2dot' to view profile graphs")
- if res:
- print ("Please verify install of 'gprof2dot' to view profile graphs")
-
- # get stats
- f_prof = "%s.prof" % name
- import pstats
- stats = pstats.Stats(f_prof, stream=sys.stdout)
- stats.strip_dirs().sort_stats('cumtime')
- stats.print_stats(20) #XXX: save to file instead of print top 20?
- os.remove(f_prof)
diff --git a/venv/bin/get_objgraph b/venv/bin/get_objgraph
deleted file mode 100755
index 23dc3a6..0000000
--- a/venv/bin/get_objgraph
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/home/borderban/Рабочий стол/client-py/venv/bin/python3
-#
-# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
-# Copyright (c) 2008-2016 California Institute of Technology.
-# Copyright (c) 2016-2026 The Uncertainty Quantification Foundation.
-# License: 3-clause BSD. The full license text is available at:
-# - https://github.com/uqfoundation/dill/blob/master/LICENSE
-"""
-display the reference paths for objects in ``dill.types`` or a .pkl file
-
-Notes:
- the generated image is useful in showing the pointer references in
- objects that are or can be pickled. Any object in ``dill.objects``
- listed in ``dill.load_types(picklable=True, unpicklable=True)`` works.
-
-Examples::
-
- $ get_objgraph ArrayType
- Image generated as ArrayType.png
-"""
-
-import dill as pickle
-#pickle.debug.trace(True)
-#import pickle
-
-# get all objects for testing
-from dill import load_types
-load_types(pickleable=True,unpickleable=True)
-from dill import objects
-
-if __name__ == "__main__":
- import sys
- if len(sys.argv) != 2:
- print ("Please provide exactly one file or type name (e.g. 'IntType')")
- msg = "\n"
- for objtype in list(objects.keys())[:40]:
- msg += objtype + ', '
- print (msg + "...")
- else:
- objtype = str(sys.argv[-1])
- try:
- obj = objects[objtype]
- except KeyError:
- obj = pickle.load(open(objtype,'rb'))
- import os
- objtype = os.path.splitext(objtype)[0]
- try:
- import objgraph
- objgraph.show_refs(obj, filename=objtype+'.png')
- except ImportError:
- print ("Please install 'objgraph' to view object graphs")
-
-
-# EOF
diff --git a/venv/bin/isort b/venv/bin/isort
deleted file mode 100755
index 3bb44f6..0000000
--- a/venv/bin/isort
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from isort.main import main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(main())
diff --git a/venv/bin/isort-identify-imports b/venv/bin/isort-identify-imports
deleted file mode 100755
index 9ba8146..0000000
--- a/venv/bin/isort-identify-imports
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from isort.main import identify_imports_main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(identify_imports_main())
diff --git a/venv/bin/normalizer b/venv/bin/normalizer
deleted file mode 100755
index 1ccadd0..0000000
--- a/venv/bin/normalizer
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from charset_normalizer.cli import cli_detect
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(cli_detect())
diff --git a/venv/bin/pip b/venv/bin/pip
deleted file mode 100755
index 50dc07f..0000000
--- a/venv/bin/pip
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-# -*- coding: utf-8 -*-
-import re
-import sys
-from pip._internal.cli.main import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/venv/bin/pip3 b/venv/bin/pip3
deleted file mode 100755
index 50dc07f..0000000
--- a/venv/bin/pip3
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-# -*- coding: utf-8 -*-
-import re
-import sys
-from pip._internal.cli.main import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/venv/bin/pip3.12 b/venv/bin/pip3.12
deleted file mode 100755
index 50dc07f..0000000
--- a/venv/bin/pip3.12
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-# -*- coding: utf-8 -*-
-import re
-import sys
-from pip._internal.cli.main import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/venv/bin/pycodestyle b/venv/bin/pycodestyle
deleted file mode 100755
index 7999c96..0000000
--- a/venv/bin/pycodestyle
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pycodestyle import _main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(_main())
diff --git a/venv/bin/pydocstyle b/venv/bin/pydocstyle
deleted file mode 100755
index 5468781..0000000
--- a/venv/bin/pydocstyle
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pydocstyle.cli import main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(main())
diff --git a/venv/bin/pyflakes b/venv/bin/pyflakes
deleted file mode 100755
index 4d7b1ed..0000000
--- a/venv/bin/pyflakes
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pyflakes.api import main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(main())
diff --git a/venv/bin/pyi-archive_viewer b/venv/bin/pyi-archive_viewer
deleted file mode 100755
index 4bfb6be..0000000
--- a/venv/bin/pyi-archive_viewer
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from PyInstaller.utils.cliutils.archive_viewer import run
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run())
diff --git a/venv/bin/pyi-bindepend b/venv/bin/pyi-bindepend
deleted file mode 100755
index 3cfdc99..0000000
--- a/venv/bin/pyi-bindepend
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from PyInstaller.utils.cliutils.bindepend import run
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run())
diff --git a/venv/bin/pyi-grab_version b/venv/bin/pyi-grab_version
deleted file mode 100755
index a97d2b8..0000000
--- a/venv/bin/pyi-grab_version
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from PyInstaller.utils.cliutils.grab_version import run
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run())
diff --git a/venv/bin/pyi-makespec b/venv/bin/pyi-makespec
deleted file mode 100755
index 3e72788..0000000
--- a/venv/bin/pyi-makespec
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from PyInstaller.utils.cliutils.makespec import run
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run())
diff --git a/venv/bin/pyi-set_version b/venv/bin/pyi-set_version
deleted file mode 100755
index 7489d74..0000000
--- a/venv/bin/pyi-set_version
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from PyInstaller.utils.cliutils.set_version import run
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run())
diff --git a/venv/bin/pyinstaller b/venv/bin/pyinstaller
deleted file mode 100755
index 4fd964e..0000000
--- a/venv/bin/pyinstaller
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from PyInstaller.__main__ import _console_script_run
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(_console_script_run())
diff --git a/venv/bin/pylint b/venv/bin/pylint
deleted file mode 100755
index 11c09c8..0000000
--- a/venv/bin/pylint
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pylint import run_pylint
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run_pylint())
diff --git a/venv/bin/pylint-config b/venv/bin/pylint-config
deleted file mode 100755
index 8abc510..0000000
--- a/venv/bin/pylint-config
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pylint import _run_pylint_config
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(_run_pylint_config())
diff --git a/venv/bin/pylsp b/venv/bin/pylsp
deleted file mode 100755
index a35a507..0000000
--- a/venv/bin/pylsp
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pylsp.__main__ import main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(main())
diff --git a/venv/bin/pyreverse b/venv/bin/pyreverse
deleted file mode 100755
index a10b2c7..0000000
--- a/venv/bin/pyreverse
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pylint import run_pyreverse
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run_pyreverse())
diff --git a/venv/bin/python b/venv/bin/python
deleted file mode 120000
index b8a0adb..0000000
--- a/venv/bin/python
+++ /dev/null
@@ -1 +0,0 @@
-python3
\ No newline at end of file
diff --git a/venv/bin/python3 b/venv/bin/python3
deleted file mode 120000
index ae65fda..0000000
--- a/venv/bin/python3
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/python3
\ No newline at end of file
diff --git a/venv/bin/python3.12 b/venv/bin/python3.12
deleted file mode 120000
index b8a0adb..0000000
--- a/venv/bin/python3.12
+++ /dev/null
@@ -1 +0,0 @@
-python3
\ No newline at end of file
diff --git a/venv/bin/symilar b/venv/bin/symilar
deleted file mode 100755
index 4b09d9c..0000000
--- a/venv/bin/symilar
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from pylint import run_symilar
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run_symilar())
diff --git a/venv/bin/undill b/venv/bin/undill
deleted file mode 100755
index 40b41ac..0000000
--- a/venv/bin/undill
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/home/borderban/Рабочий стол/client-py/venv/bin/python3
-#
-# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
-# Copyright (c) 2008-2016 California Institute of Technology.
-# Copyright (c) 2016-2026 The Uncertainty Quantification Foundation.
-# License: 3-clause BSD. The full license text is available at:
-# - https://github.com/uqfoundation/dill/blob/master/LICENSE
-"""
-unpickle the contents of a pickled object file
-
-Examples::
-
- $ undill hello.pkl
- ['hello', 'world']
-"""
-
-if __name__ == '__main__':
- import sys
- import dill
- for file in sys.argv[1:]:
- print (dill.load(open(file,'rb')))
-
diff --git a/venv/bin/yapf b/venv/bin/yapf
deleted file mode 100755
index 38304ff..0000000
--- a/venv/bin/yapf
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from yapf import run_main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(run_main())
diff --git a/venv/bin/yapf-diff b/venv/bin/yapf-diff
deleted file mode 100755
index 13548b8..0000000
--- a/venv/bin/yapf-diff
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-'''exec' "/home/borderban/Рабочий стол/client-py/venv/bin/python3" "$0" "$@"
-' '''
-import sys
-from yapf_third_party.yapf_diff.yapf_diff import main
-if __name__ == '__main__':
- sys.argv[0] = sys.argv[0].removesuffix('.exe')
- sys.exit(main())
diff --git a/venv/lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-x86_64-linux-gnu.so b/venv/lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-x86_64-linux-gnu.so
deleted file mode 100755
index ca1cc57..0000000
Binary files a/venv/lib/python3.12/site-packages/30fcd23745efe32ce681__mypyc.cpython-312-x86_64-linux-gnu.so and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so b/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so
deleted file mode 100755
index 83590cf..0000000
Binary files a/venv/lib/python3.12/site-packages/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/__init__.py
deleted file mode 100755
index a99f94e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/__init__.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-__all__ = ('HOMEPATH', 'PLATFORM', '__version__', 'DEFAULT_DISTPATH', 'DEFAULT_SPECPATH', 'DEFAULT_WORKPATH')
-
-import os
-
-from PyInstaller import compat
-
-# Note: Keep this variable as plain string so it could be updated automatically when doing a release.
-__version__ = '6.19.0'
-
-# Absolute path of this package's directory. Save this early so all submodules can use the absolute path. This is
-# required for example if the current directory changes prior to loading the hooks.
-PACKAGEPATH = os.path.abspath(os.path.dirname(__file__))
-
-HOMEPATH = os.path.dirname(PACKAGEPATH)
-
-# Default values of paths where to put files created by PyInstaller. If changing these, do not forget to update the
-# help text for corresponding command-line options, defined in build_main.
-
-# Where to put created .spec file.
-DEFAULT_SPECPATH = os.getcwd()
-# Where to put the final frozen application.
-DEFAULT_DISTPATH = os.path.join(os.getcwd(), 'dist')
-# Where to put all the temporary files; .log, .pyz, etc.
-DEFAULT_WORKPATH = os.path.join(os.getcwd(), 'build')
-
-PLATFORM = compat.system + '-' + compat.architecture
-# Include machine name in path to bootloader for some machines (e.g., 'arm'). Explicitly avoid doing this on macOS,
-# where we keep universal2 bootloaders in Darwin-64bit folder regardless of whether we are on x86_64 or arm64.
-if compat.machine and not compat.is_darwin:
- PLATFORM += '-' + compat.machine
-# Similarly, disambiguate musl Linux from glibc Linux.
-if compat.is_musl:
- PLATFORM += '-musl'
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__main__.py b/venv/lib/python3.12/site-packages/PyInstaller/__main__.py
deleted file mode 100755
index f36090b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/__main__.py
+++ /dev/null
@@ -1,321 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Main command-line interface to PyInstaller.
-"""
-from __future__ import annotations
-
-import argparse
-import os
-import platform
-import sys
-import pathlib
-from collections import defaultdict
-
-from PyInstaller import __version__
-from PyInstaller import log as logging
-# Note: do not import anything else until compat.check_requirements function is run!
-from PyInstaller import compat
-
-try:
- from argcomplete import autocomplete
-except ImportError:
-
- def autocomplete(parser):
- return None
-
-
-logger = logging.getLogger(__name__)
-
-# Taken from https://stackoverflow.com/a/22157136 to format args more flexibly: any help text which beings with ``R|``
-# will have all newlines preserved; the help text will be line wrapped. See
-# https://docs.python.org/3/library/argparse.html#formatter-class.
-
-
-# This is used by the ``--debug`` option.
-class _SmartFormatter(argparse.HelpFormatter):
- def _split_lines(self, text, width):
- if text.startswith('R|'):
- # The underlying implementation of ``RawTextHelpFormatter._split_lines`` invokes this; mimic it.
- return text[2:].splitlines()
- else:
- # Invoke the usual formatter.
- return super()._split_lines(text, width)
-
-
-def run_makespec(filenames, **opts):
- # Split pathex by using the path separator
- temppaths = opts['pathex'][:]
- pathex = opts['pathex'] = []
- for p in temppaths:
- pathex.extend(p.split(os.pathsep))
-
- import PyInstaller.building.makespec
-
- spec_file = PyInstaller.building.makespec.main(filenames, **opts)
- logger.info('wrote %s' % spec_file)
- return spec_file
-
-
-def run_build(pyi_config, spec_file, **kwargs):
- import PyInstaller.building.build_main
- PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
-
-
-def __add_options(parser):
- parser.add_argument(
- '-v',
- '--version',
- action='version',
- version=__version__,
- help='Show program version info and exit.',
- )
-
-
-class _PyiArgumentParser(argparse.ArgumentParser):
- def __init__(self, *args, **kwargs):
- self._pyi_action_groups = defaultdict(list)
- super().__init__(*args, **kwargs)
-
- def _add_options(self, __add_options: callable, name: str = ""):
- """
- Mutate self with the given callable, storing any new actions added in a named group
- """
- n_actions_before = len(getattr(self, "_actions", []))
- __add_options(self) # preserves old behavior
- new_actions = getattr(self, "_actions", [])[n_actions_before:]
- self._pyi_action_groups[name].extend(new_actions)
-
- def _option_name(self, action):
- """
- Get the option name(s) associated with an action
-
- For options that define both short and long names, this function will
- return the long names joined by "/"
- """
- longnames = [name for name in action.option_strings if name.startswith("--")]
- if longnames:
- name = "/".join(longnames)
- else:
- name = action.option_strings[0]
- return name
-
- def _forbid_options(self, args: argparse.Namespace, group: str, errmsg: str = ""):
- """Forbid options from a named action group"""
- options = defaultdict(str)
- for action in self._pyi_action_groups[group]:
- dest = action.dest
- name = self._option_name(action)
- if getattr(args, dest) is not self.get_default(dest):
- if dest in options:
- options[dest] += "/"
- options[dest] += name
-
- # if any options from the forbidden group are not the default values,
- # the user must have passed them in, so issue an error report
- if options:
- sep = "\n "
- bad = sep.join(options.values())
- if errmsg:
- errmsg = "\n" + errmsg
- raise SystemExit(f"ERROR: option(s) not allowed:{sep}{bad}{errmsg}")
-
-
-def generate_parser() -> _PyiArgumentParser:
- """
- Build an argparse parser for PyInstaller's main CLI.
- """
-
- import PyInstaller.building.build_main
- import PyInstaller.building.makespec
- import PyInstaller.log
-
- parser = _PyiArgumentParser(formatter_class=_SmartFormatter)
- parser.prog = "pyinstaller"
-
- parser._add_options(__add_options)
- parser._add_options(PyInstaller.building.makespec.__add_options, name="makespec")
- parser._add_options(PyInstaller.building.build_main.__add_options, name="build_main")
- parser._add_options(PyInstaller.log.__add_options, name="log")
-
- parser.add_argument(
- 'filenames',
- metavar='scriptname',
- nargs='+',
- help="Name of scriptfiles to be processed or exactly one .spec file. If a .spec file is specified, most "
- "options are unnecessary and are ignored.",
- )
-
- return parser
-
-
-def run(pyi_args: list | None = None, pyi_config: dict | None = None):
- """
- pyi_args allows running PyInstaller programmatically without a subprocess
- pyi_config allows checking configuration once when running multiple tests
- """
- compat.check_requirements()
- check_unsafe_privileges()
-
- import PyInstaller.log
-
- old_sys_argv = sys.argv
- try:
- parser = generate_parser()
- autocomplete(parser)
- if pyi_args is None:
- pyi_args = sys.argv[1:]
- try:
- index = pyi_args.index("--")
- except ValueError:
- index = len(pyi_args)
- args = parser.parse_args(pyi_args[:index])
- spec_args = pyi_args[index + 1:]
- PyInstaller.log.__process_options(parser, args)
-
- # Print PyInstaller version, Python version, and platform as the first line to stdout. This helps us identify
- # PyInstaller, Python, and platform version when users report issues.
- try:
- from _pyinstaller_hooks_contrib import __version__ as contrib_hooks_version
- except Exception:
- contrib_hooks_version = 'unknown'
-
- logger.info('PyInstaller: %s, contrib hooks: %s', __version__, contrib_hooks_version)
- logger.info('Python: %s%s', platform.python_version(), " (conda)" if compat.is_conda else "")
- logger.info('Platform: %s', platform.platform())
- logger.info('Python environment: %s', sys.prefix)
-
- # Skip creating .spec when .spec file is supplied.
- if args.filenames[0].endswith('.spec'):
- parser._forbid_options(
- args, group="makespec", errmsg="makespec options not valid when a .spec file is given"
- )
- spec_file = args.filenames[0]
- else:
- # Ensure that the given script files exist, before trying to generate the .spec file.
- # This prevents us from overwriting an existing (and customized) .spec file if user makes a typo in the
- # .spec file's suffix when trying to build it, for example, `pyinstaller program.cpes` (see #8276).
- # It also prevents creation of a .spec file when `pyinstaller program.py` is accidentally ran from a
- # directory that does not contain the script (for example, due to failing to change the directory prior
- # to running the command).
- for filename in args.filenames:
- if not os.path.isfile(filename):
- raise SystemExit(f"ERROR: Script file {filename!r} does not exist.")
- spec_file = run_makespec(**vars(args))
-
- sys.argv = [spec_file, *spec_args]
- run_build(pyi_config, spec_file, **vars(args))
-
- except KeyboardInterrupt:
- raise SystemExit("Aborted by user request.")
- except RecursionError:
- from PyInstaller import _recursion_too_deep_message
- _recursion_too_deep_message.raise_with_msg()
- finally:
- sys.argv = old_sys_argv
-
-
-def _console_script_run():
- # Python prepends the main script's parent directory to sys.path. When PyInstaller is ran via the usual
- # `pyinstaller` CLI entry point, this directory is $pythonprefix/bin which should not be in sys.path.
- if os.path.basename(sys.path[0]) in ("bin", "Scripts"):
- sys.path.pop(0)
- run()
-
-
-def check_unsafe_privileges():
- """
- Forbid dangerous usage of PyInstaller with escalated privileges
- """
- if compat.is_win and not compat.is_win_wine:
- # Discourage (with the intention to eventually block) people using *run as admin* with PyInstaller.
- # There are 4 cases, block case 3 but be careful not to also block case 2.
- # 1. User has no admin access: TokenElevationTypeDefault
- # 2. User is an admin/UAC disabled (common on CI/VMs): TokenElevationTypeDefault
- # 3. User has used *run as administrator* to elevate: TokenElevationTypeFull
- # 4. User can escalate but hasn't: TokenElevationTypeLimited
- # https://techcommunity.microsoft.com/t5/windows-blog-archive/how-to-determine-if-a-user-is-a-member-of-the-administrators/ba-p/228476
- import ctypes
-
- advapi32 = ctypes.CDLL("Advapi32.dll")
- kernel32 = ctypes.CDLL("kernel32.dll")
-
- kernel32.GetCurrentProcess.restype = ctypes.c_void_p
- process = kernel32.GetCurrentProcess()
-
- token = ctypes.c_void_p()
- try:
- TOKEN_QUERY = 8
- assert advapi32.OpenProcessToken(ctypes.c_void_p(process), TOKEN_QUERY, ctypes.byref(token))
-
- elevation_type = ctypes.c_int()
- TokenElevationType = 18
- assert advapi32.GetTokenInformation(
- token, TokenElevationType, ctypes.byref(elevation_type), ctypes.sizeof(elevation_type),
- ctypes.byref(ctypes.c_int())
- )
- finally:
- kernel32.CloseHandle(token)
-
- if elevation_type.value == 2: # TokenElevationTypeFull
- logger.log(
- logging.DEPRECATION,
- "Running PyInstaller as admin is not necessary nor sensible. Run PyInstaller from a non-administrator "
- "terminal. PyInstaller 7.0 will block this."
- )
-
- elif compat.is_darwin or compat.is_linux:
- # Discourage (with the intention to eventually block) people using *sudo* with PyInstaller.
- # Again there are 4 cases, block only case 4.
- # 1. Non-root: os.getuid() != 0
- # 2. Logged in as root (usually a VM): os.getlogin() == "root", os.getuid() == 0
- # 3. No named users (e.g. most Docker containers): os.getlogin() fails
- # 4. Regular user using escalation: os.getlogin() != "root", os.getuid() == 0
- try:
- user = os.getlogin()
- except OSError:
- user = ""
- if os.getuid() == 0 and user and user != "root":
- logger.log(
- logging.DEPRECATION,
- "Running PyInstaller as root is not necessary nor sensible. Do not use PyInstaller with sudo. "
- "PyInstaller 7.0 will block this."
- )
-
- if compat.is_win:
- # Do not let people run PyInstaller from admin cmd's default working directory (C:\Windows\system32)
- cwd = pathlib.Path.cwd()
-
- try:
- win_dir = compat.win32api.GetWindowsDirectory()
- except Exception:
- win_dir = None
- win_dir = None if win_dir is None else pathlib.Path(win_dir).resolve()
-
- inside_win_dir = cwd == win_dir or win_dir in cwd.parents
-
- # The only exception to the above is if user's home directory is also located under %WINDIR%, which happens
- # when PyInstaller is ran under SYSTEM user.
- if inside_win_dir:
- home_dir = pathlib.Path.home().resolve()
- if cwd == home_dir or home_dir in cwd.parents:
- inside_win_dir = False
-
- if inside_win_dir:
- raise SystemExit(
- f"ERROR: Do not run pyinstaller from {cwd}. cd to where your code is and run pyinstaller from there. "
- "Hint: You can open a terminal where your code is by going to the parent folder in Windows file "
- "explorer and typing cmd into the address bar."
- )
-
-
-if __name__ == '__main__':
- run()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 70307e6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/__main__.cpython-312.pyc
deleted file mode 100644
index 4a42084..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/__main__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/_recursion_too_deep_message.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/_recursion_too_deep_message.cpython-312.pyc
deleted file mode 100644
index 2578dbd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/_recursion_too_deep_message.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/_shared_with_waf.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/_shared_with_waf.cpython-312.pyc
deleted file mode 100644
index b62d431..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/_shared_with_waf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/compat.cpython-312.pyc
deleted file mode 100644
index ff7bafb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/compat.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/config.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/config.cpython-312.pyc
deleted file mode 100644
index 4056ec8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/config.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/configure.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/configure.cpython-312.pyc
deleted file mode 100644
index 35aedbe..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/configure.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/exceptions.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/exceptions.cpython-312.pyc
deleted file mode 100644
index 3652573..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/exceptions.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/log.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/log.cpython-312.pyc
deleted file mode 100644
index d445998..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/__pycache__/log.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/_recursion_too_deep_message.py b/venv/lib/python3.12/site-packages/PyInstaller/_recursion_too_deep_message.py
deleted file mode 100755
index e62c20d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/_recursion_too_deep_message.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-msg = """
-=============================================================
-A RecursionError (maximum recursion depth exceeded) occurred.
-For working around please follow these instructions
-=============================================================
-
-1. In your program's .spec file add this line near the top::
-
- import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)
-
-2. Build your program by running PyInstaller with the .spec file as
- argument::
-
- pyinstaller myprog.spec
-
-3. If this fails, you most probably hit an endless recursion in
- PyInstaller. Please try to track this down as far as possible,
- create a minimal example so we can reproduce and open an issue at
- https://github.com/pyinstaller/pyinstaller/issues following the
- instructions in the issue template. Many thanks.
-
-Explanation: Python's stack-limit is a safety-belt against endless recursion,
-eating up memory. PyInstaller imports modules recursively. If the structure
-how modules are imported within your program is awkward, this leads to the
-nesting being too deep and hitting Python's stack-limit.
-
-With the default recursion limit (1000), the recursion error occurs at about
-115 nested imported, with limit 2000 at about 240, with limit 5000 at about
-660.
-"""
-
-
-def raise_with_msg():
- raise SystemExit(msg)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/_shared_with_waf.py b/venv/lib/python3.12/site-packages/PyInstaller/_shared_with_waf.py
deleted file mode 100755
index ed2615c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/_shared_with_waf.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Code to be shared by PyInstaller and the bootloader/wscript file.
-
-This code must not assume that either PyInstaller or any of its dependencies installed. I.e., the only imports allowed
-in here are standard library ones. Within reason, it is preferable that this file should still run under Python 2.7 as
-many compiler docker images still have only Python 2 installed.
-"""
-
-import platform
-import re
-
-
-def _pyi_machine(machine, system):
- # type: (str, str) -> str
- """
- Choose an intentionally simplified architecture identifier to be used in the bootloader's directory name.
-
- Args:
- machine:
- The output of ``platform.machine()`` or any known architecture alias or shorthand that may be used by a
- C compiler.
- system:
- The output of ``platform.system()`` on the target machine.
- Returns:
- Either a string tag or, on platforms that don't need an architecture tag, ``None``.
-
- Ideally, we would just use ``platform.machine()`` directly, but that makes cross-compiling the bootloader almost
- impossible, because you need to know at compile time exactly what ``platform.machine()`` will be at run time, based
- only on the machine name alias or shorthand reported by the C compiler at the build time. Rather, use a loose
- differentiation, and trust that anyone mixing armv6l with armv6h knows what they are doing.
- """
- # See the corresponding tests in tests/unit/test_compat.py for examples.
-
- if platform.machine() == "sw_64" or platform.machine() == "loongarch64":
- # This explicitly inhibits cross compiling the bootloader for or on SunWay and LoongArch machine.
- return platform.machine()
-
- if system == "Windows":
- if machine.lower().startswith("arm"):
- return "arm"
- else:
- return "intel"
-
- if system == "SunOS":
- if machine.lower() in ("x86_64", "x86", "i86pc"):
- return "intel"
- else:
- return "sparc"
-
- if system != "Linux":
- # No architecture specifier for anything par Linux.
- # - macOS is on two 64 bit architectures, but they are merged into one "universal2" bootloader.
- # - BSD supports a wide range of architectures, but according to PyPI's download statistics, every one of our
- # BSD users are on x86_64. This may change in the distant future.
- return
-
- if machine.startswith(("arm", "aarch")):
- # ARM has a huge number of similar and aliased sub-versions, such as armv5, armv6l armv8h, aarch64.
- return "arm"
- if machine in ("thumb"):
- # Reported by waf/gcc when Thumb instruction set is enabled on 32-bit ARM. The platform.machine() returns "arm"
- # regardless of the instruction set.
- return "arm"
- if machine in ("x86_64", "x64", "x86"):
- return "intel"
- if re.fullmatch("i[1-6]86", machine):
- return "intel"
- if machine.startswith(("ppc", "powerpc")):
- # PowerPC comes in 64 vs 32 bit and little vs big endian variants.
- return "ppc"
- if machine in ("mips64", "mips"):
- return "mips"
- if machine.startswith("riscv"):
- return "riscv"
- # Machines with no known aliases :)
- if machine in ("s390x",):
- return machine
-
- # Unknown architectures are allowed by default, but will all be placed under one directory. In theory, trying to
- # have multiple unknown architectures in one copy of PyInstaller will not work, but that should be sufficiently
- # unlikely to ever happen.
- return "unknown"
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/archive/__init__.py
deleted file mode 100755
index a7501ae..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/archive/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-__author__ = 'martin'
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 1778db1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/pyz_crypto.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/pyz_crypto.cpython-312.pyc
deleted file mode 100644
index 9628518..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/pyz_crypto.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/readers.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/readers.cpython-312.pyc
deleted file mode 100644
index 422da4a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/readers.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/writers.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/writers.cpython-312.pyc
deleted file mode 100644
index 38ae1c6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/archive/__pycache__/writers.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/pyz_crypto.py b/venv/lib/python3.12/site-packages/PyInstaller/archive/pyz_crypto.py
deleted file mode 100755
index a16905f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/archive/pyz_crypto.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-class PyiBlockCipher:
- def __init__(self, key=None):
- from PyInstaller.exceptions import RemovedCipherFeatureError
- raise RemovedCipherFeatureError("Please remove cipher and block_cipher parameters from your spec file.")
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/readers.py b/venv/lib/python3.12/site-packages/PyInstaller/archive/readers.py
deleted file mode 100755
index 3ddc160..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/archive/readers.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Python-based CArchive (PKG) reader implementation. Used only in the archive_viewer utility.
-"""
-
-import os
-import struct
-
-from PyInstaller.loader.pyimod01_archive import ZlibArchiveReader, ArchiveReadError
-
-
-class NotAnArchiveError(TypeError):
- pass
-
-
-# Type codes for CArchive TOC entries
-PKG_ITEM_BINARY = 'b' # binary
-PKG_ITEM_DEPENDENCY = 'd' # runtime option
-PKG_ITEM_PYZ = 'z' # zlib (pyz) - frozen Python code
-PKG_ITEM_ZIPFILE = 'Z' # zlib (pyz) - frozen Python code
-PKG_ITEM_PYPACKAGE = 'M' # Python package (__init__.py)
-PKG_ITEM_PYMODULE = 'm' # Python module
-PKG_ITEM_PYSOURCE = 's' # Python script (v3)
-PKG_ITEM_DATA = 'x' # data
-PKG_ITEM_RUNTIME_OPTION = 'o' # runtime option
-PKG_ITEM_SPLASH = 'l' # splash resources
-
-
-class CArchiveReader:
- """
- Reader for PyInstaller's CArchive (PKG) archive.
- """
-
- # Cookie - holds some information for the bootloader. C struct format definition. '!' at the beginning means network
- # byte order. C struct looks like:
- #
- # typedef struct _archive_cookie
- # {
- # char magic[8];
- # uint32_t pkg_length;
- # uint32_t toc_offset;
- # uint32_t toc_length;
- # uint32_t python_version;
- # char python_libname[64];
- # } ARCHIVE_COOKIE;
- #
- _COOKIE_MAGIC_PATTERN = b'MEI\014\013\012\013\016'
-
- _COOKIE_FORMAT = '!8sIIII64s'
- _COOKIE_LENGTH = struct.calcsize(_COOKIE_FORMAT)
-
- # TOC entry:
- #
- # typedef struct _toc_entry
- # {
- # uint32_t entry_length;
- # uint32_t offset;
- # uint32_t length;
- # uint32_t uncompressed_length;
- # unsigned char compression_flag;
- # char typecode;
- # char name[1]; /* Variable-length name, padded to multiple of 16 */
- # } TOC_ENTRY;
- #
- _TOC_ENTRY_FORMAT = '!IIIIBc'
- _TOC_ENTRY_LENGTH = struct.calcsize(_TOC_ENTRY_FORMAT)
-
- def __init__(self, filename):
- self._filename = filename
- self._start_offset = 0
- self._end_offset = 0
- self._toc_offset = 0
- self._toc_length = 0
-
- self.toc = {}
- self.options = []
-
- # Load TOC
- with open(self._filename, "rb") as fp:
- # Find cookie MAGIC pattern
- cookie_start_offset = self._find_magic_pattern(fp, self._COOKIE_MAGIC_PATTERN)
- if cookie_start_offset == -1:
- raise ArchiveReadError("Could not find COOKIE magic pattern!")
-
- # Read the whole cookie
- fp.seek(cookie_start_offset, os.SEEK_SET)
- cookie_data = fp.read(self._COOKIE_LENGTH)
-
- magic, archive_length, toc_offset, toc_length, pyvers, pylib_name = \
- struct.unpack(self._COOKIE_FORMAT, cookie_data)
-
- # Compute start and end offset of the the archive
- self._end_offset = cookie_start_offset + self._COOKIE_LENGTH
- self._start_offset = self._end_offset - archive_length
-
- # Verify that Python shared library name is set
- if not pylib_name:
- raise ArchiveReadError("Python shared library name not set in the archive!")
-
- # Read whole toc
- fp.seek(self._start_offset + toc_offset)
- toc_data = fp.read(toc_length)
-
- self.toc, self.options = self._parse_toc(toc_data)
-
- @staticmethod
- def _find_magic_pattern(fp, magic_pattern):
- # Start at the end of file, and scan back-to-start
- fp.seek(0, os.SEEK_END)
- end_pos = fp.tell()
-
- # Scan from back
- SEARCH_CHUNK_SIZE = 8192
- magic_offset = -1
- while end_pos >= len(magic_pattern):
- start_pos = max(end_pos - SEARCH_CHUNK_SIZE, 0)
- chunk_size = end_pos - start_pos
- # Is the remaining chunk large enough to hold the pattern?
- if chunk_size < len(magic_pattern):
- break
- # Read and scan the chunk
- fp.seek(start_pos, os.SEEK_SET)
- buf = fp.read(chunk_size)
- pos = buf.rfind(magic_pattern)
- if pos != -1:
- magic_offset = start_pos + pos
- break
- # Adjust search location for next chunk; ensure proper overlap
- end_pos = start_pos + len(magic_pattern) - 1
-
- return magic_offset
-
- @classmethod
- def _parse_toc(cls, data):
- options = []
- toc = {}
- cur_pos = 0
- while cur_pos < len(data):
- # Read and parse the fixed-size TOC entry header
- entry_length, entry_offset, data_length, uncompressed_length, compression_flag, typecode = \
- struct.unpack(cls._TOC_ENTRY_FORMAT, data[cur_pos:(cur_pos + cls._TOC_ENTRY_LENGTH)])
- cur_pos += cls._TOC_ENTRY_LENGTH
- # Read variable-length name
- name_length = entry_length - cls._TOC_ENTRY_LENGTH
- name, *_ = struct.unpack(f'{name_length}s', data[cur_pos:(cur_pos + name_length)])
- cur_pos += name_length
- # Name string may contain up to 15 bytes of padding
- name = name.rstrip(b'\0').decode('utf-8')
-
- typecode = typecode.decode('ascii')
-
- # The TOC should not contain duplicates, except for OPTION entries. Therefore, keep those
- # in a separate list. With options, the rest of the entries do not make sense, anyway.
- if typecode == 'o':
- options.append(name)
- else:
- toc[name] = (entry_offset, data_length, uncompressed_length, compression_flag, typecode)
-
- return toc, options
-
- def extract(self, name):
- """
- Extract data for the given entry name.
- """
-
- entry = self.toc.get(name)
- if entry is None:
- raise KeyError(f"No entry named {name!r} found in the archive!")
-
- entry_offset, data_length, uncompressed_length, compression_flag, typecode = entry
- with open(self._filename, "rb") as fp:
- fp.seek(self._start_offset + entry_offset, os.SEEK_SET)
- data = fp.read(data_length)
-
- if compression_flag:
- import zlib
- data = zlib.decompress(data)
-
- return data
-
- def raw_pkg_data(self):
- """
- Extract complete PKG/CArchive archive from the parent file (executable).
- """
- total_length = self._end_offset - self._start_offset
- with open(self._filename, "rb") as fp:
- fp.seek(self._start_offset, os.SEEK_SET)
- return fp.read(total_length)
-
- def open_embedded_archive(self, name):
- """
- Open new archive reader for the embedded archive.
- """
-
- entry = self.toc.get(name)
- if entry is None:
- raise KeyError(f"No entry named {name!r} found in the archive!")
-
- entry_offset, data_length, uncompressed_length, compression_flag, typecode = entry
-
- if typecode == PKG_ITEM_PYZ:
- # Open as embedded archive, without extraction.
- return ZlibArchiveReader(self._filename, self._start_offset + entry_offset)
- elif typecode == PKG_ITEM_ZIPFILE:
- raise NotAnArchiveError("Zipfile archives not supported yet!")
- else:
- raise NotAnArchiveError(f"Entry {name!r} is not a supported embedded archive!")
-
-
-def pkg_archive_contents(filename, recursive=True):
- """
- List the contents of the PKG / CArchive. If `recursive` flag is set (the default), the contents of the embedded PYZ
- archive is included as well.
-
- Used by the tests.
- """
-
- contents = []
-
- pkg_archive = CArchiveReader(filename)
- for name, toc_entry in pkg_archive.toc.items():
- *_, typecode = toc_entry
- contents.append(name)
- if typecode == PKG_ITEM_PYZ and recursive:
- pyz_archive = pkg_archive.open_embedded_archive(name)
- for name in pyz_archive.toc.keys():
- contents.append(name)
-
- return contents
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/archive/writers.py b/venv/lib/python3.12/site-packages/PyInstaller/archive/writers.py
deleted file mode 100755
index e854e5e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/archive/writers.py
+++ /dev/null
@@ -1,458 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Utilities to create data structures for embedding Python modules and additional files into the executable.
-"""
-
-import marshal
-import os
-import shutil
-import struct
-import sys
-import zlib
-
-from PyInstaller.building.utils import get_code_object, replace_filename_in_code_object
-from PyInstaller.compat import BYTECODE_MAGIC, is_win, strict_collect_mode
-from PyInstaller.loader.pyimod01_archive import PYZ_ITEM_MODULE, PYZ_ITEM_NSPKG, PYZ_ITEM_PKG
-
-
-class ZlibArchiveWriter:
- """
- Writer for PyInstaller's PYZ (ZlibArchive) archive. The archive is used to store collected byte-compiled Python
- modules, as individually-compressed entries.
- """
- _PYZ_MAGIC_PATTERN = b'PYZ\0'
- _HEADER_LENGTH = 12 + 5
- _COMPRESSION_LEVEL = 6 # zlib compression level
-
- def __init__(self, filename, entries, code_dict=None):
- """
- filename
- Target filename of the archive.
- entries
- An iterable containing entries in the form of tuples: (name, src_path, typecode), where `name` is the name
- under which the resource is stored (e.g., python module name, without suffix), `src_path` is name of the
- file from which the resource is read, and `typecode` is the Analysis-level TOC typecode (`PYMODULE`).
- code_dict
- Optional code dictionary containing code objects for analyzed/collected python modules.
- """
- code_dict = code_dict or {}
-
- with open(filename, "wb") as fp:
- # Reserve space for the header.
- fp.write(b'\0' * self._HEADER_LENGTH)
-
- # Write entries' data and collect TOC entries
- toc = []
- for entry in entries:
- toc_entry = self._write_entry(fp, entry, code_dict)
- toc.append(toc_entry)
-
- # Write TOC
- toc_offset = fp.tell()
- toc_data = marshal.dumps(toc)
- fp.write(toc_data)
-
- # Write header:
- # - PYZ magic pattern (4 bytes)
- # - python bytecode magic pattern (4 bytes)
- # - TOC offset (32-bit int, 4 bytes)
- # - 4 unused bytes
- fp.seek(0, os.SEEK_SET)
-
- fp.write(self._PYZ_MAGIC_PATTERN)
- fp.write(BYTECODE_MAGIC)
- fp.write(struct.pack('!i', toc_offset))
-
- @classmethod
- def _write_entry(cls, fp, entry, code_dict):
- name, src_path, typecode = entry
- assert typecode in {'PYMODULE', 'PYMODULE-1', 'PYMODULE-2'}
-
- if src_path in {'-', None}:
- # PEP-420 namespace package; these do not have code objects, but we still need an entry in PYZ to inform our
- # run-time module finder/loader of the package's existence. So create a TOC entry for 0-byte data blob,
- # and write no data.
- return (name, (PYZ_ITEM_NSPKG, fp.tell(), 0))
-
- code_object = code_dict[name]
-
- src_basename, _ = os.path.splitext(os.path.basename(src_path))
- if src_basename == '__init__':
- typecode = PYZ_ITEM_PKG
- co_filename = os.path.join(*name.split('.'), '__init__.py')
- else:
- typecode = PYZ_ITEM_MODULE
- co_filename = os.path.join(*name.split('.')) + '.py'
-
- # Replace co_filename on code object with anonymized version without absolute path to the module.
- code_object = replace_filename_in_code_object(code_object, co_filename)
-
- # Serialize
- data = marshal.dumps(code_object)
-
- # First compress, then encrypt.
- obj = zlib.compress(data, cls._COMPRESSION_LEVEL)
-
- # Create TOC entry
- toc_entry = (name, (typecode, fp.tell(), len(obj)))
-
- # Write data blob
- fp.write(obj)
-
- return toc_entry
-
-
-class CArchiveWriter:
- """
- Writer for PyInstaller's CArchive (PKG) archive.
-
- This archive contains all files that are bundled within an executable; a PYZ (ZlibArchive), DLLs, Python C
- extensions, and other data files that are bundled in onefile mode.
-
- The archive can be read from either C (bootloader code at application's run-time) or Python (for debug purposes).
- """
- _COOKIE_MAGIC_PATTERN = b'MEI\014\013\012\013\016'
-
- # For cookie and TOC entry structure, see `PyInstaller.archive.readers.CArchiveReader`.
- _COOKIE_FORMAT = '!8sIIII64s'
- _COOKIE_LENGTH = struct.calcsize(_COOKIE_FORMAT)
-
- _TOC_ENTRY_FORMAT = '!IIIIBc'
- _TOC_ENTRY_LENGTH = struct.calcsize(_TOC_ENTRY_FORMAT)
-
- _COMPRESSION_LEVEL = 9 # zlib compression level
-
- def __init__(self, filename, entries, pylib_name):
- """
- filename
- Target filename of the archive.
- entries
- An iterable containing entries in the form of tuples: (dest_name, src_name, compress, typecode), where
- `dest_name` is the name under which the resource is stored in the archive (and name under which it is
- extracted at runtime), `src_name` is name of the file from which the resouce is read, `compress` is a
- boolean compression flag, and `typecode` is the Analysis-level TOC typecode.
- pylib_name
- Name of the python shared library.
- """
- self._collected_names = set() # Track collected names for strict package mode.
-
- with open(filename, "wb") as fp:
- # Write entries' data and collect TOC entries
- toc = []
- for entry in entries:
- toc_entry = self._write_entry(fp, entry)
- toc.append(toc_entry)
-
- # Write TOC
- toc_offset = fp.tell()
- toc_data = self._serialize_toc(toc)
- toc_length = len(toc_data)
-
- fp.write(toc_data)
-
- # Write cookie
- archive_length = toc_offset + toc_length + self._COOKIE_LENGTH
- pyvers = sys.version_info[0] * 100 + sys.version_info[1]
- cookie_data = struct.pack(
- self._COOKIE_FORMAT,
- self._COOKIE_MAGIC_PATTERN,
- archive_length,
- toc_offset,
- toc_length,
- pyvers,
- pylib_name.encode('ascii'),
- )
-
- fp.write(cookie_data)
-
- def _write_entry(self, fp, entry):
- dest_name, src_name, compress, typecode = entry
-
- # Write OPTION entries as-is, without normalizing them. This also exempts them from duplication check,
- # allowing them to be specified multiple times.
- if typecode == 'o':
- return self._write_blob(fp, b"", dest_name, typecode)
-
- # Ensure forward slashes in paths are on Windows converted to back slashes '\\', as on Windows the bootloader
- # works only with back slashes.
- dest_name = os.path.normpath(dest_name)
- if is_win and os.path.sep == '/':
- # When building under MSYS, the above path normalization uses Unix-style separators, so replace them
- # manually.
- dest_name = dest_name.replace(os.path.sep, '\\')
-
- # For symbolic link entries, also ensure that the symlink target path (stored in src_name) is using
- # Windows-style back slash separators.
- if typecode == 'n':
- src_name = src_name.replace(os.path.sep, '\\')
-
- # Strict pack/collect mode: keep track of the destination names, and raise an error if we try to add a duplicate
- # (a file with same destination name, subject to OS case normalization rules).
- if strict_collect_mode:
- normalized_dest = None
- if typecode in {'s', 's1', 's2', 'm', 'M'}:
- # Exempt python source scripts and modules from the check.
- pass
- else:
- # Everything else; normalize the case
- normalized_dest = os.path.normcase(dest_name)
- # Check for existing entry, if applicable
- if normalized_dest:
- if normalized_dest in self._collected_names:
- raise ValueError(
- f"Attempting to collect a duplicated file into CArchive: {normalized_dest} (type: {typecode})"
- )
- self._collected_names.add(normalized_dest)
-
- if typecode == 'd':
- # Dependency; merge src_name (= reference path prefix) and dest_name (= name) into single-string format that
- # is parsed by bootloader.
- return self._write_blob(fp, b"", f"{src_name}:{dest_name}", typecode)
- elif typecode in {'s', 's1', 's2'}:
- # If it is a source code file, compile it to a code object and marshal the object, so it can be unmarshalled
- # by the bootloader. For that, we need to know target optimization level, which is stored in typecode.
- optim_level = {'s': 0, 's1': 1, 's2': 2}[typecode]
- code = get_code_object(dest_name, src_name, optimize=optim_level)
- # Construct new `co_filename` by taking destination name, and replace its suffix with the one from the code
- # object's co_filename; this should cover all of the following cases:
- # - run-time hook script: the source name has a suffix (that is also present in `co_filename` produced by
- # `get_code_object`), destination name has no suffix.
- # - entry-point script with a suffix: both source name and destination name have the same suffix (and the
- # same suffix is also in `co_filename` produced by `get_code_object`)
- # - entry-point script without a suffix: neither source name nor destination name have a suffix, but
- # `get_code_object` adds a .py suffix to `co_filename` to mitigate potential issues with POSIX
- # executables and `traceback` module; we want to preserve this behavior.
- co_filename = os.path.splitext(dest_name)[0] + os.path.splitext(code.co_filename)[1]
- code = replace_filename_in_code_object(code, co_filename)
- return self._write_blob(fp, marshal.dumps(code), dest_name, 's', compress=compress)
- elif typecode in ('m', 'M'):
- # Read the PYC file. We do not perform compilation here (in contrast to script files in the above branch),
- # so typecode does not contain optimization level information.
- with open(src_name, "rb") as in_fp:
- data = in_fp.read()
- assert data[:4] == BYTECODE_MAGIC
- # Skip the PYC header, load the code object.
- code = marshal.loads(data[16:])
- co_filename = dest_name + '.py' # Use dest name with added .py suffix.
- code = replace_filename_in_code_object(code, co_filename)
- # These module entries are loaded and executed within the bootloader, which requires only the code
- # object, without the PYC header.
- return self._write_blob(fp, marshal.dumps(code), dest_name, typecode, compress=compress)
- elif typecode == 'n':
- # Symbolic link; store target name (as NULL-terminated string)
- data = src_name.encode('utf-8') + b'\x00'
- return self._write_blob(fp, data, dest_name, typecode, compress=compress)
- else:
- return self._write_file(fp, src_name, dest_name, typecode, compress=compress)
-
- def _write_blob(self, out_fp, blob: bytes, dest_name, typecode, compress=False):
- """
- Write the binary contents (**blob**) of a small file to the archive and return the corresponding CArchive TOC
- entry.
- """
- data_offset = out_fp.tell()
- data_length = len(blob)
- if compress:
- blob = zlib.compress(blob, level=self._COMPRESSION_LEVEL)
- out_fp.write(blob)
-
- return (data_offset, len(blob), data_length, int(compress), typecode, dest_name)
-
- def _write_file(self, out_fp, src_name, dest_name, typecode, compress=False):
- """
- Stream copy a large file into the archive and return the corresponding CArchive TOC entry.
- """
- data_offset = out_fp.tell()
- data_length = os.stat(src_name).st_size
- with open(src_name, 'rb') as in_fp:
- if compress:
- tmp_buffer = bytearray(16 * 1024)
- compressor = zlib.compressobj(self._COMPRESSION_LEVEL)
- while True:
- num_read = in_fp.readinto(tmp_buffer)
- if not num_read:
- break
- out_fp.write(compressor.compress(tmp_buffer[:num_read]))
- out_fp.write(compressor.flush())
- else:
- shutil.copyfileobj(in_fp, out_fp)
-
- return (data_offset, out_fp.tell() - data_offset, data_length, int(compress), typecode, dest_name)
-
- @classmethod
- def _serialize_toc(cls, toc):
- serialized_toc = []
- for toc_entry in toc:
- data_offset, compressed_length, data_length, compress, typecode, name = toc_entry
-
- # Encode names as UTF-8. This should be safe as standard python modules only contain ASCII-characters (and
- # standard shared libraries should have the same), and thus the C-code still can handle this correctly.
- name = name.encode('utf-8')
- name_length = len(name) + 1 # Add 1 for string-terminating zero byte.
-
- # Ensure TOC entries are aligned on 16-byte boundary, so they can be read by bootloader (C code) on
- # platforms with strict data alignment requirements (for example linux on `armhf`/`armv7`, such as 32-bit
- # Debian Buster on Raspberry Pi).
- entry_length = cls._TOC_ENTRY_LENGTH + name_length
- if entry_length % 16 != 0:
- padding_length = 16 - (entry_length % 16)
- name_length += padding_length
-
- # Serialize
- serialized_entry = struct.pack(
- cls._TOC_ENTRY_FORMAT + f"{name_length}s", # "Ns" format automatically pads the string with zero bytes.
- cls._TOC_ENTRY_LENGTH + name_length,
- data_offset,
- compressed_length,
- data_length,
- compress,
- typecode.encode('ascii'),
- name,
- )
- serialized_toc.append(serialized_entry)
-
- return b''.join(serialized_toc)
-
-
-class SplashWriter:
- """
- Writer for the splash screen resources archive.
-
- The resulting archive is added as an entry into the CArchive with the typecode PKG_ITEM_SPLASH.
- """
- # This struct describes the splash resources as it will be in an buffer inside the bootloader. All necessary parts
- # are bundled, the *_len and *_offset fields describe the data beyond this header definition.
- # Whereas script and image fields are binary data, the requirements fields describe an array of strings. Each string
- # is null-terminated in order to easily iterate over this list from within C.
- #
- # typedef struct _splash_data_header
- # {
- # char tcl_shared_library_name[32];
- # char tk_shared_library_name[32];
- # char tcl_module_directory_name[16];
- # char tk_module_directory_name[16];
- #
- # uint32_t script_len;
- # uint32_t script_offset;
- #
- # uint32_t image_len;
- # uint32_t image_offset;
- #
- # uint32_t requirements_len;
- # uint32_t requirements_offset;
- # } SPLASH_DATA_HEADER;
- #
- _HEADER_FORMAT = '!32s 32s 16s 16s II II II'
- _HEADER_LENGTH = struct.calcsize(_HEADER_FORMAT)
-
- # The created archive is compressed by the CArchive, so no need to compress the data here.
-
- def __init__(
- self,
- filename,
- requirements_list,
- tcl_shared_library_name,
- tk_shared_library_name,
- tcl_module_directory_name,
- tk_module_directory_name,
- image,
- script,
- ):
- """
- Writer for splash screen resources that are bundled into the CArchive as a single archive/entry.
-
- :param filename: The filename of the archive to create
- :param requirements_list: List of filenames for the requirements array
- :param str tcl_shared_library_name: Basename of the Tcl shared library
- :param str tk_shared_library_name: Basename of the Tk shared library
- :param str tcl_module_directory_name: Basename of the Tcl module directory (e.g., tcl/)
- :param str tk_module_directory_name: Basename of the Tk module directory (e.g., tk/)
- :param Union[str, bytes] image: Image like object
- :param str script: The tcl/tk script to execute to create the screen.
- """
-
- # Ensure forward slashes in dependency names are on Windows converted to back slashes '\\', as on Windows the
- # bootloader works only with back slashes.
- def _normalize_filename(filename):
- filename = os.path.normpath(filename)
- if is_win and os.path.sep == '/':
- # When building under MSYS, the above path normalization uses Unix-style separators, so replace them
- # manually.
- filename = filename.replace(os.path.sep, '\\')
- return filename
-
- requirements_list = [_normalize_filename(name) for name in requirements_list]
-
- with open(filename, "wb") as fp:
- # Reserve space for the header.
- fp.write(b'\0' * self._HEADER_LENGTH)
-
- # Serialize the requirements list. This list (more an array) contains the names of all files the bootloader
- # needs to extract before the splash screen can be started. The implementation terminates every name with a
- # null-byte, that keeps the list short memory wise and makes it iterable from C.
- requirements_len = 0
- requirements_offset = fp.tell()
- for name in requirements_list:
- name = name.encode('utf-8') + b'\0'
- fp.write(name)
- requirements_len += len(name)
-
- # Write splash script
- script_offset = fp.tell()
- script_len = len(script)
- fp.write(script.encode("utf-8"))
-
- # Write splash image. If image is a bytes buffer, it is written directly into the archive. Otherwise, it
- # is assumed to be a path and the file is copied into the archive.
- image_offset = fp.tell()
- if isinstance(image, bytes):
- # Image was converted by PIL/Pillow and is already in buffer
- image_len = len(image)
- fp.write(image)
- else:
- # Read image into buffer
- with open(image, 'rb') as image_fp:
- image_data = image_fp.read()
- image_len = len(image_data)
- fp.write(image_data)
- del image_data
-
- # The following strings are written to 16-character fields with zero-padding, which means that we need to
- # ensure that their length is strictly below 16 characters (if it were exactly 16, the field would have no
- # terminating NULL character!).
- def _encode_str(value, field_name, limit):
- enc_value = value.encode("utf-8")
- if len(enc_value) >= limit:
- raise ValueError(
- f"Length of the encoded field {field_name!r} ({len(enc_value)}) is greater or equal to the "
- f"limit of {limit} characters!"
- )
-
- return enc_value
-
- # Write header
- header_data = struct.pack(
- self._HEADER_FORMAT,
- _encode_str(tcl_shared_library_name, 'tcl_shared_library_name', 32),
- _encode_str(tk_shared_library_name, 'tk_shared_library_name', 32),
- _encode_str(tcl_module_directory_name, 'tcl_module_directory_name', 16),
- _encode_str(tk_module_directory_name, 'tk_module_directory_name', 16),
- script_len,
- script_offset,
- image_len,
- image_offset,
- requirements_len,
- requirements_offset,
- )
-
- fp.seek(0, os.SEEK_SET)
- fp.write(header_data)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run b/venv/lib/python3.12/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run
deleted file mode 100755
index 24b1aef..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run_d b/venv/lib/python3.12/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run_d
deleted file mode 100755
index d3c2c91..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run_d and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/building/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 0894e3e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/api.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/api.cpython-312.pyc
deleted file mode 100644
index 93361a2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/api.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/build_main.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/build_main.cpython-312.pyc
deleted file mode 100644
index 325db0f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/build_main.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/datastruct.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/datastruct.cpython-312.pyc
deleted file mode 100644
index 7ffd21c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/datastruct.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/icon.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/icon.cpython-312.pyc
deleted file mode 100644
index 079e4c0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/icon.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/makespec.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/makespec.cpython-312.pyc
deleted file mode 100644
index 2772f89..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/makespec.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/osx.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/osx.cpython-312.pyc
deleted file mode 100644
index c0d19df..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/osx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/splash.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/splash.cpython-312.pyc
deleted file mode 100644
index 390b804..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/splash.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/splash_templates.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/splash_templates.cpython-312.pyc
deleted file mode 100644
index d3c7fde..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/splash_templates.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/templates.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/templates.cpython-312.pyc
deleted file mode 100644
index f5d6209..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/templates.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/utils.cpython-312.pyc
deleted file mode 100644
index 7797d7b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/building/__pycache__/utils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/api.py b/venv/lib/python3.12/site-packages/PyInstaller/building/api.py
deleted file mode 100755
index becea2c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/api.py
+++ /dev/null
@@ -1,1334 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-This module contains classes that are available for the .spec files.
-
-Spec file is generated by PyInstaller. The generated code from .spec file
-is a way how PyInstaller does the dependency analysis and creates executable.
-"""
-
-import os
-import subprocess
-import sys
-import time
-import pathlib
-import shutil
-from operator import itemgetter
-
-from PyInstaller import HOMEPATH, PLATFORM
-from PyInstaller import log as logging
-from PyInstaller.archive.writers import CArchiveWriter, ZlibArchiveWriter
-from PyInstaller.building.datastruct import Target, _check_guts_eq, normalize_pyz_toc, normalize_toc
-from PyInstaller.building.utils import (
- _check_guts_toc, _make_clean_directory, _rmtree, process_collected_binary, get_code_object, compile_pymodule
-)
-from PyInstaller.building.splash import Splash # argument type validation in EXE
-from PyInstaller.compat import is_cygwin, is_darwin, is_linux, is_win, strict_collect_mode, is_nogil, is_aix
-from PyInstaller.depend import bindepend
-from PyInstaller.depend.analysis import get_bootstrap_modules
-import PyInstaller.utils.misc as miscutils
-
-logger = logging.getLogger(__name__)
-
-if is_win:
- from PyInstaller.utils.win32 import (icon, versioninfo, winmanifest, winresource, winutils)
-
-if is_darwin:
- import PyInstaller.utils.osx as osxutils
-
-
-class PYZ(Target):
- """
- Creates a zlib-based PYZ archive that contains byte-compiled pure Python modules.
- """
- def __init__(self, *tocs, **kwargs):
- """
- tocs
- One or more TOC (Table of Contents) lists, usually an `Analysis.pure`.
-
- kwargs
- Possible keyword arguments:
-
- name
- A filename for the .pyz. Normally not needed, as the generated name will do fine.
- """
- if kwargs.get("cipher"):
- from PyInstaller.exceptions import RemovedCipherFeatureError
- raise RemovedCipherFeatureError(
- "Please remove the 'cipher' arguments to PYZ() and Analysis() in your spec file."
- )
-
- from PyInstaller.config import CONF
-
- super().__init__()
-
- name = kwargs.get('name', None)
-
- self.name = name
- if name is None:
- self.name = os.path.splitext(self.tocfilename)[0] + '.pyz'
-
- # PyInstaller bootstrapping modules.
- bootstrap_dependencies = get_bootstrap_modules()
-
- # Compile the python modules that are part of bootstrap dependencies, so that they can be collected into the
- # CArchive/PKG and imported by the bootstrap script.
- self.dependencies = []
- workpath = os.path.join(CONF['workpath'], 'localpycs')
- for name, src_path, typecode in bootstrap_dependencies:
- if typecode == 'PYMODULE':
- # Compile pymodule and include the compiled .pyc file.
- pyc_path = compile_pymodule(
- name,
- src_path,
- workpath,
- # Never optimize bootstrap dependencies!
- optimize=0,
- code_cache=None,
- )
- self.dependencies.append((name, pyc_path, typecode))
- else:
- # Include as is (extensions).
- self.dependencies.append((name, src_path, typecode))
-
- # Merge input TOC(s) and their code object dictionaries (if available). Skip the bootstrap modules, which will
- # be passed on to CArchive/PKG.
- bootstrap_module_names = set(name for name, _, typecode in self.dependencies if typecode == 'PYMODULE')
- self.toc = []
- self.code_dict = {}
- for toc in tocs:
- # Check if code cache association exists for the given TOC list
- code_cache = CONF['code_cache'].get(id(toc))
- if code_cache is not None:
- self.code_dict.update(code_cache)
-
- for entry in toc:
- name, _, typecode = entry
- # PYZ expects only PYMODULE entries (python code objects).
- assert typecode in {'PYMODULE', 'PYMODULE-1', 'PYMODULE-2'}, f"Invalid entry passed to PYZ: {entry}!"
- # Module required during bootstrap; skip to avoid collecting a duplicate.
- if name in bootstrap_module_names:
- continue
- self.toc.append(entry)
-
- # Normalize TOC
- self.toc = normalize_pyz_toc(self.toc)
-
- # Alphabetically sort the TOC to enable reproducible builds.
- self.toc.sort()
-
- self.__postinit__()
-
- _GUTS = (
- # input parameters
- ('name', _check_guts_eq),
- ('toc', _check_guts_toc),
- # no calculated/analysed values
- )
-
- def assemble(self):
- logger.info("Building PYZ (ZlibArchive) %s", self.name)
-
- # Ensure code objects are available for all modules we are about to collect.
- # NOTE: PEP-420 namespace packages (marked by src_path being set to '-') do not have code objects.
- # NOTE: `self.toc` is already sorted by names.
- archive_toc = []
- for entry in self.toc:
- name, src_path, typecode = entry
- if src_path not in {'-', None} and name not in self.code_dict:
- # The code object is not available from the ModuleGraph's cache; re-create it.
- optim_level = {'PYMODULE': 0, 'PYMODULE-1': 1, 'PYMODULE-2': 2}[typecode]
- try:
- self.code_dict[name] = get_code_object(name, src_path, optimize=optim_level)
- except SyntaxError:
- # The module was likely written for different Python version; exclude it
- continue
- archive_toc.append(entry)
-
- # Create the archive
- ZlibArchiveWriter(self.name, archive_toc, code_dict=self.code_dict)
- logger.info("Building PYZ (ZlibArchive) %s completed successfully.", self.name)
-
-
-class PKG(Target):
- """
- Creates a CArchive. CArchive is the data structure that is embedded into the executable. This data structure allows
- to include various read-only data in a single-file deployment.
- """
- xformdict = {
- # PYMODULE entries are already byte-compiled, so we do not need to encode optimization level in the low-level
- # typecodes. PYSOURCE entries are byte-compiled by the underlying writer, so we need to pass the optimization
- # level via low-level typecodes.
- 'PYMODULE': 'm',
- 'PYMODULE-1': 'm',
- 'PYMODULE-2': 'm',
- 'PYSOURCE': 's',
- 'PYSOURCE-1': 's1',
- 'PYSOURCE-2': 's2',
- 'EXTENSION': 'b',
- 'PYZ': 'z',
- 'PKG': 'a',
- 'DATA': 'x',
- 'BINARY': 'b',
- 'ZIPFILE': 'Z',
- 'EXECUTABLE': 'b',
- 'DEPENDENCY': 'd',
- 'SPLASH': 'l',
- 'SYMLINK': 'n',
- }
-
- def __init__(
- self,
- toc,
- python_lib_name,
- name=None,
- cdict=None,
- exclude_binaries=False,
- strip_binaries=False,
- upx_binaries=False,
- upx_exclude=None,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None
- ):
- """
- toc
- A TOC (Table of Contents) list.
- python_lib_name
- Name of the python shared library to store in PKG. Required by bootloader.
- name
- An optional filename for the PKG.
- cdict
- Dictionary that specifies compression by typecode. For Example, PYZ is left uncompressed so that it
- can be accessed inside the PKG. The default uses sensible values. If zlib is not available, no
- compression is used.
- exclude_binaries
- If True, EXTENSIONs and BINARYs will be left out of the PKG, and forwarded to its container (usually
- a COLLECT).
- strip_binaries
- If True, use 'strip' command to reduce the size of binary files.
- upx_binaries
- """
- super().__init__()
-
- self.toc = normalize_toc(toc) # Ensure guts contain normalized TOC
- self.python_lib_name = python_lib_name
- self.cdict = cdict
- self.name = name
- if name is None:
- self.name = os.path.splitext(self.tocfilename)[0] + '.pkg'
- self.exclude_binaries = exclude_binaries
- self.strip_binaries = strip_binaries
- self.upx_binaries = upx_binaries
- self.upx_exclude = upx_exclude or []
- self.target_arch = target_arch
- self.codesign_identity = codesign_identity
- self.entitlements_file = entitlements_file
-
- # This dict tells PyInstaller what items embedded in the executable should be compressed.
- if self.cdict is None:
- self.cdict = {
- 'EXTENSION': COMPRESSED,
- 'DATA': COMPRESSED,
- 'BINARY': COMPRESSED,
- 'EXECUTABLE': COMPRESSED,
- 'PYSOURCE': COMPRESSED,
- 'PYMODULE': COMPRESSED,
- 'SPLASH': COMPRESSED,
- # Do not compress PYZ as a whole, as it contains individually-compressed modules.
- 'PYZ': UNCOMPRESSED,
- # Do not compress target names in symbolic links.
- 'SYMLINK': UNCOMPRESSED,
- }
-
- self.__postinit__()
-
- _GUTS = ( # input parameters
- ('name', _check_guts_eq),
- ('cdict', _check_guts_eq),
- ('toc', _check_guts_toc), # list unchanged and no newer files
- ('python_lib_name', _check_guts_eq),
- ('exclude_binaries', _check_guts_eq),
- ('strip_binaries', _check_guts_eq),
- ('upx_binaries', _check_guts_eq),
- ('upx_exclude', _check_guts_eq),
- ('target_arch', _check_guts_eq),
- ('codesign_identity', _check_guts_eq),
- ('entitlements_file', _check_guts_eq),
- # no calculated/analysed values
- )
-
- def assemble(self):
- logger.info("Building PKG (CArchive) %s", os.path.basename(self.name))
-
- pkg_file = pathlib.Path(self.name).resolve() # Used to detect attempts at PKG feeding itself
-
- bootstrap_toc = [] # TOC containing bootstrap scripts and modules, which must not be sorted.
- archive_toc = [] # TOC containing all other elements. Sorted to enable reproducible builds.
-
- for dest_name, src_name, typecode in self.toc:
- # Ensure that the source file exists, if necessary. Skip the check for OPTION entries, where 'src_name' is
- # None. Also skip DEPENDENCY entries due to special contents of 'dest_name' and/or 'src_name'. Same for the
- # SYMLINK entries, where 'src_name' is relative target name for symbolic link.
- if typecode not in {'OPTION', 'DEPENDENCY', 'SYMLINK'}:
- if not os.path.exists(src_name):
- if strict_collect_mode:
- raise ValueError(f"Non-existent resource {src_name}, meant to be collected as {dest_name}!")
- else:
- logger.warning(
- "Ignoring non-existent resource %s, meant to be collected as %s", src_name, dest_name
- )
- continue
-
- # Detect attempt at collecting PKG into itself, as it results in and endless feeding loop and exhaustion
- # of all available storage space.
- if pathlib.Path(src_name).resolve() == pkg_file:
- raise ValueError(f"Trying to collect PKG file {src_name} into itself!")
-
- if typecode in ('BINARY', 'EXTENSION'):
- if self.exclude_binaries:
- # This is onedir-specific codepath - the EXE and consequently PKG should not be passed the Analysis'
- # `datas` and `binaries` TOCs (unless the user messes up the .spec file). However, EXTENSION entries
- # might still slip in via `PYZ.dependencies`, which are merged by EXE into its TOC and passed on to
- # PKG here. Such entries need to be passed to the parent container (the COLLECT) via
- # `PKG.dependencies`.
- #
- # This codepath formerly performed such pass-through only for EXTENSION entries, but in order to
- # keep code simple, we now also do it for BINARY entries. In a sane world, we do not expect to
- # encounter them here; but if they do happen to pass through here and we pass them on, the
- # container's TOC de-duplication should take care of them (same as with EXTENSION ones, really).
- self.dependencies.append((dest_name, src_name, typecode))
- else:
- # This is onefile-specific codepath. The binaries (both EXTENSION and BINARY entries) need to be
- # processed using `process_collected_binary` helper.
- src_name = process_collected_binary(
- src_name,
- dest_name,
- use_strip=self.strip_binaries,
- use_upx=self.upx_binaries,
- upx_exclude=self.upx_exclude,
- target_arch=self.target_arch,
- codesign_identity=self.codesign_identity,
- entitlements_file=self.entitlements_file,
- strict_arch_validation=(typecode == 'EXTENSION'),
- )
- archive_toc.append((dest_name, src_name, self.cdict.get(typecode, False), self.xformdict[typecode]))
- elif typecode in ('DATA', 'ZIPFILE'):
- # Same logic as above for BINARY and EXTENSION; if `exclude_binaries` is set, we are in onedir mode;
- # we should exclude DATA (and ZIPFILE) entries and instead pass them on via PKG's `dependencies`. This
- # prevents a onedir application from becoming a broken onefile one if user accidentally passes datas
- # and binaries TOCs to EXE instead of COLLECT.
- if self.exclude_binaries:
- self.dependencies.append((dest_name, src_name, typecode))
- else:
- if typecode == 'DATA' and os.access(src_name, os.X_OK):
- # DATA with executable bit set (e.g., shell script); turn into binary so that executable bit is
- # restored on the extracted file.
- carchive_typecode = 'b'
- else:
- carchive_typecode = self.xformdict[typecode]
- archive_toc.append((dest_name, src_name, self.cdict.get(typecode, False), carchive_typecode))
- elif typecode == 'OPTION':
- archive_toc.append((dest_name, '', False, 'o'))
- elif typecode in {'PYSOURCE', 'PYSOURCE-1', 'PYSOURCE-2', 'PYMODULE', 'PYMODULE-1', 'PYMODULE-2'}:
- # Collect python script and modules in a TOC that will not be sorted.
- bootstrap_toc.append((dest_name, src_name, self.cdict.get(typecode, False), self.xformdict[typecode]))
- elif typecode == 'PYZ':
- # Override PYZ name in the PKG archive into PYZ.pyz, regardless of what the original name was. The
- # bootloader looks for PYZ via the typecode and implicitly expects a single entry, so the name does
- # not matter. However, having a fixed name matters if we want reproducibility in scenarios where
- # multiple builds are performed within the same process (for example, on our CI).
- archive_toc.append(('PYZ.pyz', src_name, self.cdict.get(typecode, False), self.xformdict[typecode]))
- else:
- # PKG, DEPENDENCY, SPLASH, SYMLINK
- archive_toc.append((dest_name, src_name, self.cdict.get(typecode, False), self.xformdict[typecode]))
-
- # Sort content alphabetically by type and name to enable reproducible builds.
- archive_toc.sort(key=itemgetter(3, 0))
- # Do *not* sort modules and scripts, as their order is important.
- # TODO: Think about having all modules first and then all scripts.
- CArchiveWriter(self.name, bootstrap_toc + archive_toc, pylib_name=self.python_lib_name)
-
- logger.info("Building PKG (CArchive) %s completed successfully.", os.path.basename(self.name))
-
-
-class EXE(Target):
- """
- Creates the final executable of the frozen app. This bundles all necessary files together.
- """
- def __init__(self, *args, **kwargs):
- """
- args
- One or more arguments that are either an instance of `Target` or an iterable representing TOC list.
- kwargs
- Possible keyword arguments:
-
- bootloader_ignore_signals
- Non-Windows only. If True, the bootloader process will ignore all ignorable signals. If False (default),
- it will forward all signals to the child process. Useful in situations where for example a supervisor
- process signals both the bootloader and the child (e.g., via a process group) to avoid signalling the
- child twice.
- console
- On Windows or macOS governs whether to use the console executable or the windowed executable. Always
- True on Linux/Unix (always console executable - it does not matter there).
- hide_console
- Windows only. In console-enabled executable, hide or minimize the console window if the program owns the
- console window (i.e., was not launched from existing console window). Depending on the setting, the
- console is hidden/mininized either early in the bootloader execution ('hide-early', 'minimize-early') or
- late in the bootloader execution ('hide-late', 'minimize-late'). The early option takes place as soon as
- the PKG archive is found. In onefile builds, the late option takes place after application has unpacked
- itself and before it launches the child process. In onedir builds, the late option takes place before
- starting the embedded python interpreter.
- disable_windowed_traceback
- Disable traceback dump of unhandled exception in windowed (noconsole) mode (Windows and macOS only),
- and instead display a message that this feature is disabled.
- debug
- Setting to True gives you progress messages from the executable (for console=False there will be
- annoying MessageBoxes on Windows).
- name
- The filename for the executable. On Windows suffix '.exe' is appended.
- exclude_binaries
- Forwarded to the PKG the EXE builds.
- icon
- Windows and macOS only. icon='myicon.ico' to use an icon file or icon='notepad.exe,0' to grab an icon
- resource. Defaults to use PyInstaller's console or windowed icon. Use icon=`NONE` to not add any icon.
- version
- Windows only. version='myversion.txt'. Use grab_version.py to get a version resource from an executable
- and then edit the output to create your own. (The syntax of version resources is so arcane that I would
- not attempt to write one from scratch).
- uac_admin
- Windows only. Setting to True creates a Manifest with will request elevation upon application start.
- uac_uiaccess
- Windows only. Setting to True allows an elevated application to work with Remote Desktop.
- argv_emulation
- macOS only. Enables argv emulation in macOS .app bundles (i.e., windowed bootloader). If enabled, the
- initial open document/URL Apple Events are intercepted by bootloader and converted into sys.argv.
- target_arch
- macOS only. Used to explicitly specify the target architecture; either single-arch ('x86_64' or 'arm64')
- or 'universal2'. Used in checks that the collected binaries contain the requires arch slice(s) and/or
- to convert fat binaries into thin ones as necessary. If not specified (default), a single-arch build
- corresponding to running architecture is assumed.
- codesign_identity
- macOS only. Use the provided identity to sign collected binaries and the generated executable. If
- signing identity is not provided, ad-hoc signing is performed.
- entitlements_file
- macOS only. Optional path to entitlements file to use with code signing of collected binaries
- (--entitlements option to codesign utility).
- contents_directory
- Onedir mode only. Specifies the name of the directory where all files par the executable will be placed.
- Setting the name to '.' (or '' or None) re-enables old onedir layout without contents directory.
- """
- from PyInstaller.config import CONF
-
- super().__init__()
-
- # Available options for EXE in .spec files.
- self.exclude_binaries = kwargs.get('exclude_binaries', False)
- self.bootloader_ignore_signals = kwargs.get('bootloader_ignore_signals', False)
- self.console = kwargs.get('console', True)
- self.hide_console = kwargs.get('hide_console', None)
- self.disable_windowed_traceback = kwargs.get('disable_windowed_traceback', False)
- self.debug = kwargs.get('debug', False)
- self.name = kwargs.get('name', None)
- self.icon = kwargs.get('icon', None)
- self.versrsrc = kwargs.get('version', None)
- self.manifest = kwargs.get('manifest', None)
- self.resources = kwargs.get('resources', [])
- self.strip = kwargs.get('strip', False)
- self.upx_exclude = kwargs.get("upx_exclude", [])
- self.runtime_tmpdir = kwargs.get('runtime_tmpdir', None)
- self.contents_directory = kwargs.get("contents_directory", "_internal")
- # If ``append_pkg`` is false, the archive will not be appended to the exe, but copied beside it.
- self.append_pkg = kwargs.get('append_pkg', True)
-
- # On Windows allows the exe to request admin privileges.
- self.uac_admin = kwargs.get('uac_admin', False)
- self.uac_uiaccess = kwargs.get('uac_uiaccess', False)
-
- # macOS argv emulation
- self.argv_emulation = kwargs.get('argv_emulation', False)
-
- # Target architecture (macOS only)
- self.target_arch = kwargs.get('target_arch', None)
- if is_darwin:
- if self.target_arch is None:
- import platform
- self.target_arch = platform.machine()
- else:
- assert self.target_arch in {'x86_64', 'arm64', 'universal2'}, \
- f"Unsupported target arch: {self.target_arch}"
- logger.info("EXE target arch: %s", self.target_arch)
- else:
- self.target_arch = None # explicitly disable
-
- # Code signing identity (macOS only)
- self.codesign_identity = kwargs.get('codesign_identity', None)
- if is_darwin:
- logger.info("Code signing identity: %s", self.codesign_identity)
- else:
- self.codesign_identity = None # explicitly disable
- # Code signing entitlements
- self.entitlements_file = kwargs.get('entitlements_file', None)
-
- # UPX needs to be both available and enabled for the target.
- self.upx = CONF['upx_available'] and kwargs.get('upx', False)
-
- # Catch and clear options that are unsupported on specific platforms.
- if self.versrsrc and not is_win:
- logger.warning('Ignoring version information; supported only on Windows!')
- self.versrsrc = None
- if self.manifest and not is_win:
- logger.warning('Ignoring manifest; supported only on Windows!')
- self.manifest = None
- if self.resources and not is_win:
- logger.warning('Ignoring resources; supported only on Windows!')
- self.resources = []
- if self.icon and not (is_win or is_darwin):
- logger.warning('Ignoring icon; supported only on Windows and macOS!')
- self.icon = None
- if self.hide_console and not is_win:
- logger.warning('Ignoring hide_console; supported only on Windows!')
- self.hide_console = None
-
- if self.contents_directory in ("", "."):
- self.contents_directory = None # Re-enable old onedir layout without contents directory.
- elif self.contents_directory == ".." or "/" in self.contents_directory or "\\" in self.contents_directory:
- raise SystemExit(
- f'ERROR: Invalid value "{self.contents_directory}" passed to `--contents-directory` or '
- '`contents_directory`. Exactly one directory level is required (or just "." to disable the '
- 'contents directory).'
- )
-
- if not kwargs.get('embed_manifest', True):
- from PyInstaller.exceptions import RemovedExternalManifestError
- raise RemovedExternalManifestError(
- "Please remove the 'embed_manifest' argument to EXE() in your spec file."
- )
-
- # Old .spec format included in 'name' the path where to put created app. New format includes only exename.
- #
- # Ignore fullpath in the 'name' and prepend DISTPATH or WORKPATH.
- # DISTPATH - onefile
- # WORKPATH - onedir
- if self.exclude_binaries:
- # onedir mode - create executable in WORKPATH.
- self.name = os.path.join(CONF['workpath'], os.path.basename(self.name))
- else:
- # onefile mode - create executable in DISTPATH.
- self.name = os.path.join(CONF['distpath'], os.path.basename(self.name))
-
- # Old .spec format included on Windows in 'name' .exe suffix.
- if is_win or is_cygwin:
- # Append .exe suffix if it is not already there.
- if not self.name.endswith('.exe'):
- self.name += '.exe'
- base_name = os.path.splitext(os.path.basename(self.name))[0]
- else:
- base_name = os.path.basename(self.name)
- # Create the CArchive PKG in WORKPATH. When instancing PKG(), set name so that guts check can test whether the
- # file already exists.
- self.pkgname = os.path.join(CONF['workpath'], base_name + '.pkg')
-
- self.toc = []
-
- for arg in args:
- # Valid arguments: PYZ object, Splash object, and TOC-list iterables
- if isinstance(arg, (PYZ, Splash)):
- # Add object as an entry to the TOC, and merge its dependencies TOC
- if isinstance(arg, PYZ):
- self.toc.append((os.path.basename(arg.name), arg.name, "PYZ"))
- else:
- self.toc.append((os.path.basename(arg.name), arg.name, "SPLASH"))
- self.toc.extend(arg.dependencies)
- elif miscutils.is_iterable(arg):
- # TOC-like iterable
- self.toc.extend(arg)
- else:
- raise TypeError(f"Invalid argument type for EXE: {type(arg)!r}")
-
- if is_nogil:
- # Signal to bootloader that python was built with Py_GIL_DISABLED, in order to select correct `PyConfig`
- # structure layout at run-time.
- self.toc.append(("pyi-python-flag Py_GIL_DISABLED", "", "OPTION"))
-
- if self.runtime_tmpdir is not None:
- self.toc.append(("pyi-runtime-tmpdir " + self.runtime_tmpdir, "", "OPTION"))
-
- if self.bootloader_ignore_signals:
- # no value; presence means "true"
- self.toc.append(("pyi-bootloader-ignore-signals", "", "OPTION"))
-
- if self.disable_windowed_traceback:
- # no value; presence means "true"
- self.toc.append(("pyi-disable-windowed-traceback", "", "OPTION"))
-
- if self.argv_emulation:
- # no value; presence means "true"
- self.toc.append(("pyi-macos-argv-emulation", "", "OPTION"))
-
- if self.contents_directory:
- self.toc.append(("pyi-contents-directory " + self.contents_directory, "", "OPTION"))
-
- if self.hide_console:
- # Validate the value
- _HIDE_CONSOLE_VALUES = {'hide-early', 'minimize-early', 'hide-late', 'minimize-late'}
- self.hide_console = self.hide_console.lower()
- if self.hide_console not in _HIDE_CONSOLE_VALUES:
- raise ValueError(
- f"Invalid hide_console value: {self.hide_console}! Allowed values: {_HIDE_CONSOLE_VALUES}"
- )
- self.toc.append((f"pyi-hide-console {self.hide_console}", "", "OPTION"))
-
- # If the icon path is relative, make it relative to the .spec file.
- if self.icon and self.icon != "NONE":
- if isinstance(self.icon, list):
- self.icon = [self._makeabs(ic) for ic in self.icon]
- else:
- self.icon = [self._makeabs(self.icon)]
-
- if is_win:
- if not self.icon:
- # --icon not specified; use default from bootloader folder
- if self.console:
- ico = 'icon-console.ico'
- else:
- ico = 'icon-windowed.ico'
- self.icon = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'bootloader', 'images', ico)
-
- # Prepare manifest for the executable by creating minimal manifest or modifying the supplied one.
- if self.manifest:
- # Determine if we were given a filename or an XML string.
- if "<" in self.manifest:
- self.manifest = self.manifest.encode("utf-8")
- else:
- self.manifest = self._makeabs(self.manifest)
- with open(self.manifest, "rb") as fp:
- self.manifest = fp.read()
- self.manifest = winmanifest.create_application_manifest(self.manifest, self.uac_admin, self.uac_uiaccess)
-
- if self.versrsrc:
- if isinstance(self.versrsrc, versioninfo.VSVersionInfo):
- # We were passed a valid versioninfo.VSVersionInfo structure
- pass
- elif isinstance(self.versrsrc, (str, bytes, os.PathLike)):
- # File path; either absolute, or relative to the spec file
- self.versrsrc = self._makeabs(self.versrsrc)
- logger.debug("Loading version info from file: %r", self.versrsrc)
- self.versrsrc = versioninfo.load_version_info_from_text_file(self.versrsrc)
- else:
- raise TypeError(f"Unsupported type for version info argument: {type(self.versrsrc)!r}")
-
- # Identify python shared library. This is needed both for PKG (where we need to store the name so that
- # bootloader can look it up), and for macOS-specific processing of the generated executable (adjusting the SDK
- # version).
- #
- # NOTE: we already performed an equivalent search (using the same `get_python_library_path` helper) during the
- # analysis stage to ensure that the python shared library is collected. Unfortunately, with the way data passing
- # works in onedir builds, we cannot look up the value in the TOC at this stage, and we need to search again.
- self.python_lib = bindepend.get_python_library_path()
- if self.python_lib is None:
- from PyInstaller.exceptions import PythonLibraryNotFoundError
- raise PythonLibraryNotFoundError()
-
- # On AIX, the python shared library might in fact be an ar archive with shared object inside it, and needs to
- # be `dlopen`'ed with full name (for example, `libpython3.9.a(libpython3.9.so)`. So if the library's suffix is
- # .a, adjust the name accordingly, assuming fixed format for the shared object name. NOTE: the information about
- # shared object name is in fact available from `ldd` but not propagated from our binary dependency analysis. If
- # we ever need to determine the shared object's name dynamically, we could write a simple ar parser, based on
- # information from `https://www.ibm.com/docs/en/aix/7.3?topic=formats-ar-file-format-big`.
- if is_aix:
- _, ext = os.path.splitext(self.python_lib)
- if ext == '.a':
- _py_major, _py_minor = sys.version_info[:2]
- self.python_lib += f"(libpython{_py_major}.{_py_minor}.so)"
-
- # Normalize TOC
- self.toc = normalize_toc(self.toc)
-
- self.pkg = PKG(
- toc=self.toc,
- python_lib_name=os.path.basename(self.python_lib),
- name=self.pkgname,
- cdict=kwargs.get('cdict', None),
- exclude_binaries=self.exclude_binaries,
- strip_binaries=self.strip,
- upx_binaries=self.upx,
- upx_exclude=self.upx_exclude,
- target_arch=self.target_arch,
- codesign_identity=self.codesign_identity,
- entitlements_file=self.entitlements_file
- )
- self.dependencies = self.pkg.dependencies
-
- # Get the path of the bootloader and store it in a TOC, so it can be checked for being changed.
- exe = self._bootloader_file('run', '.exe' if is_win or is_cygwin else '')
- self.exefiles = [(os.path.basename(exe), exe, 'EXECUTABLE')]
-
- self.__postinit__()
-
- _GUTS = (
- # input parameters
- ('name', _check_guts_eq),
- ('console', _check_guts_eq),
- ('debug', _check_guts_eq),
- ('exclude_binaries', _check_guts_eq),
- ('icon', _check_guts_eq),
- ('versrsrc', _check_guts_eq),
- ('uac_admin', _check_guts_eq),
- ('uac_uiaccess', _check_guts_eq),
- ('manifest', _check_guts_eq),
- ('append_pkg', _check_guts_eq),
- ('argv_emulation', _check_guts_eq),
- ('target_arch', _check_guts_eq),
- ('codesign_identity', _check_guts_eq),
- ('entitlements_file', _check_guts_eq),
- # for the case the directory is shared between platforms:
- ('pkgname', _check_guts_eq),
- ('toc', _check_guts_eq),
- ('resources', _check_guts_eq),
- ('strip', _check_guts_eq),
- ('upx', _check_guts_eq),
- ('mtm', None), # checked below
- # derived values
- ('exefiles', _check_guts_toc),
- ('python_lib', _check_guts_eq),
- )
-
- def _check_guts(self, data, last_build):
- if not os.path.exists(self.name):
- logger.info("Rebuilding %s because %s missing", self.tocbasename, os.path.basename(self.name))
- return True
- if not self.append_pkg and not os.path.exists(self.pkgname):
- logger.info("Rebuilding because %s missing", os.path.basename(self.pkgname))
- return True
-
- if Target._check_guts(self, data, last_build):
- return True
-
- mtm = data['mtm']
- if mtm != miscutils.mtime(self.name):
- logger.info("Rebuilding %s because mtimes don't match", self.tocbasename)
- return True
- if mtm < miscutils.mtime(self.pkg.tocfilename):
- logger.info("Rebuilding %s because pkg is more recent", self.tocbasename)
- return True
-
- return False
-
- @staticmethod
- def _makeabs(path):
- """
- Helper for anchoring relative paths to spec file location.
- """
- from PyInstaller.config import CONF
- if os.path.isabs(path):
- return path
- else:
- return os.path.join(CONF['specpath'], path)
-
- def _bootloader_file(self, exe, extension=None):
- """
- Pick up the right bootloader file - debug, console, windowed.
- """
- # Having console/windowed bootloader makes sense only on Windows and macOS.
- if is_win or is_darwin:
- if not self.console:
- exe = exe + 'w'
- # There are two types of bootloaders:
- # run - release, no verbose messages in console.
- # run_d - contains verbose messages in console.
- if self.debug:
- exe = exe + '_d'
- if extension:
- exe = exe + extension
- bootloader_file = os.path.join(HOMEPATH, 'PyInstaller', 'bootloader', PLATFORM, exe)
- logger.info('Bootloader %s' % bootloader_file)
- return bootloader_file
-
- def assemble(self):
- # On Windows, we used to append .notanexecutable to the intermediate/temporary file name to (attempt to)
- # prevent interference from anti-virus programs with the build process (see #6467). This is now disabled
- # as we wrap all processing steps that modify the executable in the `_retry_operation` helper; however,
- # we keep around the `build_name` variable instead of directly using `self.name`, just in case we need
- # to re-enable it...
- build_name = self.name
-
- logger.info("Building EXE from %s", self.tocbasename)
- if os.path.exists(self.name):
- if os.path.isdir(self.name):
- _rmtree(self.name) # will prompt for confirmation if --noconfirm is not given
- else:
- os.remove(self.name)
- if not os.path.exists(os.path.dirname(self.name)):
- os.makedirs(os.path.dirname(self.name))
- bootloader_exe = self.exefiles[0][1] # pathname of bootloader
- if not os.path.exists(bootloader_exe):
- raise SystemExit(_MISSING_BOOTLOADER_ERRORMSG)
-
- # Step 1: copy the bootloader file, and perform any operations that need to be done prior to appending the PKG.
- logger.info("Copying bootloader EXE to %s", build_name)
- self._retry_operation(shutil.copyfile, bootloader_exe, build_name)
- self._retry_operation(os.chmod, build_name, 0o755)
-
- if is_win:
- # First, remove all resources from the file. This ensures that no manifest is embedded, even if bootloader
- # was compiled with a toolchain that forcibly embeds a default manifest (e.g., mingw toolchain from msys2).
- self._retry_operation(winresource.remove_all_resources, build_name)
- # Embed icon.
- if self.icon != "NONE":
- logger.info("Copying icon to EXE")
- self._retry_operation(icon.CopyIcons, build_name, self.icon)
- # Embed version info.
- if self.versrsrc:
- logger.info("Copying version information to EXE")
- self._retry_operation(versioninfo.write_version_info_to_executable, build_name, self.versrsrc)
- # Embed/copy other resources.
- logger.info("Copying %d resources to EXE", len(self.resources))
- for resource in self.resources:
- self._retry_operation(self._copy_windows_resource, build_name, resource)
- # Embed the manifest into the executable.
- logger.info("Embedding manifest in EXE")
- self._retry_operation(winmanifest.write_manifest_to_executable, build_name, self.manifest)
- elif is_darwin:
- # Convert bootloader to the target arch
- logger.info("Converting EXE to target arch (%s)", self.target_arch)
- osxutils.binary_to_target_arch(build_name, self.target_arch, display_name='Bootloader EXE')
-
- # Step 2: append the PKG, if necessary
- if self.append_pkg:
- append_file = self.pkg.name # Append PKG
- append_type = 'PKG archive' # For debug messages
- else:
- # In onefile mode, copy the stand-alone PKG next to the executable. In onedir, this will be done by the
- # COLLECT() target.
- if not self.exclude_binaries:
- pkg_dst = os.path.join(os.path.dirname(build_name), os.path.basename(self.pkgname))
- logger.info("Copying stand-alone PKG archive from %s to %s", self.pkg.name, pkg_dst)
- shutil.copyfile(self.pkg.name, pkg_dst)
- else:
- logger.info("Stand-alone PKG archive will be handled by COLLECT")
-
- # The bootloader requires package side-loading to be explicitly enabled, which is done by embedding custom
- # signature to the executable. This extra signature ensures that the sideload-enabled executable is at least
- # slightly different from the stock bootloader executables, which should prevent antivirus programs from
- # flagging our stock bootloaders due to sideload-enabled applications in the wild.
-
- # Write to temporary file
- pkgsig_file = self.pkg.name + '.sig'
- with open(pkgsig_file, "wb") as f:
- # 8-byte MAGIC; slightly changed PKG MAGIC pattern
- f.write(b'MEI\015\013\012\013\016')
-
- append_file = pkgsig_file # Append PKG-SIG
- append_type = 'PKG sideload signature' # For debug messages
-
- if is_linux:
- # Linux: append data into custom ELF section using objcopy.
- logger.info("Appending %s to custom ELF section in EXE", append_type)
- cmd = ['objcopy', '--add-section', f'pydata={append_file}', build_name]
- p = subprocess.run(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, encoding='utf-8')
- if p.returncode:
- raise SystemError(f"objcopy Failure: {p.returncode} {p.stdout}")
-
- elif is_darwin:
- # macOS: remove signature, append data, and fix-up headers so that the appended data appears to be part of
- # the executable (which is required by strict validation during code-signing).
-
- # Strip signatures from all arch slices. Strictly speaking, we need to remove signature (if present) from
- # the last slice, because we will be appending data to it. When building universal2 bootloaders natively on
- # macOS, only arm64 slices have a (dummy) signature. However, when cross-compiling with osxcross, we seem to
- # get dummy signatures on both x86_64 and arm64 slices. While the former should not have any impact, it does
- # seem to cause issues with further binary signing using real identity. Therefore, we remove all signatures
- # and re-sign the binary using dummy signature once the data is appended.
- logger.info("Removing signature(s) from EXE")
- osxutils.remove_signature_from_binary(build_name)
-
- # Fix Mach-O image UUID(s) in executable to ensure uniqueness across different builds.
- # NOTE: even if PKG is side-loaded, use the hash of its contents to generate the new UUID.
- # NOTE: this step is performed *before* PKG is appended and sizes are fixed in the executable's headers;
- # this ensures that we are operating only on original header size instead of enlarged one (which could
- # be significantly larger in large onefile builds).
- logger.info("Modifying Mach-O image UUID(s) in EXE")
- osxutils.update_exe_identifier(build_name, self.pkg.name)
-
- # Append the data
- logger.info("Appending %s to EXE", append_type)
- self._append_data_to_exe(build_name, append_file)
-
- # Fix Mach-O headers
- logger.info("Fixing EXE headers for code signing")
- osxutils.fix_exe_for_code_signing(build_name)
- else:
- # Fall back to just appending data at the end of the file
- logger.info("Appending %s to EXE", append_type)
- self._retry_operation(self._append_data_to_exe, build_name, append_file)
-
- # Step 3: post-processing
- if is_win:
- # Set checksum to appease antiviral software. Also set build timestamp to current time to increase entropy
- # (but honor SOURCE_DATE_EPOCH environment variable for reproducible builds).
- logger.info("Fixing EXE headers")
- build_timestamp = int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
- self._retry_operation(winutils.set_exe_build_timestamp, build_name, build_timestamp)
- self._retry_operation(winutils.update_exe_pe_checksum, build_name)
- elif is_darwin:
- # If the version of macOS SDK used to build bootloader exceeds that of macOS SDK used to built Python
- # library (and, by extension, bundled Tcl/Tk libraries), force the version declared by the frozen executable
- # to match that of the Python library.
- # Having macOS attempt to enable new features (based on SDK version) for frozen application has no benefit
- # if the Python library does not support them as well.
- # On the other hand, there seem to be UI issues in tkinter due to failed or partial enablement of dark mode
- # (i.e., the bootloader executable being built against SDK 10.14 or later, which causes macOS to enable dark
- # mode, and Tk libraries being built against an earlier SDK version that does not support the dark mode).
- # With python.org Intel macOS installers, this manifests as black Tk windows and UI elements (see issue
- # #5827), while in Anaconda python, it may result in white text on bright background.
- pylib_version = osxutils.get_macos_sdk_version(self.python_lib)
- exe_version = osxutils.get_macos_sdk_version(build_name)
- if pylib_version < exe_version:
- logger.info(
- "Rewriting the executable's macOS SDK version (%d.%d.%d) to match the SDK version of the Python "
- "library (%d.%d.%d) in order to avoid inconsistent behavior and potential UI issues in the "
- "frozen application.", *exe_version, *pylib_version
- )
- osxutils.set_macos_sdk_version(build_name, *pylib_version)
-
- # Re-sign the binary (either ad-hoc or using real identity, if provided).
- logger.info("Re-signing the EXE")
- osxutils.sign_binary(build_name, self.codesign_identity, self.entitlements_file)
-
- # Ensure executable flag is set
- self._retry_operation(os.chmod, build_name, 0o755)
- # Get mtime for storing into the guts
- self.mtm = self._retry_operation(miscutils.mtime, build_name)
- if build_name != self.name:
- self._retry_operation(os.rename, build_name, self.name)
- logger.info("Building EXE from %s completed successfully.", self.tocbasename)
-
- def _copy_windows_resource(self, build_name, resource_spec):
- import pefile
-
- # Helper for optionally converting integer strings to values; resource types and IDs/names can be specified as
- # either numeric values or custom strings...
- def _to_int(value):
- try:
- return int(value)
- except Exception:
- return value
-
- logger.debug("Processing resource: %r", resource_spec)
- resource = resource_spec.split(",") # filename,[type],[name],[language]
-
- if len(resource) < 1 or len(resource) > 4:
- raise ValueError(
- f"Invalid Windows resource specifier {resource_spec!r}! "
- f"Must be in format 'filename,[type],[name],[language]'!"
- )
-
- # Anchor resource file to spec file location, if necessary.
- src_filename = self._makeabs(resource[0])
-
- # Ensure file exists.
- if not os.path.isfile(src_filename):
- raise ValueError(f"Resource file {src_filename!r} does not exist!")
-
- # Check if src_filename points to a PE file or an arbitrary (data) file.
- try:
- with pefile.PE(src_filename, fast_load=True):
- is_pe_file = True
- except Exception:
- is_pe_file = False
-
- if is_pe_file:
- # If resource file is PE file, copy all resources from it, subject to specified type, name, and language.
- logger.debug("Resource file %r is a PE file...", src_filename)
-
- # Resource type, name, and language serve as filters. If not specified, use "*".
- resource_type = _to_int(resource[1]) if len(resource) >= 2 else "*"
- resource_name = _to_int(resource[2]) if len(resource) >= 3 else "*"
- resource_lang = _to_int(resource[3]) if len(resource) >= 4 else "*"
-
- try:
- winresource.copy_resources_from_pe_file(
- build_name,
- src_filename,
- [resource_type],
- [resource_name],
- [resource_lang],
- )
- except Exception as e:
- raise IOError(f"Failed to copy resources from PE file {src_filename!r}") from e
- else:
- logger.debug("Resource file %r is an arbitrary data file...", src_filename)
-
- # For arbitrary data file, resource type and name need to be provided.
- if len(resource) < 3:
- raise ValueError(
- f"Invalid Windows resource specifier {resource_spec!r}! "
- f"For arbitrary data file, the format is 'filename,type,name,[language]'!"
- )
-
- resource_type = _to_int(resource[1])
- resource_name = _to_int(resource[2])
- resource_lang = _to_int(resource[3]) if len(resource) >= 4 else 0 # LANG_NEUTRAL
-
- # Prohibit wildcards for resource type and name.
- if resource_type == "*":
- raise ValueError(
- f"Invalid Windows resource specifier {resource_spec!r}! "
- f"For arbitrary data file, resource type cannot be a wildcard (*)!"
- )
- if resource_name == "*":
- raise ValueError(
- f"Invalid Windows resource specifier {resource_spec!r}! "
- f"For arbitrary data file, resource ma,e cannot be a wildcard (*)!"
- )
-
- try:
- with open(src_filename, 'rb') as fp:
- data = fp.read()
-
- winresource.add_or_update_resource(
- build_name,
- data,
- resource_type,
- [resource_name],
- [resource_lang],
- )
- except Exception as e:
- raise IOError(f"Failed to embed data file {src_filename!r} as Windows resource") from e
-
- def _append_data_to_exe(self, build_name, append_file):
- with open(build_name, 'ab') as outf:
- with open(append_file, 'rb') as inf:
- shutil.copyfileobj(inf, outf, length=64 * 1024)
-
- @staticmethod
- def _retry_operation(func, *args, max_attempts=20):
- """
- Attempt to execute the given function `max_attempts` number of times while catching exceptions that are usually
- associated with Windows anti-virus programs temporarily locking the access to the executable.
- """
- def _is_allowed_exception(e):
- """
- Helper to determine whether the given exception is eligible for retry or not.
- """
- if isinstance(e, PermissionError):
- # Always retry on all instances of PermissionError
- return True
- elif is_win:
- from PyInstaller.compat import pywintypes
-
- # Windows-specific errno and winerror codes.
- # https://learn.microsoft.com/en-us/cpp/c-runtime-library/errno-constants
- _ALLOWED_ERRNO = {
- 13, # EACCES (would typically be a PermissionError instead)
- 22, # EINVAL (reported to be caused by Crowdstrike; see #7840)
- }
- # https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
- _ALLOWED_WINERROR = {
- 5, # ERROR_ACCESS_DENIED (reported in #7825)
- 32, # ERROR_SHARING_VIOLATION (exclusive lock via `CreateFileW` flags, or via `_locked`).
- 110, # ERROR_OPEN_FAILED (reported in #8138)
- }
- if isinstance(e, OSError):
- # For OSError exceptions other than PermissionError, validate errno.
- if e.errno in _ALLOWED_ERRNO:
- return True
- # OSError typically translates `winerror` into `errno` equivalent; but try to match the original
- # values as a fall back, just in case. `OSError.winerror` attribute exists only on Windows.
- if e.winerror in _ALLOWED_WINERROR:
- return True
- elif isinstance(e, pywintypes.error):
- # pywintypes.error is raised by helper functions that use win32 C API bound via pywin32-ctypes.
- if e.winerror in _ALLOWED_WINERROR:
- return True
- return False
-
- func_name = func.__name__
- for attempt in range(max_attempts):
- try:
- return func(*args)
- except Exception as e:
- # Check if exception is eligible for retry; if not, also check its immediate cause (in case the
- # exception was thrown from an eligible exception).
- if not _is_allowed_exception(e) and not _is_allowed_exception(e.__context__):
- raise
-
- # Retry after sleep (unless this was our last attempt)
- if attempt < max_attempts - 1:
- sleep_duration = 1 / (max_attempts - 1 - attempt)
- logger.warning(
- f"Execution of {func_name!r} failed on attempt #{attempt + 1} / {max_attempts}: {e!r}. "
- f"Retrying in {sleep_duration:.2f} second(s)..."
- )
- time.sleep(sleep_duration)
- else:
- logger.warning(
- f"Execution of {func_name!r} failed on attempt #{attempt + 1} / {max_attempts}: {e!r}."
- )
- raise RuntimeError(f"Execution of {func_name!r} failed - no more attempts left!") from e
-
-
-class COLLECT(Target):
- """
- In one-dir mode creates the output folder with all necessary files.
- """
- def __init__(self, *args, **kwargs):
- """
- args
- One or more arguments that are either an instance of `Target` or an iterable representing TOC list.
- kwargs
- Possible keyword arguments:
-
- name
- The name of the directory to be built.
- """
- from PyInstaller.config import CONF
-
- super().__init__()
-
- self.strip_binaries = kwargs.get('strip', False)
- self.upx_exclude = kwargs.get("upx_exclude", [])
- self.console = True
- self.target_arch = None
- self.codesign_identity = None
- self.entitlements_file = None
-
- # UPX needs to be both available and enabled for the taget.
- self.upx_binaries = CONF['upx_available'] and kwargs.get('upx', False)
-
- # The `name` should be the output directory name, without the parent path (the directory is created in the
- # DISTPATH). Old .spec formats included parent path, so strip it away.
- self.name = os.path.join(CONF['distpath'], os.path.basename(kwargs.get('name')))
-
- for arg in args:
- if isinstance(arg, EXE):
- self.contents_directory = arg.contents_directory
- break
- else:
- raise ValueError("No EXE() instance was passed to COLLECT()")
-
- self.toc = []
- for arg in args:
- # Valid arguments: EXE object and TOC-like iterables
- if isinstance(arg, EXE):
- # Add EXE as an entry to the TOC, and merge its dependencies TOC
- self.toc.append((os.path.basename(arg.name), arg.name, 'EXECUTABLE'))
- self.toc.extend(arg.dependencies)
- # Inherit settings
- self.console = arg.console
- self.target_arch = arg.target_arch
- self.codesign_identity = arg.codesign_identity
- self.entitlements_file = arg.entitlements_file
- # Search for the executable's external manifest, and collect it if available
- for dest_name, src_name, typecode in arg.toc:
- if dest_name == os.path.basename(arg.name) + ".manifest":
- self.toc.append((dest_name, src_name, typecode))
- # If PKG is not appended to the executable, we need to collect it.
- if not arg.append_pkg:
- self.toc.append((os.path.basename(arg.pkgname), arg.pkgname, 'PKG'))
- elif miscutils.is_iterable(arg):
- # TOC-like iterable
- self.toc.extend(arg)
- else:
- raise TypeError(f"Invalid argument type for COLLECT: {type(arg)!r}")
-
- # Normalize TOC
- self.toc = normalize_toc(self.toc)
-
- self.__postinit__()
-
- _GUTS = (
- # COLLECT always builds, we just want the TOC to be written out.
- ('toc', None),
- )
-
- def _check_guts(self, data, last_build):
- # COLLECT always needs to be executed, in order to clean the output directory.
- return True
-
- def assemble(self):
- _make_clean_directory(self.name)
- logger.info("Building COLLECT %s", self.tocbasename)
- for dest_name, src_name, typecode in self.toc:
- # Ensure that the source file exists, if necessary. Skip the check for DEPENDENCY entries due to special
- # contents of 'dest_name' and/or 'src_name'. Same for the SYMLINK entries, where 'src_name' is relative
- # target name for symbolic link.
- if typecode not in {'DEPENDENCY', 'SYMLINK'} and not os.path.exists(src_name):
- # If file is contained within python egg, it will be added with the egg.
- if strict_collect_mode:
- raise ValueError(f"Non-existent resource {src_name}, meant to be collected as {dest_name}!")
- else:
- logger.warning(
- "Ignoring non-existent resource %s, meant to be collected as %s", src_name, dest_name
- )
- continue
- # Disallow collection outside of the dist directory.
- if os.pardir in os.path.normpath(dest_name).split(os.sep) or os.path.isabs(dest_name):
- raise SystemExit(
- 'ERROR: attempting to store file outside of the dist directory: %r. Aborting.' % dest_name
- )
- # Create parent directory structure, if necessary
- if typecode in ("EXECUTABLE", "PKG"):
- dest_path = os.path.join(self.name, dest_name)
- else:
- dest_path = os.path.join(self.name, self.contents_directory or "", dest_name)
- dest_dir = os.path.dirname(dest_path)
- try:
- os.makedirs(dest_dir, exist_ok=True)
- except FileExistsError:
- raise SystemExit(
- f"ERROR: Pyinstaller needs to create a directory at {dest_dir!r}, "
- "but there already exists a file at that path!"
- )
- if typecode in ('EXTENSION', 'BINARY'):
- src_name = process_collected_binary(
- src_name,
- dest_name,
- use_strip=self.strip_binaries,
- use_upx=self.upx_binaries,
- upx_exclude=self.upx_exclude,
- target_arch=self.target_arch,
- codesign_identity=self.codesign_identity,
- entitlements_file=self.entitlements_file,
- strict_arch_validation=(typecode == 'EXTENSION'),
- )
- if typecode == 'SYMLINK':
- # On Windows, ensure that symlink target path (stored in src_name) is using Windows-style back slash
- # separators.
- if is_win and os.path.sep == '/':
- src_name = src_name.replace(os.path.sep, '\\')
-
- os.symlink(src_name, dest_path) # Create link at dest_path, pointing at (relative) src_name
- elif typecode != 'DEPENDENCY':
- # At this point, `src_name` should be a valid file.
- if not os.path.isfile(src_name):
- raise ValueError(f"Resource {src_name!r} is not a valid file!")
- # If strict collection mode is enabled, the destination should not exist yet.
- if strict_collect_mode and os.path.exists(dest_path):
- raise ValueError(
- f"Attempting to collect a duplicated file into COLLECT: {dest_name} (type: {typecode})"
- )
- # Use `shutil.copyfile` to copy file with default permissions. We do not attempt to preserve original
- # permissions nor metadata, as they might be too restrictive and cause issues either during subsequent
- # re-build attempts or when trying to move the application bundle. For binaries (and data files with
- # executable bit set), we manually set the executable bits after copying the file.
- shutil.copyfile(src_name, dest_path)
- if (
- typecode in ('EXTENSION', 'BINARY', 'EXECUTABLE')
- or (typecode == 'DATA' and os.access(src_name, os.X_OK))
- ):
- os.chmod(dest_path, 0o755)
- logger.info("Building COLLECT %s completed successfully.", self.tocbasename)
-
-
-class MERGE:
- """
- Given Analysis objects for multiple executables, replace occurrences of data and binary files with references to the
- first executable in which they occur. The actual data and binary files are then collected only once, thereby
- reducing the disk space used by multiple executables. Every executable (even onedir ones!) obtained from a
- MERGE-processed Analysis gains onefile semantics, because it needs to extract its referenced dependencies from other
- executables into temporary directory before they can run.
- """
- def __init__(self, *args):
- """
- args
- Dependencies as a list of (analysis, identifier, path_to_exe) tuples. `analysis` is an instance of
- `Analysis`, `identifier` is the basename of the entry-point script (without .py suffix), and `path_to_exe`
- is path to the corresponding executable, relative to the `dist` directory (without .exe suffix in the
- filename component). For onefile executables, `path_to_exe` is usually just executable's base name
- (e.g., `myexecutable`). For onedir executables, `path_to_exe` usually comprises both the application's
- directory name and executable name (e.g., `myapp/myexecutable`).
- """
- self._dependencies = {}
- self._symlinks = set()
-
- # Process all given (analysis, identifier, path_to_exe) tuples
- for analysis, identifier, path_to_exe in args:
- # Process analysis.binaries and analysis.datas TOCs. self._process_toc() call returns two TOCs; the first
- # contains entries that remain within this analysis, while the second contains entries that reference
- # an entry in another executable.
- binaries, binaries_refs = self._process_toc(analysis.binaries, path_to_exe)
- datas, datas_refs = self._process_toc(analysis.datas, path_to_exe)
- # Update `analysis.binaries`, `analysis.datas`, and `analysis.dependencies`.
- # The entries that are found in preceding executable(s) are removed from `binaries` and `datas`, and their
- # DEPENDENCY entry counterparts are added to `dependencies`. We cannot simply update the entries in
- # `binaries` and `datas`, because at least in theory, we need to support both onefile and onedir mode. And
- # while in onefile, `a.datas`, `a.binaries`, and `a.dependencies` are passed to `EXE` (and its `PKG`), with
- # onedir, `a.datas` and `a.binaries` need to be passed to `COLLECT` (as they were before the MERGE), while
- # `a.dependencies` needs to be passed to `EXE`. This split requires DEPENDENCY entries to be in a separate
- # TOC.
- analysis.binaries = normalize_toc(binaries)
- analysis.datas = normalize_toc(datas)
- analysis.dependencies += binaries_refs + datas_refs
-
- def _process_toc(self, toc, path_to_exe):
- # NOTE: unfortunately, these need to keep two separate lists. See the comment in the calling code on why this
- # is so.
- toc_keep = []
- toc_refs = []
- for entry in toc:
- dest_name, src_name, typecode = entry
-
- # Special handling and bookkeeping for symbolic links. We need to account both for dest_name and src_name,
- # because src_name might be the same in different contexts. For example, when collecting Qt .framework
- # bundles on macOS, there are multiple relative symbolic links `Current -> A` (one in each .framework).
- if typecode == 'SYMLINK':
- key = dest_name, src_name
- if key not in self._symlinks:
- # First occurrence; keep the entry in "for-keep" TOC, same as we would for binaries and datas.
- logger.debug("Keeping symbolic link %r entry in original TOC.", entry)
- self._symlinks.add(key)
- toc_keep.append(entry)
- else:
- # Subsequent occurrence; keep the SYMLINK entry intact, but add it to the references TOC instead of
- # "for-keep" TOC, so it ends up in `a.dependencies`.
- logger.debug("Moving symbolic link %r entry to references TOC.", entry)
- toc_refs.append(entry)
- del key # Block-local variable
- continue
-
- # In fact, we need to accout for both dest_name and src_name with regular entries as well; previous
- # approach that considered only src_name ended tripped up when same file was collected in different
- # locations (i.e., same src_name but different dest_names).
- key = dest_name, src_name
- if key not in self._dependencies:
- logger.debug("Adding dependency %r located in %s", key, path_to_exe)
- self._dependencies[key] = path_to_exe
- # Add entry to list of kept TOC entries
- toc_keep.append(entry)
- else:
- # Construct relative dependency path; i.e., the relative path from this executable (or rather, its
- # parent directory) to the executable that contains the dependency.
- dep_path = os.path.relpath(self._dependencies[key], os.path.dirname(path_to_exe))
- # Ignore references that point to the origin package. This can happen if the same resource is listed
- # multiple times in TOCs (e.g., once as binary and once as data).
- if dep_path.endswith(path_to_exe):
- logger.debug(
- "Ignoring self-reference of %r for %s, located in %s - duplicated TOC entry?", key, path_to_exe,
- dep_path
- )
- # The entry is a duplicate, and should be ignored (i.e., do not add it to either of output TOCs).
- continue
- logger.debug("Referencing %r to be a dependency for %s, located in %s", key, path_to_exe, dep_path)
- # Create new DEPENDENCY entry; under destination path (first element), we store the original destination
- # path, while source path contains the relative reference path.
- toc_refs.append((dest_name, dep_path, "DEPENDENCY"))
-
- return toc_keep, toc_refs
-
-
-UNCOMPRESSED = False
-COMPRESSED = True
-
-_MISSING_BOOTLOADER_ERRORMSG = """Fatal error: PyInstaller does not include a pre-compiled bootloader for your
-platform. For more details and instructions how to build the bootloader see
-"""
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/build_main.py b/venv/lib/python3.12/site-packages/PyInstaller/building/build_main.py
deleted file mode 100755
index bceb964..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/build_main.py
+++ /dev/null
@@ -1,1275 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Build packages using spec files.
-
-NOTE: All global variables, classes and imported modules create API for .spec files.
-"""
-
-import glob
-import os
-import pathlib
-import pprint
-import shutil
-import enum
-import re
-import sys
-
-from PyInstaller import DEFAULT_DISTPATH, DEFAULT_WORKPATH, HOMEPATH, compat
-from PyInstaller import log as logging
-from PyInstaller.building.api import COLLECT, EXE, MERGE, PYZ
-from PyInstaller.building.datastruct import (
- TOC, Target, Tree, _check_guts_eq, normalize_toc, normalize_pyz_toc, toc_process_symbolic_links
-)
-from PyInstaller.building.osx import BUNDLE
-from PyInstaller.building.splash import Splash
-from PyInstaller.building.utils import (
- _check_guts_toc, _check_guts_toc_mtime, _should_include_system_binary, format_binaries_and_datas, compile_pymodule,
- destination_name_for_extension, postprocess_binaries_toc_pywin32, postprocess_binaries_toc_pywin32_anaconda,
- create_base_library_zip
-)
-from PyInstaller.compat import is_win, is_conda, is_darwin, is_linux
-from PyInstaller.depend import bindepend
-from PyInstaller.depend.analysis import initialize_modgraph, HOOK_PRIORITY_USER_HOOKS
-from PyInstaller.depend.utils import scan_code_for_ctypes
-from PyInstaller import isolated
-from PyInstaller.utils.misc import absnormpath, get_path_to_toplevel_modules, mtime
-from PyInstaller.utils.hooks import get_package_paths
-from PyInstaller.utils.hooks.gi import compile_glib_schema_files
-
-if is_darwin:
- from PyInstaller.utils import osx as osxutils
-
-logger = logging.getLogger(__name__)
-
-STRINGTYPE = type('')
-TUPLETYPE = type((None,))
-
-rthooks = {}
-
-# Place where the loader modules and initialization scripts live.
-_init_code_path = os.path.join(HOMEPATH, 'PyInstaller', 'loader')
-
-IMPORT_TYPES = [
- 'top-level', 'conditional', 'delayed', 'delayed, conditional', 'optional', 'conditional, optional',
- 'delayed, optional', 'delayed, conditional, optional'
-]
-
-WARNFILE_HEADER = """\
-
-This file lists modules PyInstaller was not able to find. This does not
-necessarily mean these modules are required for running your program. Both
-Python's standard library and 3rd-party Python packages often conditionally
-import optional modules, some of which may be available only on certain
-platforms.
-
-Types of import:
-* top-level: imported at the top-level - look at these first
-* conditional: imported within an if-statement
-* delayed: imported within a function
-* optional: imported within a try-except-statement
-
-IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
- tracking down the missing module yourself. Thanks!
-
-"""
-
-
-@isolated.decorate
-def discover_hook_directories():
- """
- Discover hook directories via pyinstaller40 entry points. Perform the discovery in an isolated subprocess
- to avoid importing the package(s) in the main process.
-
- :return: list of discovered hook directories.
- """
-
- from traceback import format_exception_only
- from PyInstaller.log import logger
- from PyInstaller.compat import importlib_metadata
- from PyInstaller.depend.analysis import HOOK_PRIORITY_CONTRIBUTED_HOOKS, HOOK_PRIORITY_UPSTREAM_HOOKS
-
- # The “selectable” entry points (via group and name keyword args) were introduced in importlib_metadata 4.6 and
- # Python 3.10. The compat module ensures we are using a compatible version.
- entry_points = importlib_metadata.entry_points(group='pyinstaller40', name='hook-dirs')
-
- # Ensure that pyinstaller_hooks_contrib comes last so that hooks from packages providing their own take priority.
- # In pyinstaller-hooks-contrib >= 2024.8, the entry-point module is `_pyinstaller_hooks_contrib`; in earlier
- # versions, it was `_pyinstaller_hooks_contrib.hooks`.
- entry_points = sorted(entry_points, key=lambda x: x.module.startswith("_pyinstaller_hooks_contrib"))
-
- hook_directories = []
- for entry_point in entry_points:
- # Query hook directory location(s) from entry point
- try:
- hook_directory_entries = entry_point.load()()
- except Exception as e:
- msg = "".join(format_exception_only(type(e), e)).strip()
- logger.warning("discover_hook_directories: Failed to process hook entry point '%s': %s", entry_point, msg)
- continue
-
- # Determine location-based priority: upstream hooks vs. hooks from contributed hooks package.
- location_priority = (
- HOOK_PRIORITY_CONTRIBUTED_HOOKS
- if entry_point.module.startswith("_pyinstaller_hooks_contrib") else HOOK_PRIORITY_UPSTREAM_HOOKS
- )
-
- # Append entries
- hook_directories.extend([(hook_directory_entry, location_priority)
- for hook_directory_entry in hook_directory_entries])
-
- logger.debug("discover_hook_directories: Hook directories: %s", hook_directories)
-
- return hook_directories
-
-
-def find_binary_dependencies(binaries, import_packages, symlink_suppression_patterns):
- """
- Find dynamic dependencies (linked shared libraries) for the provided list of binaries.
-
- On Windows, this function performs additional pre-processing in an isolated environment in an attempt to handle
- dynamic library search path modifications made by packages during their import. The packages from the given list
- of collected packages are imported one by one, while keeping track of modifications made by `os.add_dll_directory`
- calls and additions to the `PATH` environment variable. The recorded additional search paths are then passed to
- the binary dependency analysis step.
-
- binaries
- List of binaries to scan for dynamic dependencies.
- import_packages
- List of packages to import prior to scanning binaries.
- symlink_suppression_patterns
- Set of paths and/or path patterns for which binary dependency analysis should not create symbolic links
- to the top-level application directory (when the discovered shared library's parent directory structure
- is preserved). When binary dependency analysis discovers a shared library, it matches its *source path*
- against all symlink suppression patterns (using `pathlib.PurePath.match`) to determine whether to create
- a symbolic link to top-level application directory or not.
-
- :return: expanded list of binaries and then dependencies.
- """
-
- # Extra library search paths (used on Windows to resolve DLL paths).
- extra_libdirs = []
- if compat.is_win:
- # Always search `sys.base_prefix`, and search it first. This ensures that we resolve the correct version of
- # `python3X.dll` and `python3.dll` (a PEP-0384 stable ABI stub that forwards symbols to the fully versioned
- # `python3X.dll`), regardless of other python installations that might be present in the PATH.
- extra_libdirs.append(compat.base_prefix)
-
- # When using python built from source, `sys.base_prefix` does not point to the directory that contains python
- # executable, `python3X.dll`, and `python3.dll`. To accommodate such case, also add the directory in which
- # python executable is located to the extra search paths. On the off-chance that this is a combination of venv
- # and python built from source, prefer `sys._base_executable` over `sys.executable`.
- extra_libdirs.append(os.path.dirname(getattr(sys, '_base_executable', sys.executable)))
-
- # If `pywin32` is installed, resolve the path to the `pywin32_system32` directory. Most `pywin32` extensions
- # reference the `pywintypes3X.dll` in there. Based on resolved `pywin32_system32` directory, also add other
- # `pywin32` directory, in case extensions in different directories reference each other (the ones in the same
- # directory should already be resolvable due to binary dependency analysis passing the analyzed binary's
- # location to the `get_imports` function). This allows us to avoid searching all paths in `sys.path`, which
- # may lead to other corner-case issues (e.g., #5560).
- pywin32_system32_dir = None
- try:
- # Look up the directory by treating it as a namespace package.
- _, pywin32_system32_dir = get_package_paths('pywin32_system32')
- except Exception:
- pass
-
- if pywin32_system32_dir:
- pywin32_base_dir = os.path.dirname(pywin32_system32_dir)
- extra_libdirs += [
- pywin32_system32_dir, # .../pywin32_system32
- # based on pywin32.pth
- os.path.join(pywin32_base_dir, 'win32'), # .../win32
- os.path.join(pywin32_base_dir, 'win32', 'lib'), # .../win32/lib
- os.path.join(pywin32_base_dir, 'Pythonwin'), # .../Pythonwin
- ]
-
- # On Windows, packages' initialization code might register additional DLL search paths, either by modifying the
- # `PATH` environment variable, or by calling `os.add_dll_directory`. Therefore, we import all collected packages,
- # and track changes made to the environment.
- if compat.is_win:
- # Helper functions to be executed in isolated environment.
- def setup(suppressed_imports):
- """
- Prepare environment for change tracking
- """
- import os
- import sys
-
- os._added_dll_directories = []
- os._original_path_env = os.environ.get('PATH', '')
-
- _original_add_dll_directory = os.add_dll_directory
-
- def _pyi_add_dll_directory(path):
- os._added_dll_directories.append(path)
- return _original_add_dll_directory(path)
-
- os.add_dll_directory = _pyi_add_dll_directory
-
- # Suppress import of specified packages
- for name in suppressed_imports:
- sys.modules[name] = None
-
- def import_library(package):
- """
- Import collected package to set up environment.
- """
- try:
- __import__(package)
- except Exception:
- pass
-
- def process_search_paths():
- """
- Obtain lists of added search paths.
- """
- import os
-
- # `os.add_dll_directory` might be called with a `pathlib.Path`, which cannot be marhsalled out of the helper
- # process. So explicitly convert all entries to strings.
- dll_directories = [str(path) for path in os._added_dll_directories]
-
- orig_path = set(os._original_path_env.split(os.pathsep))
- modified_path = os.environ.get('PATH', '').split(os.pathsep)
- path_additions = [path for path in modified_path if path and path not in orig_path]
-
- return dll_directories, path_additions
-
- # Pre-process the list of packages to import.
- # Check for Qt bindings packages, and put them at the front of the packages list. This ensures that they are
- # always imported first, which should prevent packages that support multiple bindings (`qtypy`, `pyqtgraph`,
- # `matplotlib`, etc.) from trying to auto-select bindings.
- _QT_BINDINGS = ('PySide2', 'PyQt5', 'PySide6', 'PyQt6')
-
- qt_packages = []
- other_packages = []
- for package in import_packages:
- if package.startswith(_QT_BINDINGS):
- qt_packages.append(package)
- else:
- other_packages.append(package)
- import_packages = qt_packages + other_packages
-
- # Just in case, explicitly suppress imports of Qt bindings that we are *not* collecting - if multiple bindings
- # are available and some were excluded from our analysis, a package imported here might still try to import an
- # excluded bindings package (and succeed at doing so).
- suppressed_imports = [package for package in _QT_BINDINGS if package not in qt_packages]
-
- # If we suppressed PySide2 or PySide6, we must also suppress their corresponding shiboken package
- if "PySide2" in suppressed_imports:
- suppressed_imports += ["shiboken2"]
- if "PySide6" in suppressed_imports:
- suppressed_imports += ["shiboken6"]
-
- # Suppress import of `pyqtgraph.canvas`, which is known to crash python interpreter. See #7452 and #8322, as
- # well as https://github.com/pyqtgraph/pyqtgraph/issues/2838.
- suppressed_imports += ['pyqtgraph.canvas']
-
- # PySimpleGUI 5.x displays a "first-run" dialog when imported for the first time, which blocks the loop below.
- # This is a problem for building on CI, where the dialog cannot be closed, and where PySimpleGUI runs "for the
- # first time" every time. See #8396.
- suppressed_imports += ['PySimpleGUI']
-
- # Processing in isolated environment.
- with isolated.Python() as child:
- child.call(setup, suppressed_imports)
- for package in import_packages:
- try:
- child.call(import_library, package)
- except isolated.SubprocessDiedError as e:
- # Re-raise as `isolated.SubprocessDiedError` again, to trigger error-handling codepath in
- # `isolated.Python.__exit__()`.
- raise isolated.SubprocessDiedError(
- f"Isolated subprocess crashed while importing package {package!r}! "
- f"Package import list: {import_packages!r}"
- ) from e
- added_dll_directories, added_path_directories = child.call(process_search_paths)
-
- # Process extra search paths...
- logger.info("Extra DLL search directories (AddDllDirectory): %r", added_dll_directories)
- extra_libdirs += added_dll_directories
-
- logger.info("Extra DLL search directories (PATH): %r", added_path_directories)
- extra_libdirs += added_path_directories
-
- # Deduplicate search paths
- # NOTE: `list(set(extra_libdirs))` does not preserve the order of search paths (which matters here), so we need to
- # de-duplicate using `list(dict.fromkeys(extra_libdirs).keys())` instead.
- extra_libdirs = list(dict.fromkeys(extra_libdirs).keys())
-
- # Search for dependencies of the given binaries
- return bindepend.binary_dependency_analysis(
- binaries,
- search_paths=extra_libdirs,
- symlink_suppression_patterns=symlink_suppression_patterns,
- )
-
-
-class _ModuleCollectionMode(enum.IntFlag):
- """
- Module collection mode flags.
- """
- PYZ = enum.auto() # Collect byte-compiled .pyc into PYZ archive
- PYC = enum.auto() # Collect byte-compiled .pyc as external data file
- PY = enum.auto() # Collect source .py file as external data file
-
-
-_MODULE_COLLECTION_MODES = {
- "pyz": _ModuleCollectionMode.PYZ,
- "pyc": _ModuleCollectionMode.PYC,
- "py": _ModuleCollectionMode.PY,
- "pyz+py": _ModuleCollectionMode.PYZ | _ModuleCollectionMode.PY,
- "py+pyz": _ModuleCollectionMode.PYZ | _ModuleCollectionMode.PY,
-}
-
-
-def _get_module_collection_mode(mode_dict, name, noarchive=False):
- """
- Determine the module/package collection mode for the given module name, based on the provided collection
- mode settings dictionary.
- """
- # Default mode: collect into PYZ, unless noarchive is enabled. In that case, collect as pyc.
- mode_flags = _ModuleCollectionMode.PYC if noarchive else _ModuleCollectionMode.PYZ
-
- # If we have no collection mode settings, end here and now.
- if not mode_dict:
- return mode_flags
-
- # Search the parent modules/packages in top-down fashion, and take the last given setting. This ensures that
- # a setting given for the top-level package is recursively propagated to all its subpackages and submodules,
- # but also allows individual sub-modules to override the setting again.
- mode = 'pyz'
-
- name_parts = name.split('.')
- for i in range(len(name_parts)):
- modlevel = ".".join(name_parts[:i + 1])
- modlevel_mode = mode_dict.get(modlevel, None)
- if modlevel_mode is not None:
- mode = modlevel_mode
-
- # Convert mode string to _ModuleCollectionMode flags
- try:
- mode_flags = _MODULE_COLLECTION_MODES[mode]
- except KeyError:
- raise ValueError(f"Unknown module collection mode for {name!r}: {mode!r}!")
-
- # noarchive flag being set means that we need to change _ModuleCollectionMode.PYZ into _ModuleCollectionMode.PYC
- if noarchive and _ModuleCollectionMode.PYZ in mode_flags:
- mode_flags ^= _ModuleCollectionMode.PYZ
- mode_flags |= _ModuleCollectionMode.PYC
-
- return mode_flags
-
-
-class Analysis(Target):
- """
- Class that performs analysis of the user's main Python scripts.
-
- An Analysis contains multiple TOC (Table of Contents) lists, accessed as attributes of the analysis object.
-
- scripts
- The scripts you gave Analysis as input, with any runtime hook scripts prepended.
- pure
- The pure Python modules.
- binaries
- The extension modules and their dependencies.
- datas
- Data files collected from packages.
- zipfiles
- Deprecated - always empty.
- zipped_data
- Deprecated - always empty.
- """
- _old_scripts = {
- absnormpath(os.path.join(HOMEPATH, "support", "_mountzlib.py")),
- absnormpath(os.path.join(HOMEPATH, "support", "useUnicode.py")),
- absnormpath(os.path.join(HOMEPATH, "support", "useTK.py")),
- absnormpath(os.path.join(HOMEPATH, "support", "unpackTK.py")),
- absnormpath(os.path.join(HOMEPATH, "support", "removeTK.py"))
- }
-
- def __init__(
- self,
- scripts,
- pathex=None,
- binaries=None,
- datas=None,
- hiddenimports=None,
- hookspath=None,
- hooksconfig=None,
- excludes=None,
- runtime_hooks=None,
- cipher=None,
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- noarchive=False,
- module_collection_mode=None,
- optimize=-1,
- **_kwargs,
- ):
- """
- scripts
- A list of scripts specified as file names.
- pathex
- An optional list of paths to be searched before sys.path.
- binaries
- An optional list of additional binaries (dlls, etc.) to include.
- datas
- An optional list of additional data files to include.
- hiddenimport
- An optional list of additional (hidden) modules to include.
- hookspath
- An optional list of additional paths to search for hooks. (hook-modules).
- hooksconfig
- An optional dict of config settings for hooks. (hook-modules).
- excludes
- An optional list of module or package names (their Python names, not path names) that will be
- ignored (as though they were not found).
- runtime_hooks
- An optional list of scripts to use as users' runtime hooks. Specified as file names.
- cipher
- Deprecated. Raises an error if not None.
- win_no_prefer_redirects
- Deprecated. Raises an error if not False.
- win_private_assemblies
- Deprecated. Raises an error if not False.
- noarchive
- If True, do not place source files in a archive, but keep them as individual files.
- module_collection_mode
- An optional dict of package/module names and collection mode strings. Valid collection mode strings:
- 'pyz' (default), 'pyc', 'py', 'pyz+py' (or 'py+pyz')
- optimize
- Optimization level for collected bytecode. If not specified or set to -1, it is set to the value of
- `sys.flags.optimize` of the running build process.
- """
- if cipher is not None:
- from PyInstaller.exceptions import RemovedCipherFeatureError
- raise RemovedCipherFeatureError(
- "Please remove the 'cipher' arguments to PYZ() and Analysis() in your spec file."
- )
- if win_no_prefer_redirects:
- from PyInstaller.exceptions import RemovedWinSideBySideSupportError
- raise RemovedWinSideBySideSupportError(
- "Please remove the 'win_no_prefer_redirects' argument to Analysis() in your spec file."
- )
- if win_private_assemblies:
- from PyInstaller.exceptions import RemovedWinSideBySideSupportError
- raise RemovedWinSideBySideSupportError(
- "Please remove the 'win_private_assemblies' argument to Analysis() in your spec file."
- )
- super().__init__()
- from PyInstaller.config import CONF
-
- self.inputs = []
- spec_dir = os.path.dirname(CONF['spec'])
- for script in scripts:
- # If path is relative, it is relative to the location of .spec file.
- if not os.path.isabs(script):
- script = os.path.join(spec_dir, script)
- if absnormpath(script) in self._old_scripts:
- logger.warning('Ignoring obsolete auto-added script %s', script)
- continue
- # Normalize script path.
- script = os.path.normpath(script)
- if not os.path.exists(script):
- raise SystemExit("ERROR: script '%s' not found" % script)
- self.inputs.append(script)
-
- # Django hook requires this variable to find the script manage.py.
- CONF['main_script'] = self.inputs[0]
-
- site_packages_pathex = []
- for path in (pathex or []):
- if pathlib.Path(path).name == "site-packages":
- site_packages_pathex.append(str(path))
- if site_packages_pathex:
- logger.log(
- logging.DEPRECATION, "Foreign Python environment's site-packages paths added to --paths/pathex:\n%s\n"
- "This is ALWAYS the wrong thing to do. If your environment's site-packages is not in PyInstaller's "
- "module search path then you are running PyInstaller from a different environment to the one your "
- "packages are in. Run print(sys.prefix) without PyInstaller to get the environment you should be using "
- "then install and run PyInstaller from that environment instead of this one. This warning will become "
- "an error in PyInstaller 7.0.", pprint.pformat(site_packages_pathex)
- )
-
- self.pathex = self._extend_pathex(pathex, self.inputs)
- # Set global config variable 'pathex' to make it available for PyInstaller.utils.hooks and import hooks. Path
- # extensions for module search.
- CONF['pathex'] = self.pathex
- # Extend sys.path so PyInstaller could find all necessary modules.
- sys.path.extend(self.pathex)
- logger.info('Module search paths (PYTHONPATH):\n' + pprint.pformat(sys.path))
-
- self.hiddenimports = hiddenimports or []
- # Include hidden imports passed via CONF['hiddenimports']; these might be populated if user has a wrapper script
- # that calls `build_main.main()` with custom `pyi_config` dictionary that contains `hiddenimports`.
- self.hiddenimports.extend(CONF.get('hiddenimports', []))
-
- for modnm in self.hiddenimports:
- if re.search(r"[\\/]", modnm):
- raise SystemExit(
- f"ERROR: Invalid hiddenimport '{modnm}'. Hidden imports should be importable module names – not "
- "file paths. i.e. use --hiddenimport=foo.bar instead of --hiddenimport=.../site-packages/foo/bar.py"
- )
-
- self.hookspath = []
- # Prepend directories in `hookspath` (`--additional-hooks-dir`) to take precedence over those from the entry
- # points. Expand starting tilde into user's home directory, as a work-around for tilde not being expanded by
- # shell when using `--additional-hooks-dir=~/path/abc` instead of `--additional-hooks-dir ~/path/abc` (or when
- # the path argument is quoted).
- if hookspath:
- self.hookspath.extend([(os.path.expanduser(path), HOOK_PRIORITY_USER_HOOKS) for path in hookspath])
-
- # Add hook directories from PyInstaller entry points.
- self.hookspath += discover_hook_directories()
-
- self.hooksconfig = {}
- if hooksconfig:
- self.hooksconfig.update(hooksconfig)
-
- # Custom runtime hook files that should be included and started before any existing PyInstaller runtime hooks.
- self.custom_runtime_hooks = runtime_hooks or []
-
- self._input_binaries = []
- self._input_datas = []
-
- self.excludes = excludes or []
- self.scripts = []
- self.pure = []
- self.binaries = []
- self.zipfiles = []
- self.zipped_data = []
- self.datas = []
- self.dependencies = []
- self._python_version = sys.version
- self.noarchive = noarchive
- self.module_collection_mode = module_collection_mode or {}
- self.optimize = sys.flags.optimize if optimize in {-1, None} else optimize
-
- self._modules_outside_pyz = []
-
- # Validate the optimization level to avoid errors later on...
- if self.optimize not in {0, 1, 2}:
- raise ValueError(f"Unsupported bytecode optimization level: {self.optimize!r}")
-
- # Expand the `binaries` and `datas` lists specified in the .spec file, and ensure that the lists are normalized
- # and sorted before guts comparison.
- #
- # While we use these lists to initialize `Analysis.binaries` and `Analysis.datas`, at this point, we need to
- # store them in separate variables, which undergo *full* guts comparison (`_check_guts_toc`) as opposed to
- # just mtime-based comparison (`_check_guts_toc_mtime`). Changes to these initial list *must* trigger a rebuild
- # (and due to the way things work, a re-analysis), otherwise user might end up with a cached build that fails to
- # reflect the changes.
- if binaries:
- logger.info("Appending 'binaries' from .spec")
- self._input_binaries = [(dest_name, src_name, 'BINARY')
- for dest_name, src_name in format_binaries_and_datas(binaries, workingdir=spec_dir)]
- self._input_binaries = sorted(normalize_toc(self._input_binaries))
-
- if datas:
- logger.info("Appending 'datas' from .spec")
- self._input_datas = [(dest_name, src_name, 'DATA')
- for dest_name, src_name in format_binaries_and_datas(datas, workingdir=spec_dir)]
- self._input_datas = sorted(normalize_toc(self._input_datas))
-
- self.__postinit__()
-
- _GUTS = ( # input parameters
- ('inputs', _check_guts_eq), # parameter `scripts`
- ('pathex', _check_guts_eq),
- ('hiddenimports', _check_guts_eq),
- ('hookspath', _check_guts_eq),
- ('hooksconfig', _check_guts_eq),
- ('excludes', _check_guts_eq),
- ('custom_runtime_hooks', _check_guts_eq),
- ('noarchive', _check_guts_eq),
- ('module_collection_mode', _check_guts_eq),
- ('optimize', _check_guts_eq),
-
- ('_input_binaries', _check_guts_toc),
- ('_input_datas', _check_guts_toc),
-
- # calculated/analysed values
- ('_python_version', _check_guts_eq),
- ('scripts', _check_guts_toc_mtime),
- ('pure', _check_guts_toc_mtime),
- ('binaries', _check_guts_toc_mtime),
- ('zipfiles', _check_guts_toc_mtime),
- ('zipped_data', None), # TODO check this, too
- ('datas', _check_guts_toc_mtime),
- # TODO: Need to add "dependencies"?
-
- ('_modules_outside_pyz', _check_guts_toc_mtime),
- )
-
- def _extend_pathex(self, spec_pathex, scripts):
- """
- Normalize additional paths where PyInstaller will look for modules and add paths with scripts to the list of
- paths.
-
- :param spec_pathex: Additional paths defined defined in .spec file.
- :param scripts: Scripts to create executable from.
- :return: list of updated paths
- """
- # Based on main supplied script - add top-level modules directory to PYTHONPATH.
- # Sometimes the main app script is not top-level module but submodule like 'mymodule.mainscript.py'.
- # In that case PyInstaller will not be able find modules in the directory containing 'mymodule'.
- # Add this directory to PYTHONPATH so PyInstaller could find it.
- pathex = []
- # Add scripts paths first.
- for script in scripts:
- logger.debug('script: %s' % script)
- script_toplevel_dir = get_path_to_toplevel_modules(script)
- if script_toplevel_dir:
- pathex.append(script_toplevel_dir)
- # Append paths from .spec.
- if spec_pathex is not None:
- pathex.extend(spec_pathex)
- # Normalize paths in pathex and make them absolute.
- return list(dict.fromkeys(absnormpath(p) for p in pathex))
-
- def _check_guts(self, data, last_build):
- if Target._check_guts(self, data, last_build):
- return True
- for filename in self.inputs:
- if mtime(filename) > last_build:
- logger.info("Building because %s changed", filename)
- return True
- # Now we know that none of the input parameters and none of the input files has changed. So take the values
- # that were calculated / analyzed in the last run and store them in `self`. These TOC lists should already
- # be normalized.
- self.scripts = data['scripts']
- self.pure = data['pure']
- self.binaries = data['binaries']
- self.zipfiles = data['zipfiles']
- self.zipped_data = data['zipped_data']
- self.datas = data['datas']
-
- return False
-
- def assemble(self):
- """
- This method is the MAIN method for finding all necessary files to be bundled.
- """
- from PyInstaller.config import CONF
-
- # Search for python shared library, which we need to collect into frozen application. Do this as the very
- # first step, to minimize the amount of processing when the shared library cannot be found.
- logger.info('Looking for Python shared library...')
- python_lib = bindepend.get_python_library_path() # Raises PythonLibraryNotFoundError
- logger.info('Using Python shared library: %s', python_lib)
-
- logger.info("Running Analysis %s", self.tocbasename)
- logger.info("Target bytecode optimization level: %d", self.optimize)
-
- for m in self.excludes:
- logger.debug("Excluding module '%s'" % m)
- self.graph = initialize_modgraph(excludes=self.excludes, user_hook_dirs=self.hookspath)
-
- # Initialize `binaries` and `datas` with `_input_binaries` and `_input_datas`. Make sure to copy the lists
- # to prevent modifications of original lists, which we need to store in original form for guts comparison.
- self.datas = [entry for entry in self._input_datas]
- self.binaries = [entry for entry in self._input_binaries]
-
- # Expand sys.path of module graph. The attribute is the set of paths to use for imports: sys.path, plus our
- # loader, plus other paths from e.g. --path option).
- self.graph.path = self.pathex + self.graph.path
-
- # Scan for legacy namespace packages.
- self.graph.scan_legacy_namespace_packages()
-
- # Add python shared library to `binaries`.
- if is_darwin and osxutils.is_framework_bundle_lib(python_lib):
- # If python library is located in macOS .framework bundle, collect the bundle, and create symbolic link to
- # top-level directory.
- src_path = pathlib.PurePath(python_lib)
- dst_path = pathlib.PurePath(src_path.relative_to(src_path.parent.parent.parent.parent))
- self.binaries.append((str(dst_path), str(src_path), 'BINARY'))
- self.binaries.append((os.path.basename(python_lib), str(dst_path), 'SYMLINK'))
- else:
- self.binaries.append((os.path.basename(python_lib), python_lib, 'BINARY'))
-
- # -- Module graph. --
- #
- # Construct the module graph of import relationships between modules required by this user's application. For
- # each entry point (top-level user-defined Python script), all imports originating from this entry point are
- # recursively parsed into a subgraph of the module graph. This subgraph is then connected to this graph's root
- # node, ensuring imported module nodes will be reachable from the root node -- which is is (arbitrarily) chosen
- # to be the first entry point's node.
-
- # List of graph nodes corresponding to program scripts.
- program_scripts = []
-
- # Assume that if the script does not exist, Modulegraph will raise error. Save the graph nodes of each in
- # sequence.
- for script in self.inputs:
- logger.info("Analyzing %s", script)
- program_scripts.append(self.graph.add_script(script))
-
- # Analyze the script's hidden imports (named on the command line)
- self.graph.add_hiddenimports(self.hiddenimports)
-
- # -- Post-graph hooks. --
- self.graph.process_post_graph_hooks(self)
-
- # Update 'binaries' and 'datas' TOC lists with entries collected from hooks.
- self.binaries += self.graph.make_hook_binaries_toc()
- self.datas += self.graph.make_hook_datas_toc()
-
- # We do not support zipped eggs anymore (PyInstaller v6.0), so `zipped_data` and `zipfiles` are always empty.
- self.zipped_data = []
- self.zipfiles = []
-
- # -- Automatic binary vs. data reclassification. --
- #
- # At this point, `binaries` and `datas` contain TOC entries supplied by user via input arguments, and by hooks
- # that were ran during the analysis. Neither source can be fully trusted regarding the DATA vs BINARY
- # classification (no thanks to our hookutils not being 100% reliable, either!). Therefore, inspect the files and
- # automatically reclassify them as necessary.
- #
- # The proper classification is important especially for collected binaries - to ensure that they undergo binary
- # dependency analysis and platform-specific binary processing. On macOS, the .app bundle generation code also
- # depends on files to be properly classified.
- #
- # For entries added to `binaries` and `datas` after this point, we trust their typecodes due to the nature of
- # their origin.
- combined_toc = normalize_toc(self.datas + self.binaries)
-
- logger.info('Performing binary vs. data reclassification (%d entries)', len(combined_toc))
-
- self.datas = []
- self.binaries = []
-
- for dest_name, src_name, typecode in combined_toc:
- # Returns 'BINARY' or 'DATA', or None if file cannot be classified.
- detected_typecode = bindepend.classify_binary_vs_data(src_name)
- if detected_typecode is not None:
- if detected_typecode != typecode:
- logger.debug(
- "Reclassifying collected file %r from %s to %s...", src_name, typecode, detected_typecode
- )
- typecode = detected_typecode
-
- # Put back into corresponding TOC list.
- if typecode in {'BINARY', 'EXTENSION'}:
- self.binaries.append((dest_name, src_name, typecode))
- else:
- self.datas.append((dest_name, src_name, typecode))
-
- # -- Look for dlls that are imported by Python 'ctypes' module. --
- # First get code objects of all modules that import 'ctypes'.
- logger.info('Looking for ctypes DLLs')
- # dict like: {'module1': code_obj, 'module2': code_obj}
- ctypes_code_objs = self.graph.get_code_using("ctypes")
-
- for name, co in ctypes_code_objs.items():
- # Get dlls that might be needed by ctypes.
- logger.debug('Scanning %s for ctypes-based references to shared libraries', name)
- try:
- ctypes_binaries = scan_code_for_ctypes(co)
- # As this scan happens after automatic binary-vs-data classification, we need to validate the binaries
- # ourselves, just in case.
- for dest_name, src_name, typecode in set(ctypes_binaries):
- # Allow for `None` in case re-classification is not supported on the given platform.
- if bindepend.classify_binary_vs_data(src_name) not in (None, 'BINARY'):
- logger.warning("Ignoring %s found via ctypes - not a valid binary!", src_name)
- continue
- self.binaries.append((dest_name, src_name, typecode))
- except Exception as ex:
- raise RuntimeError(f"Failed to scan the module '{name}'. This is a bug. Please report it.") from ex
-
- self.datas.extend((dest, source, "DATA")
- for (dest, source) in format_binaries_and_datas(self.graph.metadata_required()))
-
- # Analyze run-time hooks.
- rhtook_scripts = self.graph.analyze_runtime_hooks(self.custom_runtime_hooks)
-
- # -- Extract the nodes of the graph as TOCs for further processing. --
-
- # Initialize the scripts list: run-time hooks (custom ones, followed by regular ones), followed by program
- # script(s).
-
- # We do not optimize bytecode of run-time hooks.
- rthook_toc = self.graph.nodes_to_toc(rhtook_scripts)
-
- # Override the typecode of program script(s) to include bytecode optimization level.
- program_toc = self.graph.nodes_to_toc(program_scripts)
- optim_typecode = {0: 'PYSOURCE', 1: 'PYSOURCE-1', 2: 'PYSOURCE-2'}[self.optimize]
- program_toc = [(name, src_path, optim_typecode) for name, src_path, typecode in program_toc]
-
- self.scripts = rthook_toc + program_toc
- self.scripts = normalize_toc(self.scripts) # Should not really contain duplicates, but just in case...
-
- # Extend the binaries list with all the Extensions modulegraph has found.
- self.binaries += self.graph.make_binaries_toc()
-
- # Convert extension module names into full filenames, and append suffix. Ensure that extensions that come from
- # the lib-dynload are collected into _MEIPASS/python3.x/lib-dynload instead of directly into _MEIPASS.
- for idx, (dest, source, typecode) in enumerate(self.binaries):
- if typecode != 'EXTENSION':
- continue
- dest = destination_name_for_extension(dest, source, typecode)
- self.binaries[idx] = (dest, source, typecode)
-
- # Perform initial normalization of `datas` and `binaries`
- self.datas = normalize_toc(self.datas)
- self.binaries = normalize_toc(self.binaries)
-
- # Post-process GLib schemas
- self.datas = compile_glib_schema_files(self.datas, os.path.join(CONF['workpath'], "_pyi_gschema_compilation"))
- self.datas = normalize_toc(self.datas)
-
- # Process the pure-python modules list. Depending on the collection mode, these entries end up either in "pure"
- # list for collection into the PYZ archive, or in the "datas" list for collection as external data files.
- assert len(self.pure) == 0
- pure_pymodules_toc = self.graph.make_pure_toc()
-
- # Merge package collection mode settings from .spec file. These are applied last, so they override the
- # settings previously applied by hooks.
- self.graph._module_collection_mode.update(self.module_collection_mode)
- logger.debug("Module collection settings: %r", self.graph._module_collection_mode)
-
- # If target bytecode optimization level matches the run-time bytecode optimization level (i.e., of the running
- # build process), we can re-use the modulegraph's code-object cache.
- if self.optimize == sys.flags.optimize:
- logger.debug(
- "Target optimization level %d matches run-time optimization level %d - using modulegraph's code-object "
- "cache.",
- self.optimize,
- sys.flags.optimize,
- )
- code_cache = self.graph.get_code_objects()
- else:
- logger.debug(
- "Target optimization level %d differs from run-time optimization level %d - ignoring modulegraph's "
- "code-object cache.",
- self.optimize,
- sys.flags.optimize,
- )
- code_cache = None
-
- # Construct a set for look-up of modules that should end up in base_library.zip. The list of corresponding
- # modulegraph nodes is stored in `PyiModuleGraph._base_modules` (see `PyiModuleGraph._analyze_base_modules`).
- base_modules = set(node.identifier for node in self.graph._base_modules)
- base_modules_toc = []
-
- pycs_dir = os.path.join(CONF['workpath'], 'localpycs')
- optim_level = self.optimize # We could extend this with per-module settings, similar to `collect_mode`.
- for name, src_path, typecode in pure_pymodules_toc:
- assert typecode == 'PYMODULE'
- collect_mode = _get_module_collection_mode(self.graph._module_collection_mode, name, self.noarchive)
-
- # Collect byte-compiled .pyc into PYZ archive or base_library.zip. Embed optimization level into typecode.
- in_pyz = False
- if _ModuleCollectionMode.PYZ in collect_mode:
- optim_typecode = {0: 'PYMODULE', 1: 'PYMODULE-1', 2: 'PYMODULE-2'}[optim_level]
- toc_entry = (name, src_path, optim_typecode)
- if name in base_modules:
- base_modules_toc.append(toc_entry)
- else:
- self.pure.append(toc_entry)
- in_pyz = True
-
- # If module is not collected into PYZ archive (and is consequently not tracked in the `self.pure` TOC list),
- # add it to the `self._modules_outside_pyz` TOC list, in order to be able to detect modifications in those
- # modules.
- if not in_pyz:
- self._modules_outside_pyz.append((name, src_path, typecode))
-
- # Pure namespace packages have no source path, and cannot be collected as external data file.
- if src_path in (None, '-'):
- continue
-
- # Collect source .py file as external data file
- if _ModuleCollectionMode.PY in collect_mode:
- basename, ext = os.path.splitext(os.path.basename(src_path))
- # If the module is available only as a byte-compiled .pyc, we cannot collect its source.
- if ext.lower() == '.pyc':
- logger.warning(
- 'Cannot collect source .py file for module %r - module is available only as .pyc: %r',
- name,
- src_path,
- )
- continue
- dest_path = name.replace('.', os.sep)
- if basename == '__init__':
- dest_path += os.sep + '__init__' + ext
- else:
- dest_path += ext
- self.datas.append((dest_path, src_path, "DATA"))
-
- # Collect byte-compiled .pyc file as external data file
- if _ModuleCollectionMode.PYC in collect_mode:
- basename, ext = os.path.splitext(os.path.basename(src_path))
- dest_path = name.replace('.', os.sep)
- if basename == '__init__':
- dest_path += os.sep + '__init__'
- # Append the extension for the compiled result. In python 3.5 (PEP-488) .pyo files were replaced by
- # .opt-1.pyc and .opt-2.pyc. However, it seems that for bytecode-only module distribution, we always
- # need to use the .pyc extension.
- dest_path += '.pyc'
-
- # Compile - use optimization-level-specific sub-directory in local working directory.
- obj_path = compile_pymodule(
- name,
- src_path,
- workpath=os.path.join(pycs_dir, str(optim_level)),
- optimize=optim_level,
- code_cache=code_cache,
- )
-
- self.datas.append((dest_path, obj_path, "DATA"))
-
- # Construct base_library.zip, if applicable (the only scenario where it is not is if we are building with
- # noarchive mode). Always remove the file before the build.
- base_library_zip = os.path.join(CONF['workpath'], 'base_library.zip')
- if os.path.exists(base_library_zip):
- os.remove(base_library_zip)
- if base_modules_toc:
- logger.info('Creating %s...', os.path.basename(base_library_zip))
- create_base_library_zip(base_library_zip, base_modules_toc, code_cache)
- self.datas.append((os.path.basename(base_library_zip), base_library_zip, 'DATA')) # Bundle as data file.
-
- # Normalize list of pure-python modules (these will end up in PYZ archive, so use specific normalization).
- self.pure = normalize_pyz_toc(self.pure)
-
- # Associate the `pure` TOC list instance with code cache in the global `CONF`; this is used by `PYZ` writer
- # to obtain modules' code from cache instead
- #
- # (NOTE: back when `pure` was an instance of `TOC` class, the code object was passed by adding an attribute
- # to the `pure` itself; now that `pure` is plain `list`, we cannot do that anymore. But the association via
- # object ID should have the same semantics as the added attribute).
- from PyInstaller.config import CONF
- global_code_cache_map = CONF['code_cache']
- global_code_cache_map[id(self.pure)] = code_cache
-
- # Add remaining binary dependencies - analyze Python C-extensions and what DLLs they depend on.
- #
- # Up until this point, we did very best not to import the packages into the main process. However, a package
- # may set up additional library search paths during its import (e.g., by modifying PATH or calling the
- # add_dll_directory() function on Windows, or modifying LD_LIBRARY_PATH on Linux). In order to reliably
- # discover dynamic libraries, we therefore require an environment with all packages imported. We achieve that
- # by gathering list of all collected packages, and spawn an isolated process, in which we first import all
- # the packages from the list, and then perform search for dynamic libraries.
- logger.info('Looking for dynamic libraries')
-
- collected_packages = self.graph.get_collected_packages()
- self.binaries.extend(
- find_binary_dependencies(self.binaries, collected_packages, self.graph._bindepend_symlink_suppression)
- )
-
- # Apply work-around for (potential) binaries collected from `pywin32` package...
- if is_win:
- self.binaries = postprocess_binaries_toc_pywin32(self.binaries)
- # With anaconda, we need additional work-around...
- if is_conda:
- self.binaries = postprocess_binaries_toc_pywin32_anaconda(self.binaries)
-
- # On linux, check for HMAC files accompanying shared library files and, if available, collect them.
- # These are present on Fedora and RHEL, and are used in FIPS-enabled configurations to ensure shared
- # library's file integrity.
- if is_linux:
- for dest_name, src_name, typecode in self.binaries:
- if typecode not in {'BINARY', 'EXTENSION'}:
- continue # Skip symbolic links
-
- src_lib_path = pathlib.Path(src_name)
-
- # Check for .name.hmac file next to the shared library.
- src_hmac_path = src_lib_path.with_name(f".{src_lib_path.name}.hmac")
- if src_hmac_path.is_file():
- dest_hmac_path = pathlib.PurePath(dest_name).with_name(src_hmac_path.name)
- self.datas.append((str(dest_hmac_path), str(src_hmac_path), 'DATA'))
-
- # Alternatively, check the fipscheck directory: fipscheck/name.hmac
- src_hmac_path = src_lib_path.parent / "fipscheck" / f"{src_lib_path.name}.hmac"
- if src_hmac_path.is_file():
- dest_hmac_path = pathlib.PurePath("fipscheck") / src_hmac_path.name
- self.datas.append((str(dest_hmac_path), str(src_hmac_path), 'DATA'))
-
- # Similarly, look for .chk files that are used by NSS libraries.
- src_chk_path = src_lib_path.with_suffix(".chk")
- if src_chk_path.is_file():
- dest_chk_path = pathlib.PurePath(dest_name).with_name(src_chk_path.name)
- self.datas.append((str(dest_chk_path), str(src_chk_path), 'DATA'))
-
- # Final normalization of `datas` and `binaries`:
- # - normalize both TOCs together (to avoid having duplicates across the lists)
- # - process the combined normalized TOC for symlinks
- # - split back into `binaries` (BINARY, EXTENSION) and `datas` (everything else)
- combined_toc = normalize_toc(self.datas + self.binaries)
- combined_toc = toc_process_symbolic_links(combined_toc)
-
- # On macOS, look for binaries collected from .framework bundles, collect their Info.plist files, and fix the
- # structure to conform to code-signing requirements (i.e., Versions/Current symbolic link and symbolic links
- # for top-level directories).
- if is_darwin:
- combined_toc = osxutils.collect_files_from_framework_bundles(combined_toc)
- combined_toc = normalize_toc(combined_toc)
-
- self.datas = []
- self.binaries = []
- for entry in combined_toc:
- dest_name, src_name, typecode = entry
- if typecode in {'BINARY', 'EXTENSION'}:
- self.binaries.append(entry)
- else:
- self.datas.append(entry)
-
- # On macOS, the Finder app seems to litter visited directories with `.DS_Store` files. These cause issues with
- # codesigning when placed in mixed-content directories, where our .app bundle generator cross-links data files
- # from `Resources` to `Frameworks` tree, and the `codesign` utility explicitly forbids a `.DS_Store` file to be
- # a symbolic link.
- # But there is no reason for `.DS_Store` files to be collected in the first place, so filter them out.
- if is_darwin:
- self.datas = [(dest_name, src_name, typecode) for dest_name, src_name, typecode in self.datas
- if os.path.basename(src_name) != '.DS_Store']
-
- # Write warnings about missing modules.
- self._write_warnings()
- # Write debug information about the graph
- self._write_graph_debug()
-
- # On macOS, check the SDK version of the binaries to be collected, and warn when the SDK version is either
- # invalid or too low. Such binaries will likely refuse to be loaded when hardened runtime is enabled and
- # while we cannot do anything about it, we can at least warn the user about it.
- # See: https://developer.apple.com/forums/thread/132526
- if is_darwin:
- binaries_with_invalid_sdk = []
- for dest_name, src_name, typecode in self.binaries:
- try:
- sdk_version = osxutils.get_macos_sdk_version(src_name)
- except Exception:
- logger.warning("Failed to query macOS SDK version of %r!", src_name, exc_info=True)
- binaries_with_invalid_sdk.append((dest_name, src_name, "unavailable"))
- continue
-
- if sdk_version < (10, 9, 0):
- binaries_with_invalid_sdk.append((dest_name, src_name, sdk_version))
- if binaries_with_invalid_sdk:
- logger.warning("Found one or more binaries with invalid or incompatible macOS SDK version:")
- for dest_name, src_name, sdk_version in binaries_with_invalid_sdk:
- logger.warning(" * %r, collected as %r; version: %r", src_name, dest_name, sdk_version)
- logger.warning("These binaries will likely cause issues with code-signing and hardened runtime!")
-
- def _write_warnings(self):
- """
- Write warnings about missing modules. Get them from the graph and use the graph to figure out who tried to
- import them.
- """
- def dependency_description(name, dep_info):
- if not dep_info or dep_info == 'direct':
- imptype = 0
- else:
- imptype = (dep_info.conditional + 2 * dep_info.function + 4 * dep_info.tryexcept)
- return '%s (%s)' % (name, IMPORT_TYPES[imptype])
-
- from PyInstaller.config import CONF
- miss_toc = self.graph.make_missing_toc()
- with open(CONF['warnfile'], 'w', encoding='utf-8') as wf:
- wf.write(WARNFILE_HEADER)
- for (n, p, status) in miss_toc:
- importers = self.graph.get_importers(n)
- print(
- status,
- 'module named',
- n,
- '- imported by',
- ', '.join(dependency_description(name, data) for name, data in importers),
- file=wf
- )
- logger.info("Warnings written to %s", CONF['warnfile'])
-
- def _write_graph_debug(self):
- """
- Write a xref (in html) and with `--log-level DEBUG` a dot-drawing of the graph.
- """
- from PyInstaller.config import CONF
- with open(CONF['xref-file'], 'w', encoding='utf-8') as fh:
- self.graph.create_xref(fh)
- logger.info("Graph cross-reference written to %s", CONF['xref-file'])
- if logger.getEffectiveLevel() > logging.DEBUG:
- return
- # The `DOT language's `_ default character encoding (see the end
- # of the linked page) is UTF-8.
- with open(CONF['dot-file'], 'w', encoding='utf-8') as fh:
- self.graph.graphreport(fh)
- logger.info("Graph drawing written to %s", CONF['dot-file'])
-
- def exclude_system_libraries(self, list_of_exceptions=None):
- """
- This method may be optionally called from the spec file to exclude any system libraries from the list of
- binaries other than those containing the shell-style wildcards in list_of_exceptions. Those that match
- '*python*' or are stored under 'lib-dynload' are always treated as exceptions and not excluded.
- """
-
- self.binaries = [
- entry for entry in self.binaries if _should_include_system_binary(entry, list_of_exceptions or [])
- ]
-
-
-class ExecutableBuilder:
- """
- Class that constructs the executable.
- """
- # TODO wrap the 'main' and 'build' function into this class.
-
-
-def build(spec, distpath, workpath, clean_build):
- """
- Build the executable according to the created SPEC file.
- """
- from PyInstaller.config import CONF
-
- # Ensure starting tilde in distpath / workpath is expanded into user's home directory. This is to work around for
- # tilde not being expanded when using `--workpath=~/path/abc` instead of `--workpath ~/path/abc` (or when the path
- # argument is quoted). See https://github.com/pyinstaller/pyinstaller/issues/696
- distpath = os.path.abspath(os.path.expanduser(distpath))
- workpath = os.path.abspath(os.path.expanduser(workpath))
-
- CONF['spec'] = os.path.abspath(spec)
- CONF['specpath'], CONF['specnm'] = os.path.split(CONF['spec'])
- CONF['specnm'] = os.path.splitext(CONF['specnm'])[0]
-
- # Add 'specname' to workpath and distpath if they point to PyInstaller homepath.
- if os.path.dirname(distpath) == HOMEPATH:
- distpath = os.path.join(HOMEPATH, CONF['specnm'], os.path.basename(distpath))
- CONF['distpath'] = distpath
- if os.path.dirname(workpath) == HOMEPATH:
- workpath = os.path.join(HOMEPATH, CONF['specnm'], os.path.basename(workpath), CONF['specnm'])
- else:
- workpath = os.path.join(workpath, CONF['specnm'])
- CONF['workpath'] = workpath
-
- CONF['warnfile'] = os.path.join(workpath, 'warn-%s.txt' % CONF['specnm'])
- CONF['dot-file'] = os.path.join(workpath, 'graph-%s.dot' % CONF['specnm'])
- CONF['xref-file'] = os.path.join(workpath, 'xref-%s.html' % CONF['specnm'])
-
- CONF['code_cache'] = dict()
-
- # Clean PyInstaller cache (CONF['cachedir']) and temporary files (workpath) to be able start a clean build.
- if clean_build:
- logger.info('Removing temporary files and cleaning cache in %s', CONF['cachedir'])
- for pth in (CONF['cachedir'], workpath):
- if os.path.exists(pth):
- # Remove all files in 'pth'.
- for f in glob.glob(pth + '/*'):
- # Remove dirs recursively.
- if os.path.isdir(f):
- shutil.rmtree(f)
- else:
- os.remove(f)
-
- # Create DISTPATH and workpath if they does not exist.
- for pth in (CONF['distpath'], CONF['workpath']):
- os.makedirs(pth, exist_ok=True)
-
- # Construct NAMESPACE for running the Python code from .SPEC file.
- # NOTE: Passing NAMESPACE allows to avoid having global variables in this module and makes isolated environment for
- # running tests.
- # NOTE: Defining NAMESPACE allows to map any class to a apecific name for .SPEC.
- # FIXME: Some symbols might be missing. Add them if there are some failures.
- # TODO: What from this .spec API is deprecated and could be removed?
- spec_namespace = {
- # Set of global variables that can be used while processing .spec file. Some of them act as configuration
- # options.
- 'DISTPATH': CONF['distpath'],
- 'HOMEPATH': HOMEPATH,
- 'SPEC': CONF['spec'],
- 'specnm': CONF['specnm'],
- 'SPECPATH': CONF['specpath'],
- 'WARNFILE': CONF['warnfile'],
- 'workpath': CONF['workpath'],
- # PyInstaller classes for .spec.
- 'TOC': TOC, # Kept for backward compatibility even though `TOC` class is deprecated.
- 'Analysis': Analysis,
- 'BUNDLE': BUNDLE,
- 'COLLECT': COLLECT,
- 'EXE': EXE,
- 'MERGE': MERGE,
- 'PYZ': PYZ,
- 'Tree': Tree,
- 'Splash': Splash,
- # Python modules available for .spec.
- 'os': os,
- }
-
- # Execute the specfile. Read it as a binary file...
- try:
- with open(spec, 'rb') as f:
- # ... then let Python determine the encoding, since ``compile`` accepts byte strings.
- code = compile(f.read(), spec, 'exec')
- except FileNotFoundError:
- raise SystemExit(f'ERROR: Spec file "{spec}" not found!')
- exec(code, spec_namespace)
-
- logger.info("Build complete! The results are available in: %s", CONF['distpath'])
-
-
-def __add_options(parser):
- parser.add_argument(
- "--distpath",
- metavar="DIR",
- default=DEFAULT_DISTPATH,
- help="Where to put the bundled app (default: ./dist)",
- )
- parser.add_argument(
- '--workpath',
- default=DEFAULT_WORKPATH,
- help="Where to put all the temporary work files, .log, .pyz and etc. (default: ./build)",
- )
- parser.add_argument(
- '-y',
- '--noconfirm',
- action="store_true",
- default=False,
- help="Replace output directory (default: %s) without asking for confirmation" %
- os.path.join('SPECPATH', 'dist', 'SPECNAME'),
- )
- parser.add_argument(
- '--upx-dir',
- default=None,
- help="Path to UPX utility (default: search the execution path)",
- )
- parser.add_argument(
- '--clean',
- dest='clean_build',
- action='store_true',
- default=False,
- help="Clean PyInstaller cache and remove temporary files before building.",
- )
-
-
-def main(
- pyi_config,
- specfile,
- noconfirm=False,
- distpath=DEFAULT_DISTPATH,
- workpath=DEFAULT_WORKPATH,
- upx_dir=None,
- clean_build=False,
- **kw
-):
- from PyInstaller.config import CONF
- CONF['noconfirm'] = noconfirm
-
- # If configuration dict is supplied - skip configuration step.
- if pyi_config is None:
- import PyInstaller.configure as configure
- CONF.update(configure.get_config(upx_dir=upx_dir))
- else:
- CONF.update(pyi_config)
-
- CONF['ui_admin'] = kw.get('ui_admin', False)
- CONF['ui_access'] = kw.get('ui_uiaccess', False)
-
- build(specfile, distpath, workpath, clean_build)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/datastruct.py b/venv/lib/python3.12/site-packages/PyInstaller/building/datastruct.py
deleted file mode 100755
index ca16286..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/datastruct.py
+++ /dev/null
@@ -1,459 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import os
-import pathlib
-import warnings
-
-from PyInstaller import log as logging
-from PyInstaller.building.utils import _check_guts_eq
-from PyInstaller.utils import misc
-
-logger = logging.getLogger(__name__)
-
-
-def unique_name(entry):
- """
- Return the filename used to enforce uniqueness for the given TOC entry.
-
- Parameters
- ----------
- entry : tuple
-
- Returns
- -------
- unique_name: str
- """
- name, path, typecode = entry
- if typecode in ('BINARY', 'DATA', 'EXTENSION', 'DEPENDENCY'):
- name = os.path.normcase(name)
-
- return name
-
-
-# This class is deprecated and has been replaced by plain lists with explicit normalization (de-duplication) via
-# `normalize_toc` and `normalize_pyz_toc` helper functions.
-class TOC(list):
- """
- TOC (Table of Contents) class is a list of tuples of the form (name, path, typecode).
-
- typecode name path description
- --------------------------------------------------------------------------------------
- EXTENSION Python internal name. Full path name in build. Extension module.
- PYSOURCE Python internal name. Full path name in build. Script.
- PYMODULE Python internal name. Full path name in build. Pure Python module (including __init__ modules).
- PYZ Runtime name. Full path name in build. A .pyz archive (ZlibArchive data structure).
- PKG Runtime name. Full path name in build. A .pkg archive (Carchive data structure).
- BINARY Runtime name. Full path name in build. Shared library.
- DATA Runtime name. Full path name in build. Arbitrary files.
- OPTION The option. Unused. Python runtime option (frozen into executable).
-
- A TOC contains various types of files. A TOC contains no duplicates and preserves order.
- PyInstaller uses TOC data type to collect necessary files bundle them into an executable.
- """
- def __init__(self, initlist=None):
- super().__init__()
-
- # Deprecation warning
- warnings.warn(
- "TOC class is deprecated. Use a plain list of 3-element tuples instead.",
- DeprecationWarning,
- stacklevel=2,
- )
-
- self.filenames = set()
- if initlist:
- for entry in initlist:
- self.append(entry)
-
- def append(self, entry):
- if not isinstance(entry, tuple):
- logger.info("TOC found a %s, not a tuple", entry)
- raise TypeError("Expected tuple, not %s." % type(entry).__name__)
-
- unique = unique_name(entry)
-
- if unique not in self.filenames:
- self.filenames.add(unique)
- super().append(entry)
-
- def insert(self, pos, entry):
- if not isinstance(entry, tuple):
- logger.info("TOC found a %s, not a tuple", entry)
- raise TypeError("Expected tuple, not %s." % type(entry).__name__)
- unique = unique_name(entry)
-
- if unique not in self.filenames:
- self.filenames.add(unique)
- super().insert(pos, entry)
-
- def __add__(self, other):
- result = TOC(self)
- result.extend(other)
- return result
-
- def __radd__(self, other):
- result = TOC(other)
- result.extend(self)
- return result
-
- def __iadd__(self, other):
- for entry in other:
- self.append(entry)
- return self
-
- def extend(self, other):
- # TODO: look if this can be done more efficient with out the loop, e.g. by not using a list as base at all.
- for entry in other:
- self.append(entry)
-
- def __sub__(self, other):
- # Construct new TOC with entries not contained in the other TOC
- other = TOC(other)
- return TOC([entry for entry in self if unique_name(entry) not in other.filenames])
-
- def __rsub__(self, other):
- result = TOC(other)
- return result.__sub__(self)
-
- def __setitem__(self, key, value):
- if isinstance(key, slice):
- if key == slice(None, None, None):
- # special case: set the entire list
- self.filenames = set()
- self.clear()
- self.extend(value)
- return
- else:
- raise KeyError("TOC.__setitem__ doesn't handle slices")
-
- else:
- old_value = self[key]
- old_name = unique_name(old_value)
- self.filenames.remove(old_name)
-
- new_name = unique_name(value)
- if new_name not in self.filenames:
- self.filenames.add(new_name)
- super(TOC, self).__setitem__(key, value)
-
-
-class Target:
- invcnum = 0
-
- def __init__(self):
- from PyInstaller.config import CONF
-
- # Get a (per class) unique number to avoid conflicts between toc objects
- self.invcnum = self.__class__.invcnum
- self.__class__.invcnum += 1
- self.tocfilename = os.path.join(CONF['workpath'], '%s-%02d.toc' % (self.__class__.__name__, self.invcnum))
- self.tocbasename = os.path.basename(self.tocfilename)
- self.dependencies = []
-
- def __postinit__(self):
- """
- Check if the target need to be rebuild and if so, re-assemble.
-
- `__postinit__` is to be called at the end of `__init__` of every subclass of Target. `__init__` is meant to
- setup the parameters and `__postinit__` is checking if rebuild is required and in case calls `assemble()`
- """
- logger.info("checking %s", self.__class__.__name__)
- data = None
- last_build = misc.mtime(self.tocfilename)
- if last_build == 0:
- logger.info("Building %s because %s is non existent", self.__class__.__name__, self.tocbasename)
- else:
- try:
- data = misc.load_py_data_struct(self.tocfilename)
- except Exception:
- logger.info("Building because %s is bad", self.tocbasename)
- else:
- # create a dict for easier access
- data = dict(zip((g[0] for g in self._GUTS), data))
- # assemble if previous data was not found or is outdated
- if not data or self._check_guts(data, last_build):
- self.assemble()
- self._save_guts()
-
- _GUTS = []
-
- def _check_guts(self, data, last_build):
- """
- Returns True if rebuild/assemble is required.
- """
- if len(data) != len(self._GUTS):
- logger.info("Building because %s is bad", self.tocbasename)
- return True
- for attr, func in self._GUTS:
- if func is None:
- # no check for this value
- continue
- if func(attr, data[attr], getattr(self, attr), last_build):
- return True
- return False
-
- def _save_guts(self):
- """
- Save the input parameters and the work-product of this run to maybe avoid regenerating it later.
- """
- data = tuple(getattr(self, g[0]) for g in self._GUTS)
- misc.save_py_data_struct(self.tocfilename, data)
-
-
-class Tree(Target, list):
- """
- This class is a way of creating a TOC (Table of Contents) list that describes some or all of the files within a
- directory.
- """
- def __init__(self, root=None, prefix=None, excludes=None, typecode='DATA'):
- """
- root
- The root of the tree (on the build system).
- prefix
- Optional prefix to the names of the target system.
- excludes
- A list of names to exclude. Two forms are allowed:
-
- name
- Files with this basename will be excluded (do not include the path).
- *.ext
- Any file with the given extension will be excluded.
- typecode
- The typecode to be used for all files found in this tree. See the TOC class for for information about
- the typcodes.
- """
- Target.__init__(self)
- list.__init__(self)
- self.root = root
- self.prefix = prefix
- self.excludes = excludes
- self.typecode = typecode
- if excludes is None:
- self.excludes = []
- self.__postinit__()
-
- _GUTS = ( # input parameters
- ('root', _check_guts_eq),
- ('prefix', _check_guts_eq),
- ('excludes', _check_guts_eq),
- ('typecode', _check_guts_eq),
- ('data', None), # tested below
- # no calculated/analysed values
- )
-
- def _check_guts(self, data, last_build):
- if Target._check_guts(self, data, last_build):
- return True
- # Walk the collected directories as check if they have been changed - which means files have been added or
- # removed. There is no need to check for the files, since `Tree` is only about the directory contents (which is
- # the list of files).
- stack = [data['root']]
- while stack:
- d = stack.pop()
- if misc.mtime(d) > last_build:
- logger.info("Building %s because directory %s changed", self.tocbasename, d)
- return True
- for nm in os.listdir(d):
- path = os.path.join(d, nm)
- if os.path.isdir(path):
- stack.append(path)
- self[:] = data['data'] # collected files
- return False
-
- def _save_guts(self):
- # Use the attribute `data` to save the list
- self.data = self
- super()._save_guts()
- del self.data
-
- def assemble(self):
- logger.info("Building Tree %s", self.tocbasename)
- stack = [(self.root, self.prefix)]
- excludes = set()
- xexcludes = set()
- for name in self.excludes:
- if name.startswith('*'):
- xexcludes.add(name[1:])
- else:
- excludes.add(name)
- result = []
- while stack:
- dir, prefix = stack.pop()
- for filename in os.listdir(dir):
- if filename in excludes:
- continue
- ext = os.path.splitext(filename)[1]
- if ext in xexcludes:
- continue
- fullfilename = os.path.join(dir, filename)
- if prefix:
- resfilename = os.path.join(prefix, filename)
- else:
- resfilename = filename
- if os.path.isdir(fullfilename):
- stack.append((fullfilename, resfilename))
- else:
- result.append((resfilename, fullfilename, self.typecode))
- self[:] = result
-
-
-def normalize_toc(toc):
- # Default priority: 0
- _TOC_TYPE_PRIORITIES = {
- # DEPENDENCY entries need to replace original entries, so they need the highest priority.
- 'DEPENDENCY': 3,
- # SYMLINK entries have higher priority than other regular entries
- 'SYMLINK': 2,
- # BINARY/EXTENSION entries undergo additional processing, so give them precedence over DATA and other entries.
- 'BINARY': 1,
- 'EXTENSION': 1,
- }
-
- def _type_case_normalization_fcn(typecode):
- # Case-normalize all entries except OPTION.
- return typecode not in {
- "OPTION",
- }
-
- return _normalize_toc(toc, _TOC_TYPE_PRIORITIES, _type_case_normalization_fcn)
-
-
-def normalize_pyz_toc(toc):
- # Default priority: 0
- _TOC_TYPE_PRIORITIES = {
- # Ensure that entries with higher optimization level take precedence.
- 'PYMODULE-2': 2,
- 'PYMODULE-1': 1,
- 'PYMODULE': 0,
- }
-
- return _normalize_toc(toc, _TOC_TYPE_PRIORITIES)
-
-
-def _normalize_toc(toc, toc_type_priorities, type_case_normalization_fcn=lambda typecode: False):
- options_toc = []
- tmp_toc = dict()
- for dest_name, src_name, typecode in toc:
- # Exempt OPTION entries from de-duplication processing. Some options might allow being specified multiple times.
- if typecode == 'OPTION':
- options_toc.append(((dest_name, src_name, typecode)))
- continue
-
- # Always sanitize the dest_name with `os.path.normpath` to remove any local loops with parent directory path
- # components. `pathlib` does not seem to offer equivalent functionality.
- dest_name = os.path.normpath(dest_name)
-
- # Normalize the destination name for uniqueness. Use `pathlib.PurePath` to ensure that keys are both
- # case-normalized (on OSes where applicable) and directory-separator normalized (just in case).
- if type_case_normalization_fcn(typecode):
- entry_key = pathlib.PurePath(dest_name)
- else:
- entry_key = dest_name
-
- existing_entry = tmp_toc.get(entry_key)
- if existing_entry is None:
- # Entry does not exist - insert
- tmp_toc[entry_key] = (dest_name, src_name, typecode)
- else:
- # Entry already exists - replace if its typecode has higher priority
- _, _, existing_typecode = existing_entry
- if toc_type_priorities.get(typecode, 0) > toc_type_priorities.get(existing_typecode, 0):
- tmp_toc[entry_key] = (dest_name, src_name, typecode)
-
- # Return the items as list. The order matches the original order due to python dict maintaining the insertion order.
- # The exception are OPTION entries, which are now placed at the beginning of the TOC.
- return options_toc + list(tmp_toc.values())
-
-
-def toc_process_symbolic_links(toc):
- """
- Process TOC entries and replace entries whose files are symbolic links with SYMLINK entries (provided original file
- is also being collected).
- """
- # Dictionary of all destination names, for a fast look-up.
- all_dest_files = set([dest_name for dest_name, src_name, typecode in toc])
-
- # Process the TOC to create SYMLINK entries
- new_toc = []
- for entry in toc:
- dest_name, src_name, typecode = entry
-
- # Skip entries that are already symbolic links
- if typecode == 'SYMLINK':
- new_toc.append(entry)
- continue
-
- # Skip entries without valid source name (e.g., OPTION)
- if not src_name:
- new_toc.append(entry)
- continue
-
- # Source path is not a symbolic link (i.e., it is a regular file or directory)
- if not os.path.islink(src_name):
- new_toc.append(entry)
- continue
-
- # Try preserving the symbolic link, under strict relative-relationship-preservation check
- symlink_entry = _try_preserving_symbolic_link(dest_name, src_name, all_dest_files)
-
- if symlink_entry:
- new_toc.append(symlink_entry)
- else:
- new_toc.append(entry)
-
- return new_toc
-
-
-def _try_preserving_symbolic_link(dest_name, src_name, all_dest_files):
- seen_src_files = set()
-
- # Set initial values for the loop
- ref_src_file = src_name
- ref_dest_file = dest_name
-
- while True:
- # Guard against cyclic links...
- if ref_src_file in seen_src_files:
- break
- seen_src_files.add(ref_src_file)
-
- # Stop when referenced source file is not a symbolic link anymore.
- if not os.path.islink(ref_src_file):
- break
-
- # Read the symbolic link's target, but do not fully resolve it using os.path.realpath(), because there might be
- # other symbolic links involved as well (for example, /lib64 -> /usr/lib64 whereas we are processing
- # /lib64/liba.so -> /lib64/liba.so.1)
- symlink_target = os.readlink(ref_src_file)
- if os.path.isabs(symlink_target):
- break # We support only relative symbolic links.
-
- ref_dest_file = os.path.join(os.path.dirname(ref_dest_file), symlink_target)
- ref_dest_file = os.path.normpath(ref_dest_file) # remove any '..'
-
- ref_src_file = os.path.join(os.path.dirname(ref_src_file), symlink_target)
- ref_src_file = os.path.normpath(ref_src_file) # remove any '..'
-
- # Check if referenced destination file is valid (i.e., we are collecting a file under referenced name).
- if ref_dest_file in all_dest_files:
- # Sanity check: original source name and current referenced source name must, after complete resolution,
- # point to the same file.
- if os.path.realpath(src_name) == os.path.realpath(ref_src_file):
- # Compute relative link for the destination file (might be modified, if we went over non-collected
- # intermediate links).
- rel_link = os.path.relpath(ref_dest_file, os.path.dirname(dest_name))
- return dest_name, rel_link, 'SYMLINK'
-
- # If referenced destination is not valid, do another iteration in case we are dealing with chained links and we
- # are not collecting an intermediate link...
-
- return None
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/icon.py b/venv/lib/python3.12/site-packages/PyInstaller/building/icon.py
deleted file mode 100755
index de298f2..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/icon.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2022-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from typing import Tuple
-
-import os
-import hashlib
-
-
-def normalize_icon_type(icon_path: str, allowed_types: Tuple[str], convert_type: str, workpath: str) -> str:
- """
- Returns a valid icon path or raises an Exception on error.
- Ensures that the icon exists, and, if necessary, attempts to convert it to correct OS-specific format using Pillow.
-
- Takes:
- icon_path - the icon given by the user
- allowed_types - a tuple of icon formats that should be allowed through
- EX: ("ico", "exe")
- convert_type - the type to attempt conversion too if necessary
- EX: "icns"
- workpath - the temp directory to save any newly generated image files
- """
-
- # explicitly error if file not found
- if not os.path.exists(icon_path):
- raise FileNotFoundError(f"Icon input file {icon_path} not found")
-
- _, extension = os.path.splitext(icon_path)
- extension = extension[1:] # get rid of the "." in ".whatever"
-
- # if the file is already in the right format, pass it back unchanged
- if extension in allowed_types:
- # Check both the suffix and the header of the file to guard against the user confusing image types.
- signatures = hex_signatures[extension]
- with open(icon_path, "rb") as f:
- header = f.read(max(len(s) for s in signatures))
- if any(list(header)[:len(s)] == s for s in signatures):
- return icon_path
-
- # The icon type is wrong! Let's try and import PIL
- try:
- from PIL import Image as PILImage
- import PIL
-
- except ImportError:
- raise ValueError(
- f"Received icon image '{icon_path}' which exists but is not in the correct format. On this platform, "
- f"only {allowed_types} images may be used as icons. If Pillow is installed, automatic conversion will "
- f"be attempted. Please install Pillow or convert your '{extension}' file to one of {allowed_types} "
- f"and try again."
- )
-
- # Let's try to use PIL to convert the icon file type
- try:
- _generated_name = f"generated-{hashlib.sha256(icon_path.encode()).hexdigest()}.{convert_type}"
- generated_icon = os.path.join(workpath, _generated_name)
- with PILImage.open(icon_path) as im:
- # If an image uses a custom palette + transparency, convert it to RGBA for a better alpha mask depth.
- if im.mode == "P" and im.info.get("transparency", None) is not None:
- # The bit depth of the alpha channel will be higher, and the images will look better when eventually
- # scaled to multiple sizes (16,24,32,..) for the ICO format for example.
- im = im.convert("RGBA")
- im.save(generated_icon)
- icon_path = generated_icon
- except PIL.UnidentifiedImageError:
- raise ValueError(
- f"Something went wrong converting icon image '{icon_path}' to '.{convert_type}' with Pillow, "
- f"perhaps the image format is unsupported. Try again with a different file or use a file that can "
- f"be used without conversion on this platform: {allowed_types}"
- )
-
- return icon_path
-
-
-# Possible initial bytes of icon types PyInstaller needs to be able to recognise.
-# Taken from: https://en.wikipedia.org/wiki/List_of_file_signatures
-hex_signatures = {
- "png": [[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]],
- "exe": [[0x4D, 0x5A], [0x5A, 0x4D]],
- "ico": [[0x00, 0x00, 0x01, 0x00]],
- "icns": [[0x69, 0x63, 0x6e, 0x73]],
-}
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/makespec.py b/venv/lib/python3.12/site-packages/PyInstaller/building/makespec.py
deleted file mode 100755
index 0aad832..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/makespec.py
+++ /dev/null
@@ -1,909 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Automatically build spec files containing a description of the project.
-"""
-
-import argparse
-import os
-import re
-import sys
-
-from PyInstaller import DEFAULT_SPECPATH, HOMEPATH
-from PyInstaller import log as logging
-from PyInstaller.building.templates import bundleexetmplt, bundletmplt, onedirtmplt, onefiletmplt, splashtmpl
-from PyInstaller.compat import is_darwin, is_win
-
-logger = logging.getLogger(__name__)
-
-# This list gives valid choices for the ``--debug`` command-line option, except for the ``all`` choice.
-DEBUG_ARGUMENT_CHOICES = ['imports', 'bootloader', 'noarchive']
-# This is the ``all`` choice.
-DEBUG_ALL_CHOICE = ['all']
-
-
-def escape_win_filepath(path):
- # escape all \ with another \ after using normpath to clean up the path
- return os.path.normpath(path).replace('\\', '\\\\')
-
-
-def make_path_spec_relative(filename, spec_dir):
- """
- Make the filename relative to the directory containing .spec file if filename is relative and not absolute.
- Otherwise keep filename untouched.
- """
- if os.path.isabs(filename):
- return filename
- else:
- filename = os.path.abspath(filename)
- # Make it relative.
- filename = os.path.relpath(filename, start=spec_dir)
- return filename
-
-
-# Support for trying to avoid hard-coded paths in the .spec files. Eg, all files rooted in the Installer directory tree
-# will be written using "HOMEPATH", thus allowing this spec file to be used with any Installer installation. Same thing
-# could be done for other paths too.
-path_conversions = ((HOMEPATH, "HOMEPATH"),)
-
-
-class SourceDestAction(argparse.Action):
- """
- A command line option which takes multiple source:dest pairs.
- """
- def __init__(self, *args, default=None, metavar=None, **kwargs):
- super().__init__(*args, default=[], metavar='SOURCE:DEST', **kwargs)
-
- def __call__(self, parser, namespace, value, option_string=None):
- try:
- # Find the only separator that isn't a Windows drive.
- separator, = (m for m in re.finditer(rf"(^\w:[/\\])|[:{os.pathsep}]", value) if not m[1])
- except ValueError:
- # Split into SRC and DEST failed, wrong syntax
- raise argparse.ArgumentError(self, f'Wrong syntax, should be {self.option_strings[0]}=SOURCE:DEST')
- src = value[:separator.start()]
- dest = value[separator.end():]
- if not src or not dest:
- # Syntax was correct, but one or both of SRC and DEST was not given
- raise argparse.ArgumentError(self, "You have to specify both SOURCE and DEST")
-
- # argparse is not particularly smart with copy by reference typed defaults. If the current list is the default,
- # replace it before modifying it to avoid changing the default.
- if getattr(namespace, self.dest) is self.default:
- setattr(namespace, self.dest, [])
- getattr(namespace, self.dest).append((src, dest))
-
-
-def make_variable_path(filename, conversions=path_conversions):
- if not os.path.isabs(filename):
- # os.path.commonpath can not compare relative and absolute paths, and if filename is not absolute, none of the
- # paths in conversions will match anyway.
- return None, filename
- for (from_path, to_name) in conversions:
- assert os.path.abspath(from_path) == from_path, ("path '%s' should already be absolute" % from_path)
- try:
- common_path = os.path.commonpath([filename, from_path])
- except ValueError:
- # Per https://docs.python.org/3/library/os.path.html#os.path.commonpath, this raises ValueError in several
- # cases which prevent computing a common path.
- common_path = None
- if common_path == from_path:
- rest = filename[len(from_path):]
- if rest.startswith(('\\', '/')):
- rest = rest[1:]
- return to_name, rest
- return None, filename
-
-
-def removed_key_option(x):
- from PyInstaller.exceptions import RemovedCipherFeatureError
- raise RemovedCipherFeatureError("Please remove your --key=xxx argument.")
-
-
-class _RemovedFlagAction(argparse.Action):
- def __init__(self, *args, **kwargs):
- kwargs["help"] = argparse.SUPPRESS
- kwargs["nargs"] = 0
- super().__init__(*args, **kwargs)
-
-
-class _RemovedNoEmbedManifestAction(_RemovedFlagAction):
- def __call__(self, *args, **kwargs):
- from PyInstaller.exceptions import RemovedExternalManifestError
- raise RemovedExternalManifestError("Please remove your --no-embed-manifest argument.")
-
-
-class _RemovedWinPrivateAssembliesAction(_RemovedFlagAction):
- def __call__(self, *args, **kwargs):
- from PyInstaller.exceptions import RemovedWinSideBySideSupportError
- raise RemovedWinSideBySideSupportError("Please remove your --win-private-assemblies argument.")
-
-
-class _RemovedWinNoPreferRedirectsAction(_RemovedFlagAction):
- def __call__(self, *args, **kwargs):
- from PyInstaller.exceptions import RemovedWinSideBySideSupportError
- raise RemovedWinSideBySideSupportError("Please remove your --win-no-prefer-redirects argument.")
-
-
-# An object used in place of a "path string", which knows how to repr() itself using variable names instead of
-# hard-coded paths.
-class Path:
- def __init__(self, *parts):
- self.path = os.path.join(*parts)
- self.variable_prefix = self.filename_suffix = None
-
- def __repr__(self):
- if self.filename_suffix is None:
- self.variable_prefix, self.filename_suffix = make_variable_path(self.path)
- if self.variable_prefix is None:
- return repr(self.path)
- return "os.path.join(" + self.variable_prefix + "," + repr(self.filename_suffix) + ")"
-
-
-# An object used to construct extra preamble for the spec file, in order to accommodate extra collect_*() calls from the
-# command-line
-class Preamble:
- def __init__(
- self, datas, binaries, hiddenimports, collect_data, collect_binaries, collect_submodules, collect_all,
- copy_metadata, recursive_copy_metadata
- ):
- # Initialize with literal values - will be switched to preamble variable name later, if necessary
- self.binaries = binaries or []
- self.hiddenimports = hiddenimports or []
- self.datas = datas or []
- # Preamble content
- self.content = []
-
- # Import statements
- if collect_data:
- self._add_hookutil_import('collect_data_files')
- if collect_binaries:
- self._add_hookutil_import('collect_dynamic_libs')
- if collect_submodules:
- self._add_hookutil_import('collect_submodules')
- if collect_all:
- self._add_hookutil_import('collect_all')
- if copy_metadata or recursive_copy_metadata:
- self._add_hookutil_import('copy_metadata')
- if self.content:
- self.content += [''] # empty line to separate the section
- # Variables
- if collect_data or copy_metadata or collect_all or recursive_copy_metadata:
- self._add_var('datas', self.datas)
- self.datas = 'datas' # switch to variable
- if collect_binaries or collect_all:
- self._add_var('binaries', self.binaries)
- self.binaries = 'binaries' # switch to variable
- if collect_submodules or collect_all:
- self._add_var('hiddenimports', self.hiddenimports)
- self.hiddenimports = 'hiddenimports' # switch to variable
- # Content - collect_data_files
- for entry in collect_data:
- self._add_collect_data(entry)
- # Content - copy_metadata
- for entry in copy_metadata:
- self._add_copy_metadata(entry)
- # Content - copy_metadata(..., recursive=True)
- for entry in recursive_copy_metadata:
- self._add_recursive_copy_metadata(entry)
- # Content - collect_binaries
- for entry in collect_binaries:
- self._add_collect_binaries(entry)
- # Content - collect_submodules
- for entry in collect_submodules:
- self._add_collect_submodules(entry)
- # Content - collect_all
- for entry in collect_all:
- self._add_collect_all(entry)
- # Merge
- if self.content and self.content[-1] != '':
- self.content += [''] # empty line
- self.content = '\n'.join(self.content)
-
- def _add_hookutil_import(self, name):
- self.content += ['from PyInstaller.utils.hooks import {0}'.format(name)]
-
- def _add_var(self, name, initial_value):
- self.content += ['{0} = {1}'.format(name, initial_value)]
-
- def _add_collect_data(self, name):
- self.content += ['datas += collect_data_files(\'{0}\')'.format(name)]
-
- def _add_copy_metadata(self, name):
- self.content += ['datas += copy_metadata(\'{0}\')'.format(name)]
-
- def _add_recursive_copy_metadata(self, name):
- self.content += ['datas += copy_metadata(\'{0}\', recursive=True)'.format(name)]
-
- def _add_collect_binaries(self, name):
- self.content += ['binaries += collect_dynamic_libs(\'{0}\')'.format(name)]
-
- def _add_collect_submodules(self, name):
- self.content += ['hiddenimports += collect_submodules(\'{0}\')'.format(name)]
-
- def _add_collect_all(self, name):
- self.content += [
- 'tmp_ret = collect_all(\'{0}\')'.format(name),
- 'datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2]'
- ]
-
-
-def __add_options(parser):
- """
- Add the `Makespec` options to a option-parser instance or a option group.
- """
- g = parser.add_argument_group('What to generate')
- g.add_argument(
- "-D",
- "--onedir",
- dest="onefile",
- action="store_false",
- default=None,
- help="Create a one-folder bundle containing an executable (default)",
- )
- g.add_argument(
- "-F",
- "--onefile",
- dest="onefile",
- action="store_true",
- default=None,
- help="Create a one-file bundled executable.",
- )
- g.add_argument(
- "--specpath",
- metavar="DIR",
- help="Folder to store the generated spec file (default: current directory)",
- )
- g.add_argument(
- "-n",
- "--name",
- help="Name to assign to the bundled app and spec file (default: first script's basename)",
- )
- g.add_argument(
- "--contents-directory",
- help="For onedir builds only, specify the name of the directory in which all supporting files (i.e. everything "
- "except the executable itself) will be placed in. Use \".\" to re-enable old onedir layout without contents "
- "directory.",
- )
-
- g = parser.add_argument_group('What to bundle, where to search')
- g.add_argument(
- '--add-data',
- action=SourceDestAction,
- dest='datas',
- help="Additional data files or directories containing data files to be added to the application. The argument "
- 'value should be in form of "source:dest_dir", where source is the path to file (or directory) to be '
- "collected, dest_dir is the destination directory relative to the top-level application directory, and both "
- "paths are separated by a colon (:). To put a file in the top-level application directory, use . as a "
- "dest_dir. This option can be used multiple times."
- )
- g.add_argument(
- '--add-binary',
- action=SourceDestAction,
- dest="binaries",
- help='Additional binary files to be added to the executable. See the ``--add-data`` option for the format. '
- 'This option can be used multiple times.',
- )
- g.add_argument(
- "-p",
- "--paths",
- dest="pathex",
- metavar="DIR",
- action="append",
- default=[],
- help="A path to search for imports (like using PYTHONPATH). Multiple paths are allowed, separated by ``%s``, "
- "or use this option multiple times. Equivalent to supplying the ``pathex`` argument in the spec file." %
- repr(os.pathsep),
- )
- g.add_argument(
- '--hidden-import',
- '--hiddenimport',
- action='append',
- default=[],
- metavar="MODULENAME",
- dest='hiddenimports',
- help='Name an import not visible in the code of the script(s). This option can be used multiple times.',
- )
- g.add_argument(
- '--collect-submodules',
- action="append",
- default=[],
- metavar="MODULENAME",
- dest='collect_submodules',
- help='Collect all submodules from the specified package or module. This option can be used multiple times.',
- )
- g.add_argument(
- '--collect-data',
- '--collect-datas',
- action="append",
- default=[],
- metavar="MODULENAME",
- dest='collect_data',
- help='Collect all data from the specified package or module. This option can be used multiple times.',
- )
- g.add_argument(
- '--collect-binaries',
- action="append",
- default=[],
- metavar="MODULENAME",
- dest='collect_binaries',
- help='Collect all binaries from the specified package or module. This option can be used multiple times.',
- )
- g.add_argument(
- '--collect-all',
- action="append",
- default=[],
- metavar="MODULENAME",
- dest='collect_all',
- help='Collect all submodules, data files, and binaries from the specified package or module. This option can '
- 'be used multiple times.',
- )
- g.add_argument(
- '--copy-metadata',
- action="append",
- default=[],
- metavar="PACKAGENAME",
- dest='copy_metadata',
- help='Copy metadata for the specified package. This option can be used multiple times.',
- )
- g.add_argument(
- '--recursive-copy-metadata',
- action="append",
- default=[],
- metavar="PACKAGENAME",
- dest='recursive_copy_metadata',
- help='Copy metadata for the specified package and all its dependencies. This option can be used multiple '
- 'times.',
- )
- g.add_argument(
- "--additional-hooks-dir",
- action="append",
- dest="hookspath",
- default=[],
- help="An additional path to search for hooks. This option can be used multiple times.",
- )
- g.add_argument(
- '--runtime-hook',
- action='append',
- dest='runtime_hooks',
- default=[],
- help='Path to a custom runtime hook file. A runtime hook is code that is bundled with the executable and is '
- 'executed before any other code or module to set up special features of the runtime environment. This option '
- 'can be used multiple times.',
- )
- g.add_argument(
- '--exclude-module',
- dest='excludes',
- action='append',
- default=[],
- help='Optional module or package (the Python name, not the path name) that will be ignored (as though it was '
- 'not found). This option can be used multiple times.',
- )
- g.add_argument(
- '--key',
- dest='key',
- help=argparse.SUPPRESS,
- type=removed_key_option,
- )
- g.add_argument(
- '--splash',
- dest='splash',
- metavar="IMAGE_FILE",
- help="(EXPERIMENTAL) Add an splash screen with the image IMAGE_FILE to the application. The splash screen can "
- "display progress updates while unpacking.",
- )
-
- g = parser.add_argument_group('How to generate')
- g.add_argument(
- "-d",
- "--debug",
- # If this option is not specified, then its default value is an empty list (no debug options selected).
- default=[],
- # Note that ``nargs`` is omitted. This produces a single item not stored in a list, as opposed to a list
- # containing one item, as per `nargs `_.
- nargs=None,
- # The options specified must come from this list.
- choices=DEBUG_ALL_CHOICE + DEBUG_ARGUMENT_CHOICES,
- # Append choice, rather than storing them (which would overwrite any previous selections).
- action='append',
- # Allow newlines in the help text; see the ``_SmartFormatter`` in ``__main__.py``.
- help=(
- "R|Provide assistance with debugging a frozen\n"
- "application. This argument may be provided multiple\n"
- "times to select several of the following options.\n"
- "\n"
- "- all: All three of the following options.\n"
- "\n"
- "- imports: specify the -v option to the underlying\n"
- " Python interpreter, causing it to print a message\n"
- " each time a module is initialized, showing the\n"
- " place (filename or built-in module) from which it\n"
- " is loaded. See\n"
- " https://docs.python.org/3/using/cmdline.html#id4.\n"
- "\n"
- "- bootloader: tell the bootloader to issue progress\n"
- " messages while initializing and starting the\n"
- " bundled app. Used to diagnose problems with\n"
- " missing imports.\n"
- "\n"
- "- noarchive: instead of storing all frozen Python\n"
- " source files as an archive inside the resulting\n"
- " executable, store them as files in the resulting\n"
- " output directory.\n"
- "\n"
- ),
- )
- g.add_argument(
- '--optimize',
- dest='optimize',
- metavar='LEVEL',
- type=int,
- choices={-1, 0, 1, 2},
- default=None,
- help='Bytecode optimization level used for collected python modules and scripts. For details, see the section '
- '“Bytecode Optimization Level” in PyInstaller manual.',
- )
- g.add_argument(
- '--python-option',
- dest='python_options',
- metavar='PYTHON_OPTION',
- action='append',
- default=[],
- help='Specify a command-line option to pass to the Python interpreter at runtime. Currently supports '
- '"v" (equivalent to "--debug imports"), "u", "W ", "X ", and "hash_seed=". '
- 'For details, see the section "Specifying Python Interpreter Options" in PyInstaller manual.',
- )
- g.add_argument(
- "-s",
- "--strip",
- action="store_true",
- help="Apply a symbol-table strip to the executable and shared libs (not recommended for Windows)",
- )
- g.add_argument(
- "--noupx",
- action="store_true",
- default=False,
- help="Do not use UPX even if it is available (works differently between Windows and *nix)",
- )
- g.add_argument(
- "--upx-exclude",
- dest="upx_exclude",
- metavar="FILE",
- action="append",
- help="Prevent a binary from being compressed when using upx. This is typically used if upx corrupts certain "
- "binaries during compression. FILE is the filename of the binary without path. This option can be used "
- "multiple times.",
- )
-
- g = parser.add_argument_group('Windows and macOS specific options')
- g.add_argument(
- "-c",
- "--console",
- "--nowindowed",
- dest="console",
- action="store_true",
- default=None,
- help="Open a console window for standard i/o (default). On Windows this option has no effect if the first "
- "script is a '.pyw' file.",
- )
- g.add_argument(
- "-w",
- "--windowed",
- "--noconsole",
- dest="console",
- action="store_false",
- default=None,
- help="Windows and macOS: do not provide a console window for standard i/o. On macOS this also triggers "
- "building a macOS .app bundle. On Windows this option is automatically set if the first script is a '.pyw' "
- "file. This option is ignored on *NIX systems.",
- )
- g.add_argument(
- "--hide-console",
- type=str,
- choices={'hide-early', 'hide-late', 'minimize-early', 'minimize-late'},
- default=None,
- help="Windows only: in console-enabled executable, have bootloader automatically hide or minimize the console "
- "window if the program owns the console window (i.e., was not launched from an existing console window).",
- )
- g.add_argument(
- "-i",
- "--icon",
- action='append',
- dest="icon_file",
- metavar='',
- help="FILE.ico: apply the icon to a Windows executable. FILE.exe,ID: extract the icon with ID from an exe. "
- "FILE.icns: apply the icon to the .app bundle on macOS. If an image file is entered that isn't in the "
- "platform format (ico on Windows, icns on Mac), PyInstaller tries to use Pillow to translate the icon into "
- "the correct format (if Pillow is installed). Use \"NONE\" to not apply any icon, thereby making the OS show "
- "some default (default: apply PyInstaller's icon). This option can be used multiple times.",
- )
- g.add_argument(
- "--disable-windowed-traceback",
- dest="disable_windowed_traceback",
- action="store_true",
- default=False,
- help="Disable traceback dump of unhandled exception in windowed (noconsole) mode (Windows and macOS only), "
- "and instead display a message that this feature is disabled.",
- )
-
- g = parser.add_argument_group('Windows specific options')
- g.add_argument(
- "--version-file",
- dest="version_file",
- metavar="FILE",
- help="Add a version resource from FILE to the exe.",
- )
- g.add_argument(
- "--manifest",
- metavar="",
- help="Add manifest FILE or XML to the exe.",
- )
- g.add_argument(
- "-m",
- dest="shorthand_manifest",
- metavar="",
- help="Deprecated shorthand for --manifest.",
- )
- g.add_argument(
- "--no-embed-manifest",
- action=_RemovedNoEmbedManifestAction,
- )
- g.add_argument(
- "-r",
- "--resource",
- dest="resources",
- metavar="RESOURCE",
- action="append",
- default=[],
- help="Add or update a resource to a Windows executable. The RESOURCE is one to four items, "
- "FILE[,TYPE[,NAME[,LANGUAGE]]]. FILE can be a data file or an exe/dll. For data files, at least TYPE and NAME "
- "must be specified. LANGUAGE defaults to 0 or may be specified as wildcard * to update all resources of the "
- "given TYPE and NAME. For exe/dll files, all resources from FILE will be added/updated to the final executable "
- "if TYPE, NAME and LANGUAGE are omitted or specified as wildcard *. This option can be used multiple times.",
- )
- g.add_argument(
- '--uac-admin',
- dest='uac_admin',
- action="store_true",
- default=False,
- help="Using this option creates a Manifest that will request elevation upon application start.",
- )
- g.add_argument(
- '--uac-uiaccess',
- dest='uac_uiaccess',
- action="store_true",
- default=False,
- help="Using this option allows an elevated application to work with Remote Desktop.",
- )
-
- g = parser.add_argument_group('Windows Side-by-side Assembly searching options (advanced)')
- g.add_argument(
- "--win-private-assemblies",
- action=_RemovedWinPrivateAssembliesAction,
- )
- g.add_argument(
- "--win-no-prefer-redirects",
- action=_RemovedWinNoPreferRedirectsAction,
- )
-
- g = parser.add_argument_group('macOS specific options')
- g.add_argument(
- "--argv-emulation",
- dest="argv_emulation",
- action="store_true",
- default=False,
- help="Enable argv emulation for macOS app bundles. If enabled, the initial open document/URL event is "
- "processed by the bootloader and the passed file paths or URLs are appended to sys.argv.",
- )
-
- g.add_argument(
- '--osx-bundle-identifier',
- dest='bundle_identifier',
- help="macOS .app bundle identifier is used as the default unique program name for code signing purposes. "
- "The usual form is a hierarchical name in reverse DNS notation. For example: com.mycompany.department.appname "
- "(default: first script's basename)",
- )
-
- g.add_argument(
- '--target-architecture',
- '--target-arch',
- dest='target_arch',
- metavar='ARCH',
- default=None,
- help="Target architecture (macOS only; valid values: x86_64, arm64, universal2). Enables switching between "
- "universal2 and single-arch version of frozen application (provided python installation supports the target "
- "architecture). If not target architecture is not specified, the current running architecture is targeted.",
- )
-
- g.add_argument(
- '--codesign-identity',
- dest='codesign_identity',
- metavar='IDENTITY',
- default=None,
- help="Code signing identity (macOS only). Use the provided identity to sign collected binaries and generated "
- "executable. If signing identity is not provided, ad-hoc signing is performed instead.",
- )
-
- g.add_argument(
- '--osx-entitlements-file',
- dest='entitlements_file',
- metavar='FILENAME',
- default=None,
- help="Entitlements file to use when code-signing the collected binaries (macOS only).",
- )
-
- g = parser.add_argument_group('Rarely used special options')
- g.add_argument(
- "--runtime-tmpdir",
- dest="runtime_tmpdir",
- metavar="PATH",
- help="Where to extract libraries and support files in `onefile` mode. If this option is given, the bootloader "
- "will ignore any temp-folder location defined by the run-time OS. The ``_MEIxxxxxx``-folder will be created "
- "here. Please use this option only if you know what you are doing. Note that on POSIX systems, PyInstaller's "
- "bootloader does NOT perform shell-style environment variable expansion on the given path string. Therefore, "
- "using environment variables (e.g., ``~`` or ``$HOME``) in path will NOT work.",
- )
- g.add_argument(
- "--bootloader-ignore-signals",
- action="store_true",
- default=False,
- help="Tell the bootloader to ignore signals rather than forwarding them to the child process. Useful in "
- "situations where for example a supervisor process signals both the bootloader and the child (e.g., via a "
- "process group) to avoid signalling the child twice.",
- )
-
-
-def main(
- scripts,
- name=None,
- onefile=False,
- console=True,
- debug=[],
- python_options=[],
- strip=False,
- noupx=False,
- upx_exclude=None,
- runtime_tmpdir=None,
- contents_directory=None,
- pathex=[],
- version_file=None,
- specpath=None,
- bootloader_ignore_signals=False,
- disable_windowed_traceback=False,
- datas=[],
- binaries=[],
- icon_file=None,
- manifest=None,
- resources=[],
- bundle_identifier=None,
- hiddenimports=[],
- hookspath=[],
- runtime_hooks=[],
- excludes=[],
- uac_admin=False,
- uac_uiaccess=False,
- collect_submodules=[],
- collect_binaries=[],
- collect_data=[],
- collect_all=[],
- copy_metadata=[],
- splash=None,
- recursive_copy_metadata=[],
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None,
- argv_emulation=False,
- hide_console=None,
- optimize=None,
- **_kwargs
-):
- # Default values for onefile and console when not explicitly specified on command-line (indicated by None)
- if onefile is None:
- onefile = False
-
- if console is None:
- console = True
-
- # If appname is not specified - use the basename of the main script as name.
- if name is None:
- name = os.path.splitext(os.path.basename(scripts[0]))[0]
-
- # If specpath not specified - use default value - current working directory.
- if specpath is None:
- specpath = DEFAULT_SPECPATH
- else:
- # Expand starting tilde into user's home directory, as a work-around for tilde not being expanded by shell when
- # using `--specpath=~/path/abc` instead of `--specpath ~/path/abc` (or when the path argument is quoted).
- specpath = os.path.expanduser(specpath)
- # If cwd is the root directory of PyInstaller, generate the .spec file in ./appname/ subdirectory.
- if specpath == HOMEPATH:
- specpath = os.path.join(HOMEPATH, name)
- # Create directory tree if missing.
- if not os.path.exists(specpath):
- os.makedirs(specpath)
-
- # Handle additional EXE options.
- exe_options = ''
- if version_file:
- exe_options += "\n version='%s'," % escape_win_filepath(version_file)
- if uac_admin:
- exe_options += "\n uac_admin=True,"
- if uac_uiaccess:
- exe_options += "\n uac_uiaccess=True,"
- if icon_file:
- # Icon file for Windows.
- # On Windows, the default icon is embedded in the bootloader executable.
- if icon_file[0] == 'NONE':
- exe_options += "\n icon='NONE',"
- else:
- exe_options += "\n icon=[%s]," % ','.join("'%s'" % escape_win_filepath(ic) for ic in icon_file)
- # Icon file for macOS.
- # We need to encapsulate it into apostrofes.
- icon_file = "'%s'" % icon_file[0]
- else:
- # On macOS, the default icon has to be copied into the .app bundle.
- # The the text value 'None' means - use default icon.
- icon_file = 'None'
- if contents_directory:
- exe_options += "\n contents_directory='%s'," % (contents_directory or "_internal")
- if hide_console:
- exe_options += "\n hide_console='%s'," % hide_console
-
- if bundle_identifier:
- # We need to encapsulate it into apostrofes.
- bundle_identifier = "'%s'" % bundle_identifier
-
- if _kwargs["shorthand_manifest"]:
- manifest = _kwargs["shorthand_manifest"]
- logger.log(
- logging.DEPRECATION, "PyInstaller v7 will remove the -m shorthand flag. Please use --manifest=%s instead",
- manifest
- )
- if manifest:
- if "<" in manifest:
- # Assume XML string
- exe_options += "\n manifest='%s'," % manifest.replace("'", "\\'")
- else:
- # Assume filename
- exe_options += "\n manifest='%s'," % escape_win_filepath(manifest)
- if resources:
- resources = list(map(escape_win_filepath, resources))
- exe_options += "\n resources=%s," % repr(resources)
-
- hiddenimports = hiddenimports or []
- upx_exclude = upx_exclude or []
-
- if is_darwin and onefile and not console:
- from PyInstaller.building.osx import WINDOWED_ONEFILE_DEPRCATION
- logger.log(logging.DEPRECATION, WINDOWED_ONEFILE_DEPRCATION)
-
- # If file extension of the first script is '.pyw', force --windowed option.
- if is_win and os.path.splitext(scripts[0])[-1] == '.pyw':
- console = False
-
- # If script paths are relative, make them relative to the directory containing .spec file.
- scripts = [make_path_spec_relative(x, specpath) for x in scripts]
- # With absolute paths replace prefix with variable HOMEPATH.
- scripts = list(map(Path, scripts))
-
- # Translate the default of ``debug=None`` to an empty list.
- if debug is None:
- debug = []
- # Translate the ``all`` option.
- if DEBUG_ALL_CHOICE[0] in debug:
- debug = DEBUG_ARGUMENT_CHOICES
-
- # Create preamble (for collect_*() calls)
- preamble = Preamble(
- datas, binaries, hiddenimports, collect_data, collect_binaries, collect_submodules, collect_all, copy_metadata,
- recursive_copy_metadata
- )
-
- if splash:
- splash_init = splashtmpl % {'splash_image': splash}
- splash_binaries = "\n splash.binaries,"
- splash_target = "\n splash,"
- else:
- splash_init = splash_binaries = splash_target = ""
-
- # Infer byte-code optimization level.
- opt_level = sum([opt == 'O' for opt in python_options])
- if opt_level > 2:
- logger.warning(
- "The switch '--python-option O' has been specified %d times - it should be specified at most twice!",
- opt_level,
- )
- opt_level = 2
-
- if optimize is None:
- if opt_level == 0:
- # Infer from running python process
- optimize = sys.flags.optimize
- else:
- # Infer from `--python-option O` switch(es).
- optimize = opt_level
- elif optimize != opt_level and opt_level != 0:
- logger.warning(
- "Mismatch between optimization level passed via --optimize switch (%d) and number of '--python-option O' "
- "switches (%d)!",
- optimize,
- opt_level,
- )
-
- if optimize >= 0:
- # Ensure OPTIONs passed to bootloader match the optimization settings.
- python_options += max(0, optimize - opt_level) * ['O']
-
- # Create OPTIONs array
- if 'imports' in debug and 'v' not in python_options:
- python_options.append('v')
- python_options_array = [(opt, None, 'OPTION') for opt in python_options]
-
- d = {
- 'scripts': scripts,
- 'pathex': pathex or [],
- 'binaries': preamble.binaries,
- 'datas': preamble.datas,
- 'hiddenimports': preamble.hiddenimports,
- 'preamble': preamble.content,
- 'name': name,
- 'noarchive': 'noarchive' in debug,
- 'optimize': optimize,
- 'options': python_options_array,
- 'debug_bootloader': 'bootloader' in debug,
- 'bootloader_ignore_signals': bootloader_ignore_signals,
- 'strip': strip,
- 'upx': not noupx,
- 'upx_exclude': upx_exclude,
- 'runtime_tmpdir': runtime_tmpdir,
- 'exe_options': exe_options,
- # Directory with additional custom import hooks.
- 'hookspath': hookspath,
- # List with custom runtime hook files.
- 'runtime_hooks': runtime_hooks or [],
- # List of modules/packages to ignore.
- 'excludes': excludes or [],
- # only Windows and macOS distinguish windowed and console apps
- 'console': console,
- 'disable_windowed_traceback': disable_windowed_traceback,
- # Icon filename. Only macOS uses this item.
- 'icon': icon_file,
- # .app bundle identifier. Only macOS uses this item.
- 'bundle_identifier': bundle_identifier,
- # argv emulation (macOS only)
- 'argv_emulation': argv_emulation,
- # Target architecture (macOS only)
- 'target_arch': target_arch,
- # Code signing identity (macOS only)
- 'codesign_identity': codesign_identity,
- # Entitlements file (macOS only)
- 'entitlements_file': entitlements_file,
- # splash screen
- 'splash_init': splash_init,
- 'splash_target': splash_target,
- 'splash_binaries': splash_binaries,
- }
-
- # Write down .spec file to filesystem.
- specfnm = os.path.join(specpath, name + '.spec')
- with open(specfnm, 'w', encoding='utf-8') as specfile:
- if onefile:
- specfile.write(onefiletmplt % d)
- # For macOS create .app bundle.
- if is_darwin and not console:
- specfile.write(bundleexetmplt % d)
- else:
- specfile.write(onedirtmplt % d)
- # For macOS create .app bundle.
- if is_darwin and not console:
- specfile.write(bundletmplt % d)
-
- return specfnm
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/osx.py b/venv/lib/python3.12/site-packages/PyInstaller/building/osx.py
deleted file mode 100755
index dca5649..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/osx.py
+++ /dev/null
@@ -1,736 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import os
-import pathlib
-import plistlib
-import shutil
-import subprocess
-
-from PyInstaller import log as logging
-from PyInstaller.building.api import COLLECT, EXE
-from PyInstaller.building.datastruct import Target, logger, normalize_toc
-from PyInstaller.building.utils import _check_path_overlap, _rmtree, process_collected_binary
-from PyInstaller.compat import is_darwin, strict_collect_mode
-from PyInstaller.building.icon import normalize_icon_type
-import PyInstaller.utils.misc as miscutils
-
-if is_darwin:
- import PyInstaller.utils.osx as osxutils
-
-# Character sequence used to replace dot (`.`) in names of directories that are created in `Contents/MacOS` or
-# `Contents/Frameworks`, where only .framework bundle directories are allowed to have dot in name.
-DOT_REPLACEMENT = '__dot__'
-
-WINDOWED_ONEFILE_DEPRCATION = (
- "Onefile mode in combination with macOS .app bundles (windowed mode) don't make sense (a .app bundle can not be a "
- "single file) and clashes with macOS's security. Please migrate to onedir mode. This will become an error "
- "in v7.0."
-)
-
-
-class BUNDLE(Target):
- def __init__(self, *args, **kwargs):
- from PyInstaller.config import CONF
-
- for item in args:
- if isinstance(item, EXE) and not item.exclude_binaries:
- logger.log(logging.DEPRECATION, WINDOWED_ONEFILE_DEPRCATION)
-
- # BUNDLE only has a sense under macOS, it is a noop on other platforms.
- if not is_darwin:
- return
-
- # Get a path to a .icns icon for the app bundle.
- self.icon = kwargs.get('icon')
- if not self.icon:
- # --icon not specified; use the default in the pyinstaller folder
- self.icon = os.path.join(
- os.path.dirname(os.path.dirname(__file__)), 'bootloader', 'images', 'icon-windowed.icns'
- )
- else:
- # User gave an --icon=path. If it is relative, make it relative to the spec file location.
- if not os.path.isabs(self.icon):
- self.icon = os.path.join(CONF['specpath'], self.icon)
-
- super().__init__()
-
- # .app bundle is created in DISTPATH.
- self.name = kwargs.get('name', None)
- base_name = os.path.basename(self.name)
- self.name = os.path.join(CONF['distpath'], base_name)
-
- self.appname = os.path.splitext(base_name)[0]
- # Ensure version is a string, even if user accidentally passed an int or a float.
- # Having a `CFBundleShortVersionString` entry of non-string type in `Info.plist` causes the .app bundle to
- # crash at start (#4466).
- self.version = str(kwargs.get("version", "0.0.0"))
- self.toc = []
- self.strip = False
- self.upx = False
- self.console = True
- self.target_arch = None
- self.codesign_identity = None
- self.entitlements_file = None
-
- # .app bundle identifier for Code Signing
- self.bundle_identifier = kwargs.get('bundle_identifier')
- if not self.bundle_identifier:
- # Fallback to appname.
- self.bundle_identifier = self.appname
-
- self.info_plist = kwargs.get('info_plist', None)
-
- for arg in args:
- # Valid arguments: EXE object, COLLECT object, and TOC-like iterables
- if isinstance(arg, EXE):
- # Add EXE as an entry to the TOC, and merge its dependencies TOC
- self.toc.append((os.path.basename(arg.name), arg.name, 'EXECUTABLE'))
- self.toc.extend(arg.dependencies)
- # Inherit settings
- self.strip = arg.strip
- self.upx = arg.upx
- self.upx_exclude = arg.upx_exclude
- self.console = arg.console
- self.target_arch = arg.target_arch
- self.codesign_identity = arg.codesign_identity
- self.entitlements_file = arg.entitlements_file
- elif isinstance(arg, COLLECT):
- # Merge the TOC
- self.toc.extend(arg.toc)
- # Inherit settings
- self.strip = arg.strip_binaries
- self.upx = arg.upx_binaries
- self.upx_exclude = arg.upx_exclude
- self.console = arg.console
- self.target_arch = arg.target_arch
- self.codesign_identity = arg.codesign_identity
- self.entitlements_file = arg.entitlements_file
- elif miscutils.is_iterable(arg):
- # TOC-like iterable
- self.toc.extend(arg)
- else:
- raise TypeError(f"Invalid argument type for BUNDLE: {type(arg)!r}")
-
- # Infer the executable name from the first EXECUTABLE entry in the TOC; it might have come from the COLLECT
- # (as opposed to the stand-alone EXE).
- for dest_name, src_name, typecode in self.toc:
- if typecode == "EXECUTABLE":
- self.exename = src_name
- break
- else:
- raise ValueError("No EXECUTABLE entry found in the TOC!")
-
- # Normalize TOC
- self.toc = normalize_toc(self.toc)
-
- self.__postinit__()
-
- _GUTS = (
- # BUNDLE always builds, just want the toc to be written out
- ('toc', None),
- )
-
- def _check_guts(self, data, last_build):
- # BUNDLE always needs to be executed, in order to clean the output directory.
- return True
-
- # Helper for determining whether the given file belongs to a .framework bundle or not. If it does, it returns
- # the path to the top-level .framework bundle directory; otherwise, returns None. In case of nested .framework
- # bundles, the path to the top-most .framework bundle directory is returned.
- @staticmethod
- def _is_framework_file(dest_path):
- # NOTE: reverse the parents list because we are looking for the top-most .framework bundle directory!
- for parent in reversed(dest_path.parents):
- if parent.name.endswith('.framework'):
- return parent
- return None
-
- # Helper that computes relative cross-link path between link's location and target, assuming they are both
- # rooted in the `Contents` directory of a macOS .app bundle.
- @staticmethod
- def _compute_relative_crosslink(crosslink_location, crosslink_target):
- # We could take symlink_location and symlink_target as they are (relative to parent of the `Contents`
- # directory), but that would introduce an unnecessary `../Contents` part. So instead, we take both paths
- # relative to the `Contents` directory.
- return os.path.join(
- *['..' for level in pathlib.PurePath(crosslink_location).relative_to('Contents').parent.parts],
- pathlib.PurePath(crosslink_target).relative_to('Contents'),
- )
-
- # This method takes the original (input) TOC and processes it into final TOC, based on which the `assemble` method
- # performs its file collection. The TOC processing here represents the core of our efforts to generate an .app
- # bundle that is compatible with Apple's code-signing requirements.
- #
- # For in-depth details on the code-signing, see Apple's `Technical Note TN2206: macOS Code Signing In Depth` at
- # https://developer.apple.com/library/archive/technotes/tn2206/_index.html
- #
- # The requirements, framed from PyInstaller's perspective, can be summarized as follows:
- #
- # 1. The `Contents/MacOS` directory is expected to contain only the program executable and (binary) code (= dylibs
- # and nested .framework bundles). Alternatively, the dylibs and .framework bundles can be also placed into
- # `Contents/Frameworks` directory (where same rules apply as for `Contents/MacOS`, so the remainder of this
- # text refers to the two inter-changeably, unless explicitly noted otherwise). The code in `Contents/MacOS`
- # is expected to be signed, and the `codesign` utility will recursively sign all found code when using `--deep`
- # option to sign the .app bundle.
- #
- # 2. All non-code files should be be placed in `Contents/Resources`, so they become sealed (data) resources;
- # i.e., their signature data is recorded in `Contents/_CodeSignature/CodeResources`. (As a side note,
- # it seems that signature information for data/resources in `Contents/Resources` is kept nder `file` key in
- # the `CodeResources` file, while the information for contents in `Contents/MacOS` is kept under `file2` key).
- #
- # 3. The directories in `Contents/MacOS` may not contain dots (`.`) in their names, except for the nested
- # .framework bundle directories. The directories in `Contents/Resources` have no such restrictions.
- #
- # 4. There may not be any content in the top level of a bundle. In other words, if a bundle has a `Contents`
- # or a `Versions` directory at its top level, there may be no other files or directories alongside them. The
- # sole exception is that alongside `Versions`, there may be symlinks to files and directories in
- # `Versions/Current`. This rule is important for nested .framework bundles that we collect from python packages.
- #
- # Next, let us consider the consequences of violating each of the above requirements:
- #
- # 1. Code signing machinery can directly store signature only in Mach-O binaries and nested .framework bundles; if
- # a data file is placed in `Contents/MacOS`, the signature is stored in the file's extended attributes. If the
- # extended attributes are lost, the program's signature will be broken. Many file transfer techniques (e.g., a
- # zip file) do not preserve extended attributes, nor are they preserved when uploading to the Mac App Store.
- #
- # 2. Putting code (a dylib or a .framework bundle) into `Contents/Resources` causes it to be treated as a resource;
- # the outer signature (i.e., of the whole .app bundle) does not know that this nested content is actually a code.
- # Consequently, signing the bundle with `codesign --deep` will NOT sign binaries placed in the
- # `Contents/Resources`, which may result in missing signatures when .app bundle is verified for notarization.
- # This might be worked around by signing each binary separately, and then signing the whole bundle (without the
- # `--deep` option), but requires the user to keep track of the offending binaries.
- #
- # 3. If a directory in `Contents/MacOS` contains a dot in the name, code-signing the bundle fails with
- # `bundle format unrecognized, invalid, or unsuitable` due to code signing machinery treating directory as a
- # nested .framework bundle directory.
- #
- # 4. If nested .framework bundle is malformed, the signing of the .app bundle might succeed, but subsequent
- # verification will fail, for example with `embedded framework contains modified or invalid version` (as observed
- # with .framework bundles shipped by contemporary PyQt/PySide PyPI wheels).
- #
- # The above requirements are unfortunately often at odds with the structure of python packages:
- #
- # * In general, python packages are mixed-content directories, where binaries and data files may be expected to
- # be found next to each other.
- #
- # For example, `opencv-python` provides a custom loader script that requires the package to be collected in the
- # source-only form by PyInstaller (i.e., the python modules and scripts collected as source .py files). At the
- # same time, it expects the .py loader script to be able to find the binary extension next to itself.
- #
- # Another example of mixed-mode directories are Qt QML components' sub-directories, which contain both the
- # component's plugin (a binary) and associated meta files (data files).
- #
- # * In python world, the directories often contain dots in their names.
- #
- # Dots are often used for private directories containing binaries that are shipped with a package. For example,
- # `numpy/.dylibs`, `scipy/.dylibs`, etc.
- #
- # Qt QML components may also contain a dot in their name; couple of examples from `PySide2` package:
- # `PySide2/Qt/qml/QtQuick.2`, `PySide2/Qt/qml/QtQuick/Controls.2`, `PySide2/Qt/qml/QtQuick/Particles.2`, etc.
- #
- # The packages' metadata directories also invariably contain dots in the name due to version (for example,
- # `numpy-1.24.3.dist-info`).
- #
- # In the light of all above, PyInstaller attempts to strictly place all files to their mandated location
- # (`Contents/MacOS` or `Contents/Frameworks` vs `Contents/Resources`). To preserve the illusion of mixed-content
- # directories, the content is cross-linked from one directory to the other. Specifically:
- #
- # * All entries with DATA typecode are assumed to be data files, and are always placed in corresponding directory
- # structure rooted in `Contents/Resources`.
- #
- # * All entries with BINARY or EXTENSION typecode are always placed in corresponding directory structure rooted in
- # `Contents/Frameworks`.
- #
- # * All entries with EXECUTABLE are placed in `Contents/MacOS` directory.
- #
- # * For the purposes of relocation, nested .framework bundles are treated as a single BINARY entity; i.e., the
- # whole .bundle directory is placed in corresponding directory structure rooted in `Contents/Frameworks` (even
- # though some of its contents, such as `Info.plist` file, are actually data files).
- #
- # * Top-level data files and binaries are always cross-linked to the other directory. For example, given a data file
- # `data_file.txt` that was collected into `Contents/Resources`, we create a symbolic link called
- # `Contents/MacOS/data_file.txt` that points to `../Resources/data_file.txt`.
- #
- # * The executable itself, while placed in `Contents/MacOS`, are cross-linked into both `Contents/Framworks` and
- # `Contents/Resources`.
- #
- # * The stand-alone PKG entries (used with onefile builds that side-load the PKG archive) are treated as data files
- # and collected into `Contents/Resources`, but cross-linked only into `Contents/MacOS` directory (because they
- # must appear to be next to the program executable). This is the only entry type that is cross-linked into the
- # `Contents/MacOS` directory and also the only data-like entry type that is not cross-linked into the
- # `Contents/Frameworks` directory.
- #
- # * For files in sub-directories, the cross-linking behavior depends on the type of directory:
- #
- # * A data-only directory is created in directory structure rooted in `Contents/Resources`, and cross-linked
- # into directory structure rooted in `Contents/Frameworks` at directory level (i.e., we link the whole
- # directory instead of individual files).
- #
- # This largely saves us from having to deal with dots in the names of collected metadata directories, which
- # are examples of data-only directories.
- #
- # * A binary-only directory is created in directory structure rooted in `Contents/Frameworks`, and cross-linked
- # into `Contents/Resources` at directory level.
- #
- # * A mixed-content directory is created in both directory structures. Files are placed into corresponding
- # directory structure based on their type, and cross-linked into other directory structure at file level.
- #
- # * This rule is applied recursively; for example, a data-only sub-directory in a mixed-content directory is
- # cross-linked at directory level, while adjacent binary and data files are cross-linked at file level.
- #
- # * To work around the issue with dots in the names of directories in `Contents/Frameworks` (applicable to
- # binary-only or mixed-content directories), such directories are created with modified name (the dot replaced
- # with a pre-defined pattern). Next to the modified directory, a symbolic link with original name is created,
- # pointing to the directory with modified name. With mixed-content directories, this modification is performed
- # only on the `Contents/Frameworks` side; the corresponding directory in `Contents/Resources` can be created
- # directly, without name modification and symbolic link.
- #
- # * If a symbolic link needs to be created in a mixed-content directory due to a SYMLINK entry from the original
- # TOC (i.e., a "collected" symlink originating from analysis, as opposed to the cross-linking mechanism described
- # above), the link is created in both directory structures, each pointing to the resource in its corresponding
- # directory structure (with one such resource being an actual file, and the other being a cross-link to the file).
- #
- # Final remarks:
- #
- # NOTE: the relocation mechanism is codified by tests in `tests/functional/test_macos_bundle_structure.py`.
- #
- # NOTE: by placing binaries and nested .framework entries into `Contents/Frameworks` instead of `Contents/MacOS`,
- # we have effectively relocated the `sys._MEIPASS` directory from the `Contents/MacOS` (= the parent directory of
- # the program executable) into `Contents/Frameworks`. This requires the PyInstaller's bootloader to detect that it
- # is running in the app-bundle mode (e.g., by checking if program executable's parent directory is `Contents/NacOS`)
- # and adjust the path accordingly.
- #
- # NOTE: the implemented relocation mechanism depends on the input TOC containing properly classified entries
- # w.r.t. BINARY vs DATA. So hooks and .spec files triggering collection of binaries as datas (and vice versa) will
- # result in incorrect placement of those files in the generated .app bundle. However, this is *not* the proper place
- # to address such issues; if necessary, automatic (re)classification should be added to analysis process, to ensure
- # that BUNDLE (as well as other build targets) receive correctly classified TOC.
- #
- # NOTE: similar to the previous note, the relocation mechanism is also not the proper place to enforce compliant
- # structure of the nested .framework bundles. Instead, this is handled by the analysis process, using the
- # `PyInstaller.utils.osx.collect_files_from_framework_bundles` helper function. So the input TOC that BUNDLE
- # receives should already contain entries that reconstruct compliant nested .framework bundles.
- def _process_bundle_toc(self, toc):
- bundle_toc = []
-
- # Step 1: inspect the directory layout and classify the directories according to their contents.
- directory_types = dict()
-
- _MIXED_DIR_TYPE = 'MIXED-DIR'
- _DATA_DIR_TYPE = 'DATA-DIR'
- _BINARY_DIR_TYPE = 'BINARY-DIR'
- _FRAMEWORK_DIR_TYPE = 'FRAMEWORK-DIR'
-
- _TOP_LEVEL_DIR = pathlib.PurePath('.')
-
- for dest_name, src_name, typecode in toc:
- dest_path = pathlib.PurePath(dest_name)
-
- framework_dir = self._is_framework_file(dest_path)
- if framework_dir:
- # Mark the framework directory as FRAMEWORK-DIR.
- directory_types[framework_dir] = _FRAMEWORK_DIR_TYPE
- # Treat the framework directory as BINARY file when classifying parent directories.
- typecode = 'BINARY'
- parent_dirs = framework_dir.parents
- else:
- parent_dirs = dest_path.parents
- # Treat BINARY and EXTENSION as BINARY to simplify further processing.
- if typecode == 'EXTENSION':
- typecode = 'BINARY'
-
- # (Re)classify parent directories
- for parent_dir in parent_dirs:
- # Skip the top-level `.` dir. This is also the only directory that can contain EXECUTABLE and PKG
- # entries, so we do not have to worry about.
- if parent_dir == _TOP_LEVEL_DIR:
- continue
-
- directory_type = _BINARY_DIR_TYPE if typecode == 'BINARY' else _DATA_DIR_TYPE # default
- directory_type = directory_types.get(parent_dir, directory_type)
-
- if directory_type == _DATA_DIR_TYPE and typecode == 'BINARY':
- directory_type = _MIXED_DIR_TYPE
- if directory_type == _BINARY_DIR_TYPE and typecode == 'DATA':
- directory_type = _MIXED_DIR_TYPE
-
- directory_types[parent_dir] = directory_type
-
- logger.debug("Directory classification: %r", directory_types)
-
- # Step 2: process the obtained directory structure and create symlink entries for directories that need to be
- # cross-linked. Such directories are data-only and binary-only directories (and framework directories) that are
- # located either in the top-level directory (have no parent) or in a mixed-content directory.
- for directory_path, directory_type in directory_types.items():
- # Cross-linking at directory level applies only to data-only and binary-only directories (as well as
- # framework directories).
- if directory_type == _MIXED_DIR_TYPE:
- continue
-
- # The parent needs to be either top-level directory or a mixed-content directory. Otherwise, the parent
- # (or one of its ancestors) will get cross-linked, and we do not need the link here.
- parent_dir = directory_path.parent
- requires_crosslink = parent_dir == _TOP_LEVEL_DIR or directory_types.get(parent_dir) == _MIXED_DIR_TYPE
- if not requires_crosslink:
- continue
-
- logger.debug("Cross-linking directory %r of type %r", directory_path, directory_type)
-
- # Data-only directories are created in `Contents/Resources`, needs to be cross-linked into `Contents/MacOS`.
- # Vice versa for binary-only or framework directories. The directory creation is handled implicitly, when we
- # create parent directory structure for collected files.
- if directory_type == _DATA_DIR_TYPE:
- symlink_src = os.path.join('Contents/Resources', directory_path)
- symlink_dest = os.path.join('Contents/Frameworks', directory_path)
- else:
- symlink_src = os.path.join('Contents/Frameworks', directory_path)
- symlink_dest = os.path.join('Contents/Resources', directory_path)
- symlink_ref = self._compute_relative_crosslink(symlink_dest, symlink_src)
-
- bundle_toc.append((symlink_dest, symlink_ref, 'SYMLINK'))
-
- # Step 3: first part of the work-around for directories that are located in `Contents/Frameworks` but contain a
- # dot in their name. As per `codesign` rules, the only directories in `Contents/Frameworks` that are allowed to
- # contain a dot in their name are .framework bundle directories. So we replace the dot with a custom character
- # sequence (stored in global `DOT_REPLACEMENT` variable), and create a symbolic with original name pointing to
- # the modified name. This is the best we can do with code-sign requirements vs. python community showing their
- # packages' dylibs into `.dylib` subdirectories, or Qt storing their Qml components in directories named
- # `QtQuick.2`, `QtQuick/Controls.2`, `QtQuick/Particles.2`, `QtQuick/Templates.2`, etc.
- #
- # In this step, we only prepare symlink entries that link the original directory name (with dot) to the modified
- # one (with dot replaced). The parent paths for collected files are modified in later step(s).
- for directory_path, directory_type in directory_types.items():
- # .framework bundle directories contain a dot in the name, but are allowed that.
- if directory_type == _FRAMEWORK_DIR_TYPE:
- continue
-
- # Data-only directories are fully located in `Contents/Resources` and cross-linked to `Contents/Frameworks`
- # at directory level, so they are also allowed a dot in their name.
- if directory_type == _DATA_DIR_TYPE:
- continue
-
- # Apply the work-around, if necessary...
- if '.' not in directory_path.name:
- continue
-
- logger.debug(
- "Creating symlink to work around the dot in the name of directory %r (%s)...", str(directory_path),
- directory_type
- )
-
- # Create a SYMLINK entry, but only for this level. In case of nested directories with dots in names, the
- # symlinks for ancestors will be created by corresponding loop iteration.
- bundle_toc.append((
- os.path.join('Contents/Frameworks', directory_path),
- directory_path.name.replace('.', DOT_REPLACEMENT),
- 'SYMLINK',
- ))
-
- # Step 4: process the entries for collected files, and decide whether they should be placed into
- # `Contents/MacOS`, `Contents/Frameworks`, or `Contents/Resources`, and whether they should be cross-linked into
- # other directories.
- for orig_dest_name, src_name, typecode in toc:
- orig_dest_path = pathlib.PurePath(orig_dest_name)
-
- # Special handling for EXECUTABLE and PKG entries
- if typecode == 'EXECUTABLE':
- # Place into `Contents/MacOS`, ...
- file_dest = os.path.join('Contents/MacOS', orig_dest_name)
- bundle_toc.append((file_dest, src_name, typecode))
- # ... and do nothing else. We explicitly avoid cross-linking the executable to `Contents/Frameworks` and
- # `Contents/Resources`, because it should be not necessary (the executable's location should be
- # discovered via `sys.executable`) and to prevent issues when executable name collides with name of a
- # package from which we collect either binaries or data files (or both); see #7314.
- continue
- elif typecode == 'PKG':
- # Place into `Contents/Resources` ...
- file_dest = os.path.join('Contents/Resources', orig_dest_name)
- bundle_toc.append((file_dest, src_name, typecode))
- # ... and cross-link only into `Contents/MacOS`.
- # This is used only in `onefile` mode, where there is actually no other content to distribute among the
- # `Contents/Resources` and `Contents/Frameworks` directories, so cross-linking into the latter makes
- # little sense.
- symlink_dest = os.path.join('Contents/MacOS', orig_dest_name)
- symlink_ref = self._compute_relative_crosslink(symlink_dest, file_dest)
- bundle_toc.append((symlink_dest, symlink_ref, 'SYMLINK'))
- continue
-
- # Standard data vs binary processing...
-
- # Determine file location based on its type.
- if self._is_framework_file(orig_dest_path):
- # File from a framework bundle; put into `Contents/Frameworks`, but never cross-link the file itself.
- # The whole .framework bundle directory will be linked as necessary by the directory cross-linking
- # mechanism.
- file_base_dir = 'Contents/Frameworks'
- crosslink_base_dir = None
- elif typecode == 'DATA':
- # Data file; relocate to `Contents/Resources` and cross-link it back into `Contents/Frameworks`.
- file_base_dir = 'Contents/Resources'
- crosslink_base_dir = 'Contents/Frameworks'
- else:
- # Binary; put into `Contents/Frameworks` and cross-link it into `Contents/Resources`.
- file_base_dir = 'Contents/Frameworks'
- crosslink_base_dir = 'Contents/Resources'
-
- # Determine if we need to cross-link the file. We need to do this for top-level files (the ones without
- # parent directories), and for files whose parent directories are mixed-content directories.
- requires_crosslink = False
- if crosslink_base_dir is not None:
- parent_dir = orig_dest_path.parent
- requires_crosslink = parent_dir == _TOP_LEVEL_DIR or directory_types.get(parent_dir) == _MIXED_DIR_TYPE
-
- # Special handling for SYMLINK entries in original TOC; if we need to cross-link a symlink entry, we create
- # it in both locations, and have each point to the (relative) resource in the same directory (so one of the
- # targets will likely be a file, and the other will be a symlink due to cross-linking).
- if typecode == 'SYMLINK' and requires_crosslink:
- bundle_toc.append((os.path.join(file_base_dir, orig_dest_name), src_name, typecode))
- bundle_toc.append((os.path.join(crosslink_base_dir, orig_dest_name), src_name, typecode))
- continue
-
- # The file itself.
- file_dest = os.path.join(file_base_dir, orig_dest_name)
- bundle_toc.append((file_dest, src_name, typecode))
-
- # Symlink for cross-linking
- if requires_crosslink:
- symlink_dest = os.path.join(crosslink_base_dir, orig_dest_name)
- symlink_ref = self._compute_relative_crosslink(symlink_dest, file_dest)
- bundle_toc.append((symlink_dest, symlink_ref, 'SYMLINK'))
-
- # Step 5: sanitize all destination paths in the new TOC, to ensure that paths that are rooted in
- # `Contents/Frameworks` do not contain directories with dots in their names. Doing this as a post-processing
- # step keeps code simple and clean and ensures that this step is applied to files, symlinks that originate from
- # cross-linking files, and symlinks that originate from cross-linking directories. This in turn ensures that
- # all directory hierarchies created during the actual file collection have sanitized names, and that collection
- # outcome does not depend on the order of entries in the TOC.
- sanitized_toc = []
- for dest_name, src_name, typecode in bundle_toc:
- dest_path = pathlib.PurePath(dest_name)
-
- # Paths rooted in Contents/Resources do not require sanitizing.
- if dest_path.parts[0] == 'Contents' and dest_path.parts[1] == 'Resources':
- sanitized_toc.append((dest_name, src_name, typecode))
- continue
-
- # Special handling for files from .framework bundle directories; sanitize only parent path of the .framework
- # directory.
- framework_path = self._is_framework_file(dest_path)
- if framework_path:
- parent_path = framework_path.parent
- remaining_path = dest_path.relative_to(parent_path)
- else:
- parent_path = dest_path.parent
- remaining_path = dest_path.name
-
- sanitized_dest_path = pathlib.PurePath(
- *parent_path.parts[:2], # Contents/Frameworks
- *[part.replace('.', DOT_REPLACEMENT) for part in parent_path.parts[2:]],
- remaining_path,
- )
- sanitized_dest_name = str(sanitized_dest_path)
-
- if sanitized_dest_path != dest_path:
- logger.debug("Sanitizing dest path: %r -> %r", dest_name, sanitized_dest_name)
-
- sanitized_toc.append((sanitized_dest_name, src_name, typecode))
-
- bundle_toc = sanitized_toc
-
- # Normalize and sort the TOC for easier inspection
- bundle_toc = sorted(normalize_toc(bundle_toc))
-
- return bundle_toc
-
- def assemble(self):
- from PyInstaller.config import CONF
-
- if _check_path_overlap(self.name) and os.path.isdir(self.name):
- _rmtree(self.name)
-
- logger.info("Building BUNDLE %s", self.tocbasename)
-
- # Create a minimal Mac bundle structure.
- os.makedirs(os.path.join(self.name, "Contents", "MacOS"))
- os.makedirs(os.path.join(self.name, "Contents", "Resources"))
- os.makedirs(os.path.join(self.name, "Contents", "Frameworks"))
-
- # Makes sure the icon exists and attempts to convert to the proper format if applicable
- self.icon = normalize_icon_type(self.icon, ("icns",), "icns", CONF["workpath"])
-
- # Ensure icon path is absolute
- self.icon = os.path.abspath(self.icon)
-
- # Copy icns icon to Resources directory.
- shutil.copyfile(self.icon, os.path.join(self.name, 'Contents', 'Resources', os.path.basename(self.icon)))
-
- # Key/values for a minimal Info.plist file
- info_plist_dict = {
- "CFBundleDisplayName": self.appname,
- "CFBundleName": self.appname,
-
- # Required by 'codesign' utility.
- # The value for CFBundleIdentifier is used as the default unique name of your program for Code Signing
- # purposes. It even identifies the APP for access to restricted macOS areas like Keychain.
- #
- # The identifier used for signing must be globally unique. The usual form for this identifier is a
- # hierarchical name in reverse DNS notation, starting with the toplevel domain, followed by the company
- # name, followed by the department within the company, and ending with the product name. Usually in the
- # form: com.mycompany.department.appname
- # CLI option --osx-bundle-identifier sets this value.
- "CFBundleIdentifier": self.bundle_identifier,
- "CFBundleExecutable": os.path.basename(self.exename),
- "CFBundleIconFile": os.path.basename(self.icon),
- "CFBundleInfoDictionaryVersion": "6.0",
- "CFBundlePackageType": "APPL",
- "CFBundleShortVersionString": self.version,
- }
-
- # Set some default values. But they still can be overwritten by the user.
- if self.console:
- # Setting EXE console=True implies LSBackgroundOnly=True.
- info_plist_dict['LSBackgroundOnly'] = True
- else:
- # Let's use high resolution by default.
- info_plist_dict['NSHighResolutionCapable'] = True
-
- # Merge info_plist settings from spec file
- if isinstance(self.info_plist, dict) and self.info_plist:
- info_plist_dict.update(self.info_plist)
-
- plist_filename = os.path.join(self.name, "Contents", "Info.plist")
- with open(plist_filename, "wb") as plist_fh:
- plistlib.dump(info_plist_dict, plist_fh)
-
- # Pre-process the TOC into its final BUNDLE-compatible form.
- bundle_toc = self._process_bundle_toc(self.toc)
-
- # Perform the actual collection.
- CONTENTS_FRAMEWORKS_PATH = pathlib.PurePath('Contents/Frameworks')
- for dest_name, src_name, typecode in bundle_toc:
- # Create parent directory structure, if necessary
- dest_path = os.path.join(self.name, dest_name) # Absolute destination path
- dest_dir = os.path.dirname(dest_path)
- try:
- os.makedirs(dest_dir, exist_ok=True)
- except FileExistsError:
- raise SystemExit(
- f"ERROR: Pyinstaller needs to create a directory at {dest_dir!r}, "
- "but there already exists a file at that path!"
- )
- # Copy extensions and binaries from cache. This ensures that these files undergo additional binary
- # processing - have paths to linked libraries rewritten (relative to `@rpath`) and have rpath set to the
- # top-level directory (relative to `@loader_path`, i.e., the file's location). The "top-level" directory
- # in this case corresponds to `Contents/MacOS` (where `sys._MEIPASS` also points), so we need to pass
- # the cache retrieval function the *original* destination path (which is without preceding
- # `Contents/MacOS`).
- if typecode in ('EXTENSION', 'BINARY'):
- orig_dest_name = str(pathlib.PurePath(dest_name).relative_to(CONTENTS_FRAMEWORKS_PATH))
- src_name = process_collected_binary(
- src_name,
- orig_dest_name,
- use_strip=self.strip,
- use_upx=self.upx,
- upx_exclude=self.upx_exclude,
- target_arch=self.target_arch,
- codesign_identity=self.codesign_identity,
- entitlements_file=self.entitlements_file,
- strict_arch_validation=(typecode == 'EXTENSION'),
- )
- if typecode == 'SYMLINK':
- os.symlink(src_name, dest_path) # Create link at dest_path, pointing at (relative) src_name
- else:
- # BUNDLE does not support MERGE-based multipackage
- assert typecode != 'DEPENDENCY', "MERGE DEPENDENCY entries are not supported in BUNDLE!"
-
- # At this point, `src_name` should be a valid file.
- if not os.path.isfile(src_name):
- raise ValueError(f"Resource {src_name!r} is not a valid file!")
- # If strict collection mode is enabled, the destination should not exist yet.
- if strict_collect_mode and os.path.exists(dest_path):
- raise ValueError(
- f"Attempting to collect a duplicated file into BUNDLE: {dest_name} (type: {typecode})"
- )
- # Use `shutil.copyfile` to copy file with default permissions. We do not attempt to preserve original
- # permissions nor metadata, as they might be too restrictive and cause issues either during subsequent
- # re-build attempts or when trying to move the application bundle. For binaries (and data files with
- # executable bit set), we manually set the executable bits after copying the file.
- shutil.copyfile(src_name, dest_path)
- if (
- typecode in ('EXTENSION', 'BINARY', 'EXECUTABLE')
- or (typecode == 'DATA' and os.access(src_name, os.X_OK))
- ):
- os.chmod(dest_path, 0o755)
-
- # Sign the bundle
- logger.info('Signing the BUNDLE...')
- try:
- osxutils.sign_binary(self.name, self.codesign_identity, self.entitlements_file, deep=True)
- except Exception as e:
- # Display a warning or re-raise the error, depending on the environment-variable setting.
- if os.environ.get("PYINSTALLER_STRICT_BUNDLE_CODESIGN_ERROR", "0") == "0":
- logger.warning("Error while signing the bundle: %s", e)
- logger.warning("You will need to sign the bundle manually!")
- else:
- raise RuntimeError("Failed to codesign the bundle!") from e
-
- logger.info("Building BUNDLE %s completed successfully.", self.tocbasename)
-
- # Optionally verify bundle's signature. This is primarily intended for our CI.
- if os.environ.get("PYINSTALLER_VERIFY_BUNDLE_SIGNATURE", "0") != "0":
- logger.info("Verifying signature for BUNDLE %s...", self.name)
- self.verify_bundle_signature(self.name)
- logger.info("BUNDLE verification complete!")
-
- @staticmethod
- def verify_bundle_signature(bundle_dir):
- # First, verify the bundle signature using codesign.
- cmd_args = ['/usr/bin/codesign', '--verify', '--all-architectures', '--deep', '--strict', bundle_dir]
- p = subprocess.run(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf8')
- if p.returncode:
- raise SystemError(
- f"codesign command ({cmd_args}) failed with error code {p.returncode}!\noutput: {p.stdout}"
- )
-
- # Ensure that code-signing information is *NOT* embedded in the files' extended attributes.
- #
- # This happens when files other than binaries are present in `Contents/MacOS` or `Contents/Frameworks`
- # directory; as the signature cannot be embedded within the file itself (contrary to binaries with
- # `LC_CODE_SIGNATURE` section in their header), it ends up stores in the file's extended attributes. However,
- # if such bundle is transferred using a method that does not support extended attributes (for example, a zip
- # file), the signatures on these files are lost, and the signature of the bundle as a whole becomes invalid.
- # This is the primary reason why we need to relocate non-binaries into `Contents/Resources` - the signatures
- # for files in that directory end up stored in `Contents/_CodeSignature/CodeResources` file.
- #
- # This check therefore aims to ensure that all files have been properly relocated to their corresponding
- # locations w.r.t. the code-signing requirements.
-
- try:
- import xattr
- except ModuleNotFoundError:
- logger.info("xattr package not available; skipping verification of extended attributes!")
- return
-
- CODESIGN_ATTRS = (
- "com.apple.cs.CodeDirectory",
- "com.apple.cs.CodeRequirements",
- "com.apple.cs.CodeRequirements-1",
- "com.apple.cs.CodeSignature",
- )
-
- for entry in pathlib.Path(bundle_dir).rglob("*"):
- if not entry.is_file():
- continue
-
- file_attrs = xattr.listxattr(entry)
- if any([codesign_attr in file_attrs for codesign_attr in CODESIGN_ATTRS]):
- raise ValueError(f"Code-sign attributes found in extended attributes of {str(entry)!r}!")
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/splash.py b/venv/lib/python3.12/site-packages/PyInstaller/building/splash.py
deleted file mode 100755
index 3b7fe8c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/splash.py
+++ /dev/null
@@ -1,486 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# -----------------------------------------------------------------------------
-import io
-import os
-import re
-import struct
-import pathlib
-
-from PyInstaller import log as logging
-from PyInstaller.archive.writers import SplashWriter
-from PyInstaller.building import splash_templates
-from PyInstaller.building.datastruct import Target
-from PyInstaller.building.utils import _check_guts_eq, _check_guts_toc, misc
-from PyInstaller.compat import is_aix, is_darwin
-from PyInstaller.depend import bindepend
-
-logger = logging.getLogger(__name__)
-
-
-class Splash(Target):
- """
- Bundles the required resources for the splash screen into a file, which will be included in the CArchive.
-
- A Splash has two outputs, one is itself and one is stored in splash.binaries. Both need to be passed to other
- build targets in order to enable the splash screen.
- """
- def __init__(self, image_file, binaries, datas, **kwargs):
- """
- :param str image_file:
- A path-like object to the image to be used. Only the PNG file format is supported.
-
- .. note:: If a different file format is supplied and PIL (Pillow) is installed, the file will be converted
- automatically.
-
- .. note:: *Windows*: The color ``'magenta'`` / ``'#ff00ff'`` must not be used in the image or text, as it is
- used by splash screen to indicate transparent areas. Use a similar color (e.g., ``'#ff00fe'``) instead.
-
- .. note:: If PIL (Pillow) is installed and the image is bigger than max_img_size, the image will be resized
- to fit into the specified area.
- :param list binaries:
- The TOC list of binaries the Analysis build target found. This TOC includes all extension modules and their
- binary dependencies. This is required to determine whether the user's program uses `tkinter`.
- :param list datas:
- The TOC list of data the Analysis build target found. This TOC includes all data-file dependencies of the
- modules. This is required to check if all splash screen requirements can be bundled.
-
- :keyword text_pos:
- An optional two-integer tuple that represents the origin of the text on the splash screen image. The
- origin of the text is its lower left corner. A unit in the respective coordinate system is a pixel of the
- image, its origin lies in the top left corner of the image. This parameter also acts like a switch for
- the text feature. If omitted, no text will be displayed on the splash screen. This text will be used to
- show textual progress in onefile mode.
- :type text_pos: Tuple[int, int]
- :keyword text_size:
- The desired size of the font. If the size argument is a positive number, it is interpreted as a size in
- points. If size is a negative number, its absolute value is interpreted as a size in pixels. Default: ``12``
- :type text_size: int
- :keyword text_font:
- An optional name of a font for the text. This font must be installed on the user system, otherwise the
- system default font is used. If this parameter is omitted, the default font is also used.
- :keyword text_color:
- An optional color for the text. HTML color codes (``'#40e0d0'``) and color names (``'turquoise'``) are
- supported. Default: ``'black'``
- (Windows: the color ``'magenta'`` / ``'#ff00ff'`` is used to indicate transparency, and should not be used)
- :type text_color: str
- :keyword text_default:
- The default text which will be displayed before the extraction starts. Default: ``"Initializing"``
- :type text_default: str
- :keyword full_tk:
- By default Splash bundles only the necessary files for the splash screen (some tk components). This
- options enables adding full tk and making it a requirement, meaning all tk files will be unpacked before
- the splash screen can be started. This is useful during development of the splash screen script.
- Default: ``False``
- :type full_tk: bool
- :keyword minify_script:
- The splash screen is created by executing an Tcl/Tk script. This option enables minimizing the script,
- meaning removing all non essential parts from the script. Default: ``True``
- :keyword name:
- An optional alternative filename for the .res file. If not specified, a name is generated.
- :type name: str
- :keyword script_name:
- An optional alternative filename for the Tcl script, that will be generated. If not specified, a name is
- generated.
- :type script_name: str
- :keyword max_img_size:
- Maximum size of the splash screen image as a tuple. If the supplied image exceeds this limit, it will be
- resized to fit the maximum width (to keep the original aspect ratio). This option can be disabled by
- setting it to None. Default: ``(760, 480)``
- :type max_img_size: Tuple[int, int]
- :keyword always_on_top:
- Force the splashscreen to be always on top of other windows. If disabled, other windows (e.g., from other
- applications) can cover the splash screen by user bringing them to front. This might be useful for
- frozen applications with long startup times. Default: ``True``
- :type always_on_top: bool
- """
- from PyInstaller.config import CONF
- from PyInstaller.utils.hooks.tcl_tk import tcltk_info
-
- Target.__init__(self)
-
- # Splash screen is not supported on macOS. It operates in a secondary thread and macOS disallows UI operations
- # in any thread other than main.
- if is_darwin:
- raise SystemExit("ERROR: Splash screen is not supported on macOS.")
-
- # Ensure tkinter (and thus Tcl/Tk) is available.
- if not tcltk_info.available:
- raise SystemExit(
- "ERROR: Your platform does not support the splash screen feature, since tkinter is not installed. "
- "Please install tkinter and try again."
- )
-
- # Check if the Tcl/Tk version is supported.
- logger.info("Verifying Tcl/Tk compatibility with splash screen requirements")
- self._check_tcl_tk_compatibility(tcltk_info)
-
- # Make image path relative to .spec file
- if not os.path.isabs(image_file):
- image_file = os.path.join(CONF['specpath'], image_file)
- image_file = os.path.normpath(image_file)
- if not os.path.exists(image_file):
- raise ValueError("Image file '%s' not found" % image_file)
-
- # Copy all arguments
- self.image_file = image_file
- self.full_tk = kwargs.get("full_tk", False)
- self.name = kwargs.get("name", None)
- self.script_name = kwargs.get("script_name", None)
- self.minify_script = kwargs.get("minify_script", True)
- self.max_img_size = kwargs.get("max_img_size", (760, 480))
-
- # text options
- self.text_pos = kwargs.get("text_pos", None)
- self.text_size = kwargs.get("text_size", 12)
- self.text_font = kwargs.get("text_font", "TkDefaultFont")
- self.text_color = kwargs.get("text_color", "black")
- self.text_default = kwargs.get("text_default", "Initializing")
-
- # always-on-top behavior
- self.always_on_top = kwargs.get("always_on_top", True)
-
- # Save the generated file separately so that it is not necessary to generate the data again and again
- root = os.path.splitext(self.tocfilename)[0]
- if self.name is None:
- self.name = root + '.res'
- if self.script_name is None:
- self.script_name = root + '_script.tcl'
-
- # Internal variables
- # Store path to _tkinter extension module, so that guts check can detect if the path changed for some reason.
- self._tkinter_file = tcltk_info.tkinter_extension_file
-
- # Calculated / analysed values
- self.uses_tkinter = self._uses_tkinter(self._tkinter_file, binaries)
- logger.debug("Program uses tkinter: %r", self.uses_tkinter)
- self.script = self.generate_script()
- self.tcl_lib = tcltk_info.tcl_shared_library # full path to shared library
- self.tk_lib = tcltk_info.tk_shared_library
-
- assert self.tcl_lib is not None
- assert self.tk_lib is not None
-
- logger.debug("Using Tcl shared library: %r", self.tcl_lib)
- logger.debug("Using Tk shared library: %r", self.tk_lib)
-
- self.splash_requirements = set([
- # NOTE: the implicit assumption here is that Tcl and Tk shared library are collected into top-level
- # application directory, which, at tme moment, is true in practically all cases.
- os.path.basename(self.tcl_lib),
- os.path.basename(self.tk_lib),
- # The list of requirements below is based on the current implementation of splash screen script. If you want
- # to extend the splash screen functionality and run into Tcl/Tk errors, chances are that additional Tk
- # components need to be added here.
- #
- # NOTE: these paths use the *destination* layout for Tcl/Tk scripts, which uses unversioned tcl and tk
- # directories (see `PyInstaller.utils.hooks.tcl_tk.collect_tcl_tk_files`).
- os.path.join(tcltk_info.TCL_ROOTNAME, "init.tcl"),
- # Core Tk
- os.path.join(tcltk_info.TK_ROOTNAME, "license.terms"),
- os.path.join(tcltk_info.TK_ROOTNAME, "text.tcl"),
- os.path.join(tcltk_info.TK_ROOTNAME, "tk.tcl"),
- # Used for customizable font
- os.path.join(tcltk_info.TK_ROOTNAME, "ttk", "ttk.tcl"),
- os.path.join(tcltk_info.TK_ROOTNAME, "ttk", "fonts.tcl"),
- os.path.join(tcltk_info.TK_ROOTNAME, "ttk", "cursors.tcl"),
- os.path.join(tcltk_info.TK_ROOTNAME, "ttk", "utils.tcl"),
- ])
-
- if tcltk_info.tk_version >= (9, 0):
- self.splash_requirements.update([
- os.path.join(tcltk_info.TK_ROOTNAME, "scaling.tcl"),
- os.path.join(tcltk_info.TK_ROOTNAME, "tclIndex"), # required for auto-load of scaling.tcl
- ])
-
- logger.info("Collect Tcl/Tk data files for the splash screen")
- tcltk_tree = tcltk_info.data_files # 3-element tuple TOC
- if self.full_tk:
- # The user wants a full copy of Tk, so make all Tk files a requirement.
- self.splash_requirements.update(entry[0] for entry in tcltk_tree)
-
- # Scan for binary dependencies of the Tcl/Tk shared libraries, and add them to `binaries` TOC list (which
- # should really be called `dependencies` as it is not limited to binaries. But it is too late now, and
- # existing spec files depend on this naming). We specify these binary dependencies (which include the
- # Tcl and Tk shared libraries themselves) even if the user's program uses tkinter and they would be collected
- # anyway; let the collection mechanism deal with potential duplicates.
- tcltk_libs = [(os.path.basename(src_name), src_name, 'BINARY') for src_name in (self.tcl_lib, self.tk_lib)]
- self.binaries = bindepend.binary_dependency_analysis(tcltk_libs)
-
- # Put all shared library dependencies in `splash_requirements`, so they are made available in onefile mode.
- self.splash_requirements.update(entry[0] for entry in self.binaries)
-
- # If the user's program does not use tkinter, add resources from Tcl/Tk tree to the dependencies list.
- # Do so only for the resources that are part of splash requirements.
- if not self.uses_tkinter:
- self.binaries.extend(entry for entry in tcltk_tree if entry[0] in self.splash_requirements)
-
- # Check if all requirements were found.
- collected_files = set(entry[0] for entry in (binaries + datas + self.binaries))
-
- def _filter_requirement(filename):
- if filename not in collected_files:
- # Item is not bundled, so warn the user about it. This actually may happen on some tkinter installations
- # that are missing the license.terms file - as this file has no effect on operation of splash screen,
- # suppress the warning for it.
- if os.path.basename(filename) == 'license.terms':
- return False
-
- logger.warning(
- "The local Tcl/Tk installation is missing the file %s. The behavior of the splash screen is "
- "therefore undefined and may be unsupported.", filename
- )
- return False
- return True
-
- # Remove all files which were not found.
- self.splash_requirements = set(filter(_filter_requirement, self.splash_requirements))
-
- logger.debug("Splash Requirements: %s", self.splash_requirements)
-
- # On AIX, the Tcl and Tk shared libraries might in fact be ar archives with shared object inside it, and need to
- # be `dlopen`'ed with full name (for example, `libtcl.a(libtcl.so.8.6)` and `libtk.a(libtk.so.8.6)`. So if the
- # library's suffix is .a, adjust the name accordingly, assuming fixed format for the shared object name.
- # Adjust the names at the end of this method, because preceding steps use `self.tcl_lib` and `self.tk_lib` for
- # filesystem-based operations and need the original filenames.
- if is_aix:
- _, ext = os.path.splitext(self.tcl_lib)
- if ext == '.a':
- tcl_major, tcl_minor = tcltk_info.tcl_version
- self.tcl_lib += f"(libtcl.so.{tcl_major}.{tcl_minor})"
- _, ext = os.path.splitext(self.tk_lib)
- if ext == '.a':
- tk_major, tk_minor = tcltk_info.tk_version
- self.tk_lib += f"(libtk.so.{tk_major}.{tk_minor})"
-
- self.__postinit__()
-
- _GUTS = (
- # input parameters
- ('image_file', _check_guts_eq),
- ('name', _check_guts_eq),
- ('script_name', _check_guts_eq),
- ('text_pos', _check_guts_eq),
- ('text_size', _check_guts_eq),
- ('text_font', _check_guts_eq),
- ('text_color', _check_guts_eq),
- ('text_default', _check_guts_eq),
- ('always_on_top', _check_guts_eq),
- ('full_tk', _check_guts_eq),
- ('minify_script', _check_guts_eq),
- ('max_img_size', _check_guts_eq),
- # calculated/analysed values
- ('uses_tkinter', _check_guts_eq),
- ('script', _check_guts_eq),
- ('tcl_lib', _check_guts_eq),
- ('tk_lib', _check_guts_eq),
- ('splash_requirements', _check_guts_eq),
- ('binaries', _check_guts_toc),
- # internal value
- # Check if the tkinter installation changed. This is theoretically possible if someone uses two different python
- # installations of the same version.
- ('_tkinter_file', _check_guts_eq),
- )
-
- def _check_guts(self, data, last_build):
- if Target._check_guts(self, data, last_build):
- return True
-
- # Check if the image has been modified.
- if misc.mtime(self.image_file) > last_build:
- logger.info("Building %s because file %s changed", self.tocbasename, self.image_file)
- return True
-
- return False
-
- def assemble(self):
- logger.info("Building Splash %s", self.name)
-
- # Check if PIL/pillow is available.
- try:
- from PIL import Image as PILImage
- except ImportError:
- PILImage = None
-
- # Required to pass tcltk_info.TK_ROOTNAME to SplashWriter
- from PyInstaller.utils.hooks.tcl_tk import tcltk_info
-
- # Function to resize a given image to fit into the area defined by max_img_size.
- def _resize_image(_image, _orig_size):
- if PILImage:
- _w, _h = _orig_size
- _ratio_w = self.max_img_size[0] / _w
- if _ratio_w < 1:
- # Image width exceeds limit
- _h = int(_h * _ratio_w)
- _w = self.max_img_size[0]
-
- _ratio_h = self.max_img_size[1] / _h
- if _ratio_h < 1:
- # Image height exceeds limit
- _w = int(_w * _ratio_h)
- _h = self.max_img_size[1]
-
- # If a file is given it will be open
- if isinstance(_image, PILImage.Image):
- _img = _image
- else:
- _img = PILImage.open(_image)
- _img_resized = _img.resize((_w, _h))
-
- # Save image into a stream
- _image_stream = io.BytesIO()
- _img_resized.save(_image_stream, format='PNG')
- _img.close()
- _img_resized.close()
- _image_data = _image_stream.getvalue()
- logger.info("Resized image %s from dimensions %r to (%d, %d)", self.image_file, _orig_size, _w, _h)
- return _image_data
- else:
- raise ValueError(
- "The splash image dimensions (w: %d, h: %d) exceed max_img_size (w: %d, h:%d), but the image "
- "cannot be resized due to missing PIL.Image! Either install the Pillow package, adjust the "
- "max_img_size, or use an image of compatible dimensions." %
- (_orig_size[0], _orig_size[1], self.max_img_size[0], self.max_img_size[1])
- )
-
- # Open image file
- image_file = open(self.image_file, 'rb')
-
- # Check header of the file to identify it
- if image_file.read(8) == b'\x89PNG\r\n\x1a\n':
- # self.image_file is a PNG file
- image_file.seek(16)
- img_size = (struct.unpack("!I", image_file.read(4))[0], struct.unpack("!I", image_file.read(4))[0])
-
- if img_size > self.max_img_size:
- # The image exceeds the maximum image size, so resize it
- image = _resize_image(self.image_file, img_size)
- else:
- image = os.path.abspath(self.image_file)
- elif PILImage:
- # Pillow is installed, meaning the image can be converted automatically
- img = PILImage.open(self.image_file, mode='r')
-
- if img.size > self.max_img_size:
- image = _resize_image(img, img.size)
- else:
- image_data = io.BytesIO()
- img.save(image_data, format='PNG')
- img.close()
- image = image_data.getvalue()
- logger.info("Converted image %s to PNG format", self.image_file)
- else:
- raise ValueError(
- "The image %s needs to be converted to a PNG file, but PIL.Image is not available! Either install the "
- "Pillow package, or use a PNG image for you splash screen." % (self.image_file,)
- )
-
- image_file.close()
-
- SplashWriter(
- self.name,
- self.splash_requirements,
- os.path.basename(self.tcl_lib), # tcl86t.dll
- os.path.basename(self.tk_lib), # tk86t.dll
- tcltk_info.TCL_ROOTNAME,
- tcltk_info.TK_ROOTNAME,
- image,
- self.script
- )
-
- @staticmethod
- def _check_tcl_tk_compatibility(tcltk_info):
- tcl_version = tcltk_info.tcl_version # (major, minor) tuple
- tk_version = tcltk_info.tk_version
-
- if is_darwin and tcltk_info.is_macos_system_framework:
- # Outdated Tcl/Tk 8.5 system framework is not supported.
- raise SystemExit(
- "ERROR: The splash screen feature does not support macOS system framework version of Tcl/Tk."
- )
-
- # Test if tcl/tk version is supported
- if tcl_version < (8, 6) or tk_version < (8, 6):
- logger.warning(
- "The installed Tcl/Tk (%d.%d / %d.%d) version might not work with the splash screen feature of the "
- "bootloader, which was tested against Tcl/Tk 8.6", *tcl_version, *tk_version
- )
-
- # This should be impossible, since tcl/tk is released together with the same version number, but just in case
- if tcl_version != tk_version:
- logger.warning(
- "The installed version of Tcl (%d.%d) and Tk (%d.%d) do not match. PyInstaller is tested against "
- "matching versions", *tcl_version, *tk_version
- )
-
- # Ensure that Tcl is built with multi-threading support.
- if not tcltk_info.tcl_threaded:
- # This is a feature breaking problem, so exit.
- raise SystemExit(
- "ERROR: The installed Tcl version is not threaded. PyInstaller only supports the splash screen "
- "using threaded Tcl."
- )
-
- # Ensure that Tcl and Tk shared libraries are available
- if tcltk_info.tcl_shared_library is None or tcltk_info.tk_shared_library is None:
- message = \
- "ERROR: Could not determine the path to Tcl and/or Tk shared library, " \
- "which are required for splash screen."
- if not tcltk_info.tkinter_extension_file:
- message += (
- " The _tkinter module appears to be a built-in, which likely means that python was built with "
- "statically-linked Tcl/Tk libraries and is incompatible with splash screen."
- )
- raise SystemExit(message)
-
- def generate_script(self):
- """
- Generate the script for the splash screen.
-
- If minify_script is True, all unnecessary parts will be removed.
- """
- d = {}
- if self.text_pos is not None:
- logger.debug("Add text support to splash screen")
- d.update({
- 'pad_x': self.text_pos[0],
- 'pad_y': self.text_pos[1],
- 'color': self.text_color,
- 'font': self.text_font,
- 'font_size': self.text_size,
- 'default_text': self.text_default,
- })
- script = splash_templates.build_script(text_options=d, always_on_top=self.always_on_top)
-
- if self.minify_script:
- # Remove any documentation, empty lines and unnecessary spaces
- script = '\n'.join(
- line for line in map(lambda line: line.strip(), script.splitlines())
- if not line.startswith('#') # documentation
- and line # empty lines
- )
- # Remove unnecessary spaces
- script = re.sub(' +', ' ', script)
-
- # Write script to disk, so that it is transparent to the user what script is executed.
- with open(self.script_name, "w", encoding="utf-8") as script_file:
- script_file.write(script)
- return script
-
- @staticmethod
- def _uses_tkinter(tkinter_file, binaries):
- # Test for _tkinter extension instead of tkinter module, because user might use a different wrapping library for
- # Tk. Use `pathlib.PurePath` in comparisons to account for case normalization and separator normalization.
- tkinter_file = pathlib.PurePath(tkinter_file)
- for dest_name, src_name, typecode in binaries:
- if pathlib.PurePath(src_name) == tkinter_file:
- return True
- return False
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/splash_templates.py b/venv/lib/python3.12/site-packages/PyInstaller/building/splash_templates.py
deleted file mode 100755
index afa068e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/splash_templates.py
+++ /dev/null
@@ -1,229 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# -----------------------------------------------------------------------------
-"""
-Templates for the splash screen tcl script.
-"""
-from PyInstaller.compat import is_cygwin, is_darwin, is_win
-
-ipc_script = r"""
-proc _ipc_server {channel clientaddr clientport} {
- # This function is called if a new client connects to
- # the server. This creates a channel, which calls
- # _ipc_caller if data was send through the connection
- set client_name [format <%s:%d> $clientaddr $clientport]
-
- chan configure $channel \
- -buffering none \
- -encoding utf-8 \
- -eofchar \x04 \
- -translation cr
- chan event $channel readable [list _ipc_caller $channel $client_name]
-}
-
-proc _ipc_caller {channel client_name} {
- # This function is called if a command was sent through
- # the tcp connection. The current implementation supports
- # two commands: update_text and exit, although exit
- # is implemented to be called if the connection gets
- # closed (from python) or the character 0x04 was received
- chan gets $channel cmd
-
- if {[chan eof $channel]} {
- # This is entered if either the connection was closed
- # or the char 0x04 was send
- chan close $channel
- exit
-
- } elseif {![chan blocked $channel]} {
- # RPC methods
-
- # update_text command
- if {[string match "update_text*" $cmd]} {
- global status_text
- set first [expr {[string first "(" $cmd] + 1}]
- set last [expr {[string last ")" $cmd] - 1}]
-
- set status_text [string range $cmd $first $last]
- }
- # Implement other procedures here
- }
-}
-
-# By setting the port to 0 the os will assign a free port
-set server_socket [socket -server _ipc_server -myaddr localhost 0]
-set server_port [fconfigure $server_socket -sockname]
-
-# This environment variable is shared between the python and the tcl
-# interpreter and publishes the port the tcp server socket is available
-set env(_PYI_SPLASH_IPC) [lindex $server_port 2]
-"""
-
-image_script = r"""
-# The variable $_image_data, which holds the data for the splash
-# image is created by the bootloader.
-image create photo splash_image
-splash_image put $_image_data
-# delete the variable, because the image now holds the data
-unset _image_data
-
-proc canvas_text_update {canvas tag _var - -} {
- # This function is rigged to be called if the a variable
- # status_text gets changed. This updates the text on
- # the canvas
- upvar $_var var
- $canvas itemconfigure $tag -text $var
-}
-"""
-
-splash_canvas_setup = r"""
-package require Tk
-
-set image_width [image width splash_image]
-set image_height [image height splash_image]
-set display_width [winfo screenwidth .]
-set display_height [winfo screenheight .]
-
-set x_position [expr {int(0.5*($display_width - $image_width))}]
-set y_position [expr {int(0.5*($display_height - $image_height))}]
-
-# Toplevel frame in which all widgets should be positioned
-frame .root
-
-# Configure the canvas on which the splash
-# screen will be drawn
-canvas .root.canvas \
- -width $image_width \
- -height $image_height \
- -borderwidth 0 \
- -highlightthickness 0
-
-# Draw the image into the canvas, filling it.
-.root.canvas create image \
- [expr {$image_width / 2}] \
- [expr {$image_height / 2}] \
- -image splash_image
-"""
-
-splash_canvas_text = r"""
-# Create a text on the canvas, which tracks the local
-# variable status_text. status_text is changed via C to
-# update the progress on the splash screen.
-# We cannot use the default label, because it has a
-# default background, which cannot be turned transparent
-.root.canvas create text \
- %(pad_x)d \
- %(pad_y)d \
- -fill %(color)s \
- -justify center \
- -font myFont \
- -tag vartext \
- -anchor sw
-trace add variable status_text write \
- [list canvas_text_update .root.canvas vartext]
-set status_text "%(default_text)s"
-"""
-
-splash_canvas_default_font = r"""
-font create myFont {*}[font actual TkDefaultFont]
-font configure myFont -size %(font_size)d
-"""
-
-splash_canvas_custom_font = r"""
-font create myFont -family %(font)s -size %(font_size)d
-"""
-
-if is_win or is_cygwin:
- transparent_setup = r"""
-# If the image is transparent, the background will be filled
-# with magenta. The magenta background is later replaced with transparency.
-# Here is the limitation of this implementation, that only
-# sharp transparent image corners are possible
-wm attributes . -transparentcolor magenta
-.root.canvas configure -background magenta
-"""
-
-elif is_darwin:
- # This is untested, but should work following: https://stackoverflow.com/a/44296157/5869139
- transparent_setup = r"""
-wm attributes . -transparent 1
-. configure -background systemTransparent
-.root.canvas configure -background systemTransparent
-"""
-
-else:
- # For Linux there is no common way to create a transparent window
- transparent_setup = r""
-
-pack_widgets = r"""
-# Position all widgets in the window
-pack .root
-grid .root.canvas -column 0 -row 0 -columnspan 1 -rowspan 2
-"""
-
-# Enable always-on-top behavior, by setting overrideredirect and the topmost attribute.
-position_window_on_top = r"""
-# Set position and mode of the window - always-on-top behavior
-wm overrideredirect . 1
-wm geometry . +${x_position}+${y_position}
-wm attributes . -topmost 1
-"""
-
-# Disable always-on-top behavior
-if is_win or is_cygwin or is_darwin:
- # On Windows, we disable the always-on-top behavior while still setting overrideredirect
- # (to disable window decorations), but set topmost attribute to 0.
- position_window = r"""
-# Set position and mode of the window
-wm overrideredirect . 1
-wm geometry . +${x_position}+${y_position}
-wm attributes . -topmost 0
-"""
-else:
- # On Linux, we must not use overrideredirect; instead, we set X11-specific type attribute to splash,
- # which lets the window manager to properly handle the splash screen (without window decorations
- # but allowing other windows to be brought to front).
- position_window = r"""
-# Set position and mode of the window
-wm geometry . +${x_position}+${y_position}
-wm attributes . -type splash
-"""
-
-raise_window = r"""
-raise .
-"""
-
-
-def build_script(text_options=None, always_on_top=False):
- """
- This function builds the tcl script for the splash screen.
- """
- # Order is important!
- script = [
- ipc_script,
- image_script,
- splash_canvas_setup,
- ]
-
- if text_options:
- # If the default font is used we need a different syntax
- if text_options['font'] == "TkDefaultFont":
- script.append(splash_canvas_default_font % text_options)
- else:
- script.append(splash_canvas_custom_font % text_options)
- script.append(splash_canvas_text % text_options)
-
- script.append(transparent_setup)
-
- script.append(pack_widgets)
- script.append(position_window_on_top if always_on_top else position_window)
- script.append(raise_window)
-
- return '\n'.join(script)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/templates.py b/venv/lib/python3.12/site-packages/PyInstaller/building/templates.py
deleted file mode 100755
index 24e5080..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/templates.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Templates to generate .spec files.
-"""
-
-onefiletmplt = """# -*- mode: python ; coding: utf-8 -*-
-%(preamble)s
-
-a = Analysis(
- %(scripts)s,
- pathex=%(pathex)s,
- binaries=%(binaries)s,
- datas=%(datas)s,
- hiddenimports=%(hiddenimports)s,
- hookspath=%(hookspath)r,
- hooksconfig={},
- runtime_hooks=%(runtime_hooks)r,
- excludes=%(excludes)s,
- noarchive=%(noarchive)s,
- optimize=%(optimize)r,
-)
-pyz = PYZ(a.pure)
-%(splash_init)s
-exe = EXE(
- pyz,
- a.scripts,
- a.binaries,
- a.datas,%(splash_target)s%(splash_binaries)s
- %(options)s,
- name='%(name)s',
- debug=%(debug_bootloader)s,
- bootloader_ignore_signals=%(bootloader_ignore_signals)s,
- strip=%(strip)s,
- upx=%(upx)s,
- upx_exclude=%(upx_exclude)s,
- runtime_tmpdir=%(runtime_tmpdir)r,
- console=%(console)s,
- disable_windowed_traceback=%(disable_windowed_traceback)s,
- argv_emulation=%(argv_emulation)r,
- target_arch=%(target_arch)r,
- codesign_identity=%(codesign_identity)r,
- entitlements_file=%(entitlements_file)r,%(exe_options)s
-)
-"""
-
-onedirtmplt = """# -*- mode: python ; coding: utf-8 -*-
-%(preamble)s
-
-a = Analysis(
- %(scripts)s,
- pathex=%(pathex)s,
- binaries=%(binaries)s,
- datas=%(datas)s,
- hiddenimports=%(hiddenimports)s,
- hookspath=%(hookspath)r,
- hooksconfig={},
- runtime_hooks=%(runtime_hooks)r,
- excludes=%(excludes)s,
- noarchive=%(noarchive)s,
- optimize=%(optimize)r,
-)
-pyz = PYZ(a.pure)
-%(splash_init)s
-exe = EXE(
- pyz,
- a.scripts,%(splash_target)s
- %(options)s,
- exclude_binaries=True,
- name='%(name)s',
- debug=%(debug_bootloader)s,
- bootloader_ignore_signals=%(bootloader_ignore_signals)s,
- strip=%(strip)s,
- upx=%(upx)s,
- console=%(console)s,
- disable_windowed_traceback=%(disable_windowed_traceback)s,
- argv_emulation=%(argv_emulation)r,
- target_arch=%(target_arch)r,
- codesign_identity=%(codesign_identity)r,
- entitlements_file=%(entitlements_file)r,%(exe_options)s
-)
-coll = COLLECT(
- exe,
- a.binaries,
- a.datas,%(splash_binaries)s
- strip=%(strip)s,
- upx=%(upx)s,
- upx_exclude=%(upx_exclude)s,
- name='%(name)s',
-)
-"""
-
-bundleexetmplt = """app = BUNDLE(
- exe,
- name='%(name)s.app',
- icon=%(icon)s,
- bundle_identifier=%(bundle_identifier)s,
-)
-"""
-
-bundletmplt = """app = BUNDLE(
- coll,
- name='%(name)s.app',
- icon=%(icon)s,
- bundle_identifier=%(bundle_identifier)s,
-)
-"""
-
-splashtmpl = """splash = Splash(
- %(splash_image)r,
- binaries=a.binaries,
- datas=a.datas,
- text_pos=None,
- text_size=12,
- minify_script=True,
- always_on_top=True,
-)
-"""
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/building/utils.py b/venv/lib/python3.12/site-packages/PyInstaller/building/utils.py
deleted file mode 100755
index da195f2..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/building/utils.py
+++ /dev/null
@@ -1,846 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import fnmatch
-import glob
-import hashlib
-import io
-import marshal
-import os
-import pathlib
-import platform
-import shutil
-import struct
-import subprocess
-import sys
-import types
-import zipfile
-
-from PyInstaller import compat
-from PyInstaller import log as logging
-from PyInstaller.compat import is_aix, is_darwin, is_win, is_linux
-from PyInstaller.exceptions import InvalidSrcDestTupleError
-from PyInstaller.utils import misc
-
-if is_win:
- from PyInstaller.utils.win32 import versioninfo
-
-if is_darwin:
- import PyInstaller.utils.osx as osxutils
-
-logger = logging.getLogger(__name__)
-
-# -- Helpers for checking guts.
-#
-# NOTE: by _GUTS it is meant intermediate files and data structures that PyInstaller creates for bundling files and
-# creating final executable.
-
-
-def _check_guts_eq(attr_name, old_value, new_value, last_build):
- """
- Rebuild is required if values differ.
- """
- if old_value != new_value:
- logger.info("Building because %s changed", attr_name)
- return True
- return False
-
-
-def _check_guts_toc_mtime(attr_name, old_toc, new_toc, last_build):
- """
- Rebuild is required if mtimes of files listed in old TOC are newer than last_build.
-
- Use this for calculated/analysed values read from cache.
- """
- for dest_name, src_name, typecode in old_toc:
- if misc.mtime(src_name) > last_build:
- logger.info("Building because %s changed", src_name)
- return True
- return False
-
-
-def _check_guts_toc(attr_name, old_toc, new_toc, last_build):
- """
- Rebuild is required if either TOC content changed or mtimes of files listed in old TOC are newer than last_build.
-
- Use this for input parameters.
- """
- return _check_guts_eq(attr_name, old_toc, new_toc, last_build) or \
- _check_guts_toc_mtime(attr_name, old_toc, new_toc, last_build)
-
-
-def destination_name_for_extension(module_name, src_name, typecode):
- """
- Take a TOC entry (dest_name, src_name, typecode) and determine the full destination name for the extension.
- """
-
- assert typecode == 'EXTENSION'
-
- # The `module_name` should be the extension's importable module name, such as `psutil._psutil_linux` or
- # `numpy._core._multiarray_umath`. Reconstruct the directory structure from parent package name(s), if any.
- dest_elements = module_name.split('.')
-
- # We have the base name of the extension file (the last element in the module name), but we do not know the
- # full extension suffix. We can take that from source name; for simplicity, replace the whole base name part.
- src_path = pathlib.Path(src_name)
- dest_elements[-1] = src_path.name
-
- # Extensions that originate from python's python3.x/lib-dynload directory should be diverted into
- # python3.x/lib-dynload destination directory instead of being collected into top-level application directory.
- # See #5604 for original motivation (using just lib-dynload), and #9204 for extension (using python3.x/lib-dynload).
- if src_path.parent.name == 'lib-dynload':
- python_dir = f'python{sys.version_info.major}.{sys.version_info.minor}'
- if src_path.parent.parent.name == python_dir:
- dest_elements = [python_dir, 'lib-dynload', *dest_elements]
-
- return os.path.join(*dest_elements)
-
-
-def process_collected_binary(
- src_name,
- dest_name,
- use_strip=False,
- use_upx=False,
- upx_exclude=None,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None,
- strict_arch_validation=False
-):
- """
- Process the collected binary using strip or UPX (or both), and apply any platform-specific processing. On macOS,
- this rewrites the library paths in the headers, and (re-)signs the binary. On-disk cache is used to avoid processing
- the same binary with same options over and over.
-
- In addition to given arguments, this function also uses CONF['cachedir'] and CONF['upx_dir'].
- """
- from PyInstaller.config import CONF
-
- # We need to use cache in the following scenarios:
- # * extra binary processing due to use of `strip` or `upx`
- # * building on macOS, where we need to rewrite library paths in binaries' headers and (re-)sign the binaries.
- if not use_strip and not use_upx and not is_darwin:
- return src_name
-
- # Match against provided UPX exclude patterns.
- upx_exclude = upx_exclude or []
- if use_upx:
- src_path = pathlib.PurePath(src_name)
- for upx_exclude_entry in upx_exclude:
- # pathlib.PurePath.match() matches from right to left, and supports * wildcard, but does not support the
- # "**" syntax for directory recursion. Case sensitivity follows the OS default.
- if src_path.match(upx_exclude_entry):
- logger.info("Disabling UPX for %s due to match in exclude pattern: %s", src_name, upx_exclude_entry)
- use_upx = False
- break
-
- # Additional automatic disablement rules for UPX and strip.
-
- # On Windows, avoid using UPX with binaries that have control flow guard (CFG) enabled.
- if use_upx and is_win and versioninfo.pefile_check_control_flow_guard(src_name):
- logger.info('Disabling UPX for %s due to CFG!', src_name)
- use_upx = False
-
- # Avoid using UPX with Qt plugins, as it strips the data required by the Qt plugin loader.
- if use_upx and misc.is_file_qt_plugin(src_name):
- logger.info('Disabling UPX for %s due to it being a Qt plugin!', src_name)
- use_upx = False
-
- # On linux, if a binary has an accompanying HMAC or CHK file, avoid modifying it in any way.
- if (use_upx or use_strip) and is_linux:
- src_path = pathlib.Path(src_name)
- hmac_path = src_path.with_name(f".{src_path.name}.hmac")
- chk_path = src_path.with_suffix(".chk")
- if hmac_path.is_file():
- logger.info('Disabling UPX and/or strip for %s due to accompanying .hmac file!', src_name)
- use_upx = use_strip = False
- elif chk_path.is_file():
- logger.info('Disabling UPX and/or strip for %s due to accompanying .chk file!', src_name)
- use_upx = use_strip = False
- del src_path, hmac_path, chk_path
-
- # Exit early if no processing is required after above rules are applied.
- if not use_strip and not use_upx and not is_darwin:
- return src_name
-
- # Prepare cache directory path. Cache is tied to python major/minor version, but also to various processing options.
- pyver = f'py{sys.version_info[0]}{sys.version_info[1]}'
- arch = platform.architecture()[0]
- cache_dir = os.path.join(
- CONF['cachedir'],
- f'bincache{use_strip:d}{use_upx:d}{pyver}{arch}',
- )
- if target_arch:
- cache_dir = os.path.join(cache_dir, target_arch)
- if is_darwin:
- # Separate by codesign identity
- if codesign_identity:
- # Compute hex digest of codesign identity string to prevent issues with invalid characters.
- csi_hash = hashlib.sha256(codesign_identity.encode('utf-8'))
- cache_dir = os.path.join(cache_dir, csi_hash.hexdigest())
- else:
- cache_dir = os.path.join(cache_dir, 'adhoc') # ad-hoc signing
- # Separate by entitlements
- if entitlements_file:
- # Compute hex digest of entitlements file contents
- with open(entitlements_file, 'rb') as fp:
- ef_hash = hashlib.sha256(fp.read())
- cache_dir = os.path.join(cache_dir, ef_hash.hexdigest())
- else:
- cache_dir = os.path.join(cache_dir, 'no-entitlements')
- os.makedirs(cache_dir, exist_ok=True)
-
- # Load cache index, if available
- cache_index_file = os.path.join(cache_dir, "index.dat")
- try:
- cache_index = misc.load_py_data_struct(cache_index_file)
- except FileNotFoundError:
- cache_index = {}
- except Exception:
- # Tell the user they may want to fix their cache... However, do not delete it for them; if it keeps getting
- # corrupted, we will never find out.
- logger.warning("PyInstaller bincache may be corrupted; use pyinstaller --clean to fix it.")
- raise
-
- # Look up the file in cache; use case-normalized destination name as identifier.
- cached_id = os.path.normcase(dest_name)
- cached_name = os.path.join(cache_dir, dest_name)
- src_digest = _compute_file_digest(src_name)
-
- if cached_id in cache_index:
- # If digest matches to the cached digest, return the cached file...
- if src_digest == cache_index[cached_id]:
- return cached_name
-
- # ... otherwise remove it.
- os.remove(cached_name)
-
- # Ensure parent path exists
- os.makedirs(os.path.dirname(cached_name), exist_ok=True)
-
- # Use `shutil.copyfile` to copy the file with default permissions bits, then manually set executable
- # bits. This way, we avoid copying permission bits and metadata from the original file, which might be too
- # restrictive for further processing (read-only permissions, immutable flag on FreeBSD, and so on).
- shutil.copyfile(src_name, cached_name)
- os.chmod(cached_name, 0o755)
-
- # Apply strip
- if use_strip:
- strip_options = []
- if is_darwin:
- # The default strip behavior breaks some shared libraries under macOS.
- strip_options = ["-S"] # -S = strip only debug symbols.
- elif is_aix:
- # Set -X32_64 flag to have strip transparently process both 32-bit and 64-bit binaries, without user having
- # to set OBJECT_MODE environment variable prior to the build. Also accommodates potential mixed-case
- # scenario, for example a 32-bit utility program being collected into a 64-bit application bundle.
- strip_options = ["-X32_64"]
-
- cmd = ["strip", *strip_options, cached_name]
- logger.info("Executing: %s", " ".join(cmd))
- try:
- p = subprocess.run(
- cmd,
- stdin=subprocess.DEVNULL,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- check=True,
- errors='ignore',
- encoding='utf-8',
- )
- logger.debug("Output from strip command:\n%s", p.stdout)
- except subprocess.CalledProcessError as e:
- show_warning = True
-
- # On AIX, strip utility raises an error when ran against already-stripped binary. Catch the corresponding
- # message (`0654-419 The specified archive file was already stripped.`) and suppress the warning.
- if is_aix and "0654-419" in e.stdout:
- show_warning = False
-
- if show_warning:
- logger.warning("Failed to run strip on %r!", cached_name, exc_info=True)
- logger.warning("Output from strip command:\n%s", e.stdout)
- except Exception:
- logger.warning("Failed to run strip on %r!", cached_name, exc_info=True)
-
- # Apply UPX
- if use_upx:
- upx_exe = 'upx'
- upx_dir = CONF['upx_dir']
- if upx_dir:
- upx_exe = os.path.join(upx_dir, upx_exe)
-
- upx_options = [
- # Do not compress icons, so that they can still be accessed externally.
- '--compress-icons=0',
- # Use LZMA compression.
- '--lzma',
- # Quiet mode.
- '-q',
- ]
- if is_win:
- # Binaries built with Visual Studio 7.1 require --strip-loadconf or they will not compress.
- upx_options.append('--strip-loadconf')
-
- cmd = [upx_exe, *upx_options, cached_name]
- logger.info("Executing: %s", " ".join(cmd))
- try:
- p = subprocess.run(
- cmd,
- stdin=subprocess.DEVNULL,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- check=True,
- errors='ignore',
- encoding='utf-8',
- )
- logger.debug("Output from upx command:\n%s", p.stdout)
- except subprocess.CalledProcessError as e:
- logger.warning("Failed to upx strip on %r!", cached_name, exc_info=True)
- logger.warning("Output from upx command:\n%s", e.stdout)
- except Exception:
- logger.warning("Failed to run upx on %r!", cached_name, exc_info=True)
-
- # On macOS, we need to modify the given binary's paths to the dependent libraries, in order to ensure they are
- # relocatable and always refer to location within the frozen application. Specifically, we make all dependent
- # library paths relative to @rpath, and set @rpath to point to the top-level application directory, relative to
- # the binary's location (i.e., @loader_path).
- #
- # While modifying the headers invalidates existing signatures, we avoid removing them in order to speed things up
- # (and to avoid potential bugs in the codesign utility, like the one reported on macOS 10.13 in #6167).
- # The forced re-signing at the end should take care of the invalidated signatures.
- if is_darwin:
- try:
- osxutils.binary_to_target_arch(cached_name, target_arch, display_name=src_name)
- #osxutils.remove_signature_from_binary(cached_name) # Disabled as per comment above.
- target_rpath = str(
- pathlib.PurePath('@loader_path', *['..' for level in pathlib.PurePath(dest_name).parent.parts])
- )
- osxutils.set_dylib_dependency_paths(cached_name, target_rpath)
- osxutils.sign_binary(cached_name, codesign_identity, entitlements_file)
- except osxutils.InvalidBinaryError:
- # Raised by osxutils.binary_to_target_arch when the given file is not a valid macOS binary (for example,
- # a linux .so file; see issue #6327). The error prevents any further processing, so just ignore it.
- pass
- except osxutils.IncompatibleBinaryArchError:
- # Raised by osxutils.binary_to_target_arch when the given file does not contain (all) required arch slices.
- # Depending on the strict validation mode, re-raise or swallow the error.
- #
- # Strict validation should be enabled only for binaries where the architecture *must* match the target one,
- # i.e., the extension modules. Everything else is pretty much a gray area, for example:
- # * a universal2 extension may have its x86_64 and arm64 slices linked against distinct single-arch/thin
- # shared libraries
- # * a collected executable that is launched by python code via a subprocess can be x86_64-only, even though
- # the actual python code is running on M1 in native arm64 mode.
- if strict_arch_validation:
- raise
- logger.debug("File %s failed optional architecture validation - collecting as-is!", src_name)
- except Exception as e:
- raise SystemError(f"Failed to process binary {cached_name!r}!") from e
-
- # Update cache index
- cache_index[cached_id] = src_digest
- misc.save_py_data_struct(cache_index_file, cache_index)
-
- return cached_name
-
-
-def _compute_file_digest(filename):
- hasher = hashlib.sha1()
- with open(filename, "rb") as fp:
- for chunk in iter(lambda: fp.read(16 * 1024), b""):
- hasher.update(chunk)
- return bytearray(hasher.digest())
-
-
-def _check_path_overlap(path):
- """
- Check that path does not overlap with WORKPATH or SPECPATH (i.e., WORKPATH and SPECPATH may not start with path,
- which could be caused by a faulty hand-edited specfile).
-
- Raise SystemExit if there is overlap, return True otherwise
- """
- from PyInstaller.config import CONF
- specerr = 0
- if CONF['workpath'].startswith(path):
- logger.error('Specfile error: The output path "%s" contains WORKPATH (%s)', path, CONF['workpath'])
- specerr += 1
- if CONF['specpath'].startswith(path):
- logger.error('Specfile error: The output path "%s" contains SPECPATH (%s)', path, CONF['specpath'])
- specerr += 1
- if specerr:
- raise SystemExit(
- 'ERROR: Please edit/recreate the specfile (%s) and set a different output name (e.g. "dist").' %
- CONF['spec']
- )
- return True
-
-
-def _make_clean_directory(path):
- """
- Create a clean directory from the given directory name.
- """
- if _check_path_overlap(path):
- if os.path.isdir(path) or os.path.isfile(path):
- try:
- os.remove(path)
- except OSError:
- _rmtree(path)
-
- os.makedirs(path, exist_ok=True)
-
-
-def _rmtree(path):
- """
- Remove directory and all its contents, but only after user confirmation, or if the -y option is set.
- """
- from PyInstaller.config import CONF
- if CONF['noconfirm']:
- choice = 'y'
- elif sys.stdout.isatty():
- choice = input(
- 'WARNING: The output directory "%s" and ALL ITS CONTENTS will be REMOVED! Continue? (y/N)' % path
- )
- else:
- raise SystemExit(
- 'ERROR: The output directory "%s" is not empty. Please remove all its contents or use the -y option (remove'
- ' output directory without confirmation).' % path
- )
- if choice.strip().lower() == 'y':
- if not CONF['noconfirm']:
- print("On your own risk, you can use the option `--noconfirm` to get rid of this question.")
- logger.info('Removing dir %s', path)
- shutil.rmtree(path)
- else:
- raise SystemExit('User aborted')
-
-
-# TODO Refactor to prohibit empty target directories. As the docstring below documents, this function currently permits
-# the second item of each 2-tuple in "hook.datas" to be the empty string, in which case the target directory defaults to
-# the source directory's basename. However, this functionality is very fragile and hence bad. Instead:
-#
-# * An exception should be raised if such item is empty.
-# * All hooks currently passing the empty string for such item (e.g.,
-# "hooks/hook-babel.py", "hooks/hook-matplotlib.py") should be refactored
-# to instead pass such basename.
-def format_binaries_and_datas(binaries_or_datas, workingdir=None):
- """
- Convert the passed list of hook-style 2-tuples into a returned set of `TOC`-style 2-tuples.
-
- Elements of the passed list are 2-tuples `(source_dir_or_glob, target_dir)`.
- Elements of the returned set are 2-tuples `(target_file, source_file)`.
- For backwards compatibility, the order of elements in the former tuples are the reverse of the order of elements in
- the latter tuples!
-
- Parameters
- ----------
- binaries_or_datas : list
- List of hook-style 2-tuples (e.g., the top-level `binaries` and `datas` attributes defined by hooks) whose:
- * The first element is either:
- * A glob matching only the absolute or relative paths of source non-Python data files.
- * The absolute or relative path of a source directory containing only source non-Python data files.
- * The second element is the relative path of the target directory into which these source files will be
- recursively copied.
-
- If the optional `workingdir` parameter is passed, source paths may be either absolute or relative; else, source
- paths _must_ be absolute.
- workingdir : str
- Optional absolute path of the directory to which all relative source paths in the `binaries_or_datas`
- parameter will be prepended by (and hence converted into absolute paths) _or_ `None` if these paths are to be
- preserved as relative. Defaults to `None`.
-
- Returns
- ----------
- set
- Set of `TOC`-style 2-tuples whose:
- * First element is the absolute or relative path of a target file.
- * Second element is the absolute or relative path of the corresponding source file to be copied to this target
- file.
- """
- toc_datas = set()
-
- for src_root_path_or_glob, trg_root_dir in binaries_or_datas:
- # Disallow empty source path. Those are typically result of errors, and result in implicit collection of the
- # whole current working directory, which is never a good idea.
- if not src_root_path_or_glob:
- raise InvalidSrcDestTupleError(
- (src_root_path_or_glob, trg_root_dir),
- "Empty SRC is not allowed when adding binary and data files, as it would result in collection of the "
- "whole current working directory."
- )
- if not trg_root_dir:
- raise InvalidSrcDestTupleError(
- (src_root_path_or_glob, trg_root_dir),
- "Empty DEST_DIR is not allowed - to collect files into application's top-level directory, use "
- f"{os.curdir!r}."
- )
- # Disallow absolute target paths, as well as target paths that would end up pointing outside of the
- # application's top-level directory.
- if os.path.isabs(trg_root_dir):
- raise InvalidSrcDestTupleError((src_root_path_or_glob, trg_root_dir), "DEST_DIR must be a relative path!")
- if os.path.normpath(trg_root_dir).startswith('..'):
- raise InvalidSrcDestTupleError(
- (src_root_path_or_glob, trg_root_dir),
- "DEST_DIR must not point outside of application's top-level directory!",
- )
-
- # Convert relative to absolute paths if required.
- if workingdir and not os.path.isabs(src_root_path_or_glob):
- src_root_path_or_glob = os.path.join(workingdir, src_root_path_or_glob)
-
- # Normalize paths.
- src_root_path_or_glob = os.path.normpath(src_root_path_or_glob)
-
- # If given source path is a file or directory path, pass it on.
- # If not, treat it as a glob and pass on all matching paths. However, we need to preserve the directories
- # captured by the glob - as opposed to collecting their contents into top-level target directory. Therefore,
- # we set a flag which is used in subsequent processing to distinguish between original directory paths and
- # directory paths that were captured by the glob.
- if os.path.isfile(src_root_path_or_glob) or os.path.isdir(src_root_path_or_glob):
- src_root_paths = [src_root_path_or_glob]
- was_glob = False
- else:
- src_root_paths = glob.glob(src_root_path_or_glob)
- was_glob = True
-
- if not src_root_paths:
- raise SystemExit(f'ERROR: Unable to find {src_root_path_or_glob!r} when adding binary and data files.')
-
- for src_root_path in src_root_paths:
- if os.path.isfile(src_root_path):
- # Normalizing the result to remove redundant relative paths (e.g., removing "./" from "trg/./file").
- toc_datas.add((
- os.path.normpath(os.path.join(trg_root_dir, os.path.basename(src_root_path))),
- os.path.normpath(src_root_path),
- ))
- elif os.path.isdir(src_root_path):
- for src_dir, src_subdir_basenames, src_file_basenames in os.walk(src_root_path):
- # Ensure the current source directory is a subdirectory of the passed top-level source directory.
- # Since os.walk() does *NOT* follow symlinks by default, this should be the case. (But let's make
- # sure.)
- assert src_dir.startswith(src_root_path)
-
- # Relative path of the current target directory, obtained by:
- #
- # * Stripping the top-level source directory from the current source directory (e.g., removing
- # "/top" from "/top/dir").
- # * Normalizing the result to remove redundant relative paths (e.g., removing "./" from
- # "trg/./file").
- if was_glob:
- # Preserve directories captured by glob.
- rel_dir = os.path.relpath(src_dir, os.path.dirname(src_root_path))
- else:
- rel_dir = os.path.relpath(src_dir, src_root_path)
- trg_dir = os.path.normpath(os.path.join(trg_root_dir, rel_dir))
-
- for src_file_basename in src_file_basenames:
- src_file = os.path.join(src_dir, src_file_basename)
- if os.path.isfile(src_file):
- # Normalize the result to remove redundant relative paths (e.g., removing "./" from
- # "trg/./file").
- toc_datas.add((
- os.path.normpath(os.path.join(trg_dir, src_file_basename)), os.path.normpath(src_file)
- ))
-
- return toc_datas
-
-
-def get_code_object(modname, filename, optimize):
- """
- Get the code-object for a module.
-
- This is a simplifed non-performant version which circumvents __pycache__.
- """
-
- # Once upon a time, we compiled dummy code objects for PEP-420 namespace packages. We do not do that anymore.
- assert filename not in {'-', None}, "Called with PEP-420 namespace package!"
-
- _, ext = os.path.splitext(filename)
- ext = ext.lower()
-
- if ext == '.pyc':
- # The module is available in binary-only form. Read the contents of .pyc file using helper function, which
- # supports reading from either stand-alone or archive-embedded .pyc files.
- logger.debug('Reading code object from .pyc file %s', filename)
- pyc_data = _read_pyc_data(filename)
- code_object = marshal.loads(pyc_data[16:])
- else:
- # Assume this is a source .py file, but allow an arbitrary extension (other than .pyc, which is taken in
- # the above branch). This allows entry-point scripts to have an arbitrary (or no) extension, as tested by
- # the `test_arbitrary_ext` in `test_basic.py`.
- logger.debug('Compiling python script/module file %s', filename)
-
- with open(filename, 'rb') as f:
- source = f.read()
-
- # If entry-point script has no suffix, append .py when compiling the source. In POSIX builds, the executable
- # has no suffix either; this causes issues with `traceback` module, as it tries to read the executable file
- # when trying to look up the code for the entry-point script (when current working directory contains the
- # executable).
- _, ext = os.path.splitext(filename)
- if not ext:
- logger.debug("Appending .py to compiled entry-point name...")
- filename += '.py'
-
- try:
- code_object = compile(source, filename, 'exec', optimize=optimize)
- except SyntaxError:
- logger.warning("Sytnax error while compiling %s", filename)
- raise
-
- return code_object
-
-
-def replace_filename_in_code_object(code_object, filename):
- """
- Recursively replace the `co_filename` in the given code object and code objects stored in its `co_consts` entries.
- Primarily used to anonymize collected code objects, i.e., by removing the build environment's paths from them.
- """
-
- consts = tuple(
- replace_filename_in_code_object(const_co, filename) if isinstance(const_co, types.CodeType) else const_co
- for const_co in code_object.co_consts
- )
-
- return code_object.replace(co_consts=consts, co_filename=filename)
-
-
-def _should_include_system_binary(binary_tuple, exceptions):
- """
- Return True if the given binary_tuple describes a system binary that should be included.
-
- Exclude all system library binaries other than those with "lib-dynload" in the destination or "python" in the
- source, except for those matching the patterns in the exceptions list. Intended to be used from the Analysis
- exclude_system_libraries method.
- """
- dest = binary_tuple[0]
- if dest.startswith(f'python{sys.version_info.major}.{sys.version_info.minor}/lib-dynload'):
- return True
- src = binary_tuple[1]
- if fnmatch.fnmatch(src, '*python*'):
- return True
- if not src.startswith('/lib') and not src.startswith('/usr/lib'):
- return True
- for exception in exceptions:
- if fnmatch.fnmatch(dest, exception):
- return True
- return False
-
-
-def compile_pymodule(name, src_path, workpath, optimize, code_cache=None):
- """
- Given the name and source file for a pure-python module, compile the module in the specified working directory,
- and return the name of resulting .pyc file. The paths in the resulting .pyc module are anonymized by having their
- absolute prefix removed.
-
- If a .pyc file with matching name already exists in the target working directory, it is re-used (provided it has
- compatible bytecode magic in the header, and that its modification time is newer than that of the source file).
-
- If the specified module is available in binary-only form, the input .pyc file is copied to the target working
- directory and post-processed. If the specified module is available in source form, it is compiled only if
- corresponding code object is not available in the optional code-object cache; otherwise, it is copied from cache
- and post-processed. When compiling the module, the specified byte-code optimization level is used.
-
- It is up to caller to ensure that the optional code-object cache contains only code-objects of target optimization
- level, and that if the specified working directory already contains .pyc files, that they were created with target
- optimization level.
- """
-
- # Construct the target .pyc filename in the workpath
- split_name = name.split(".")
- if "__init__" in src_path:
- # __init__ module; use "__init__" as module name, and construct parent path using all components of the
- # fully-qualified name
- parent_dirs = split_name
- mod_basename = "__init__"
- else:
- # Regular module; use last component of the fully-qualified name as module name, and the rest as the parent
- # path.
- parent_dirs = split_name[:-1]
- mod_basename = split_name[-1]
- pyc_path = os.path.join(workpath, *parent_dirs, mod_basename + '.pyc')
-
- # Check if optional cache contains module entry
- code_object = code_cache.get(name, None) if code_cache else None
-
- if code_object is None:
- _, ext = os.path.splitext(src_path)
- ext = ext.lower()
-
- if ext == '.py':
- # Source py file; read source and compile it.
- with open(src_path, 'rb') as f:
- src_data = f.read()
- code_object = compile(src_data, src_path, 'exec', optimize=optimize)
- elif ext == '.pyc':
- # The module is available in binary-only form. Read the contents of .pyc file using helper function, which
- # supports reading from either stand-alone or archive-embedded .pyc files.
- pyc_data = _read_pyc_data(src_path)
- # Unmarshal code object; this is necessary if we want to strip paths from it
- code_object = marshal.loads(pyc_data[16:])
- else:
- raise ValueError(f"Invalid python module file {src_path}; unhandled extension {ext}!")
-
- # Replace co_filename in code object with anonymized filename that does not contain full path. Construct the
- # relative filename from module name, similar how we earlier constructed the `pyc_path`.
- co_filename = os.path.join(*parent_dirs, mod_basename + '.py')
- code_object = replace_filename_in_code_object(code_object, co_filename)
-
- # Write complete .pyc module to in-memory stream. Then, check if .pyc file already exists, compare contents, and
- # (re)write it only if different. This avoids unnecessary (re)writing of the file, and in turn also avoids
- # unnecessary cache invalidation for targets that make use of the .pyc file (e.g., PKG, COLLECT).
- with io.BytesIO() as pyc_stream:
- pyc_stream.write(compat.BYTECODE_MAGIC)
- pyc_stream.write(struct.pack('= 3.10 stdlib, or equivalent importlib-metadata >= 4.6.
-if _setup_py_mode:
- importlib_metadata = None
-else:
- if sys.version_info >= (3, 10):
- import importlib.metadata as importlib_metadata
- else:
- try:
- import importlib_metadata
- except ImportError as e:
- from PyInstaller.exceptions import ImportlibMetadataError
- raise ImportlibMetadataError() from e
-
- import packaging.version # For importlib_metadata version check
-
- # Validate the version
- if packaging.version.parse(importlib_metadata.version("importlib-metadata")) < packaging.version.parse("4.6"):
- from PyInstaller.exceptions import ImportlibMetadataError
- raise ImportlibMetadataError()
-
-# Strict collect mode, which raises error when trying to collect duplicate files into PKG/CArchive or COLLECT.
-strict_collect_mode = os.environ.get("PYINSTALLER_STRICT_COLLECT_MODE", "0") != "0"
-
-# Copied from https://docs.python.org/3/library/platform.html#cross-platform.
-is_64bits: bool = sys.maxsize > 2**32
-
-# Distinguish specific code for various Python versions. Variables 'is_pyXY' mean that Python X.Y and up is supported.
-# Keep even unsupported versions here to keep 3rd-party hooks working.
-is_py35 = sys.version_info >= (3, 5)
-is_py36 = sys.version_info >= (3, 6)
-is_py37 = sys.version_info >= (3, 7)
-is_py38 = sys.version_info >= (3, 8)
-is_py39 = sys.version_info >= (3, 9)
-is_py310 = sys.version_info >= (3, 10)
-is_py311 = sys.version_info >= (3, 11)
-is_py312 = sys.version_info >= (3, 12)
-is_py313 = sys.version_info >= (3, 13)
-is_py314 = sys.version_info >= (3, 14)
-
-is_win = sys.platform.startswith('win')
-is_win_10 = is_win and (platform.win32_ver()[0] == '10')
-is_win_11 = is_win and (platform.win32_ver()[0] == '11')
-is_win_wine = False # Running under Wine; determined later on.
-is_cygwin = sys.platform == 'cygwin'
-is_darwin = sys.platform == 'darwin' # macOS
-
-# Unix platforms
-is_linux = sys.platform.startswith('linux')
-is_solar = sys.platform.startswith('sun') # Solaris
-is_aix = sys.platform.startswith('aix')
-is_freebsd = sys.platform.startswith('freebsd')
-is_openbsd = sys.platform.startswith('openbsd')
-is_hpux = sys.platform.startswith('hp-ux')
-
-# Some code parts are similar to several unix platforms (e.g. Linux, Solaris, AIX).
-# macOS is not considered as unix since there are many platform-specific details for Mac in PyInstaller.
-is_unix = is_linux or is_solar or is_aix or is_freebsd or is_hpux or is_openbsd
-
-# Linux distributions such as Alpine or OpenWRT use musl as their libc implementation and resultantly need specially
-# compiled bootloaders. On musl systems, ldd with no arguments prints 'musl' and its version.
-is_musl = is_linux and "musl" in subprocess.run(["ldd"], capture_output=True, encoding="utf-8").stderr
-
-# Termux - terminal emulator and Linux environment app for Android.
-is_termux = is_linux and hasattr(sys, 'getandroidapilevel')
-
-# macOS version
-_macos_ver = tuple(int(x) for x in platform.mac_ver()[0].split('.')) if is_darwin else None
-
-# macOS 11 (Big Sur): if python is not compiled with Big Sur support, it ends up in compatibility mode by default, which
-# is indicated by platform.mac_ver() returning '10.16'. The lack of proper Big Sur support breaks find_library()
-# function from ctypes.util module, as starting with Big Sur, shared libraries are not visible on disk anymore. Support
-# for the new library search mechanism was added in python 3.9 when compiled with Big Sur support. In such cases,
-# platform.mac_ver() reports version as '11.x'. The behavior can be further modified via SYSTEM_VERSION_COMPAT
-# environment variable; which allows explicitly enabling or disabling the compatibility mode. However, note that
-# disabling the compatibility mode and using python that does not properly support Big Sur still leaves find_library()
-# broken (which is a scenario that we ignore at the moment).
-# The same logic applies to macOS 12 (Monterey).
-is_macos_11_compat = bool(_macos_ver) and _macos_ver[0:2] == (10, 16) # Big Sur or newer in compat mode
-is_macos_11_native = bool(_macos_ver) and _macos_ver[0:2] >= (11, 0) # Big Sur or newer in native mode
-is_macos_11 = is_macos_11_compat or is_macos_11_native # Big Sur or newer
-
-# Check if python >= 3.13 was built with Py_GIL_DISABLED / free-threading (PEP703).
-#
-# This affects the shared library name, which has the "t" ABI suffix, as per:
-# https://github.com/python/steering-council/issues/221#issuecomment-1841593283
-#
-# It also affects the layout of PyConfig structure used by bootloader; consequently we need to inform bootloader what
-# kind of build it is dealing with (only in python 3.13; with 3.14 and later, we use PEP741 configuration API in the
-# bootloader, and do not need to know the layout of PyConfig structure anymore)
-is_nogil = bool(sysconfig.get_config_var('Py_GIL_DISABLED'))
-
-# In a virtual environment created by virtualenv (github.com/pypa/virtualenv) there exists sys.real_prefix with the path
-# to the base Python installation from which the virtual environment was created. This is true regardless of the version
-# of Python used to execute the virtualenv command.
-#
-# In a virtual environment created by the venv module available in the Python standard lib, there exists sys.base_prefix
-# with the path to the base implementation. This does not exist in a virtual environment created by virtualenv.
-#
-# The following code creates compat.is_venv and is.virtualenv that are True when running a virtual environment, and also
-# compat.base_prefix with the path to the base Python installation.
-
-base_prefix: str = os.path.abspath(getattr(sys, 'real_prefix', getattr(sys, 'base_prefix', sys.prefix)))
-# Ensure `base_prefix` is not containing any relative parts.
-is_venv = is_virtualenv = base_prefix != os.path.abspath(sys.prefix)
-
-# Conda environments sometimes have different paths or apply patches to packages that can affect how a hook or package
-# should access resources. Method for determining conda taken from https://stackoverflow.com/questions/47610844#47610844
-is_conda = os.path.isdir(os.path.join(base_prefix, 'conda-meta'))
-
-# Similar to ``is_conda`` but is ``False`` using another ``venv``-like manager on top. In this case, no packages
-# encountered will be conda packages meaning that the default non-conda behaviour is generally desired from PyInstaller.
-is_pure_conda = os.path.isdir(os.path.join(sys.prefix, 'conda-meta'))
-
-# Full path to python interpreter.
-python_executable = getattr(sys, '_base_executable', sys.executable)
-
-# Is this Python from Microsoft App Store (Windows only)? Python from Microsoft App Store has executable pointing at
-# empty shims.
-is_ms_app_store = is_win and os.path.getsize(python_executable) == 0
-
-if is_ms_app_store:
- # Locate the actual executable inside base_prefix.
- python_executable = os.path.join(base_prefix, os.path.basename(python_executable))
- if not os.path.exists(python_executable):
- raise SystemExit(
- 'ERROR: PyInstaller cannot locate real python executable belonging to Python from Microsoft App Store!'
- )
-
-# Bytecode magic value
-BYTECODE_MAGIC = importlib.util.MAGIC_NUMBER
-
-# List of suffixes for Python C extension modules.
-EXTENSION_SUFFIXES = importlib.machinery.EXTENSION_SUFFIXES
-ALL_SUFFIXES = importlib.machinery.all_suffixes()
-
-# On Windows we require pywin32-ctypes.
-# -> all pyinstaller modules should use win32api from PyInstaller.compat to
-# ensure that it can work on MSYS2 (which requires pywin32-ctypes)
-if is_win:
- if _setup_py_mode:
- pywintypes = None
- win32api = None
- else:
- try:
- # Hide the `cffi` package from win32-ctypes by temporarily blocking its import. This ensures that `ctypes`
- # backend is always used, even if `cffi` is available. The `cffi` backend uses `pycparser`, which is
- # incompatible with -OO mode (2nd optimization level) due to its removal of docstrings.
- # See https://github.com/pyinstaller/pyinstaller/issues/6345
- # On the off chance that `cffi` has already been imported, store the `sys.modules` entry so we can restore
- # it after importing `pywin32-ctypes` modules.
- orig_cffi = sys.modules.get('cffi')
- sys.modules['cffi'] = None
-
- from win32ctypes.pywin32 import pywintypes # noqa: F401, E402
- from win32ctypes.pywin32 import win32api # noqa: F401, E402
- except ImportError as e:
- raise SystemExit(
- 'ERROR: Could not import `pywintypes` or `win32api` from `win32ctypes.pywin32`.\n'
- 'Please make sure that `pywin32-ctypes` is installed and importable, for example:\n\n'
- 'pip install pywin32-ctypes\n'
- ) from e
- finally:
- # Unblock `cffi`.
- if orig_cffi is not None:
- sys.modules['cffi'] = orig_cffi
- else:
- del sys.modules['cffi']
- del orig_cffi
-
-# macOS's platform.architecture() can be buggy, so we do this manually here. Based off the python documentation:
-# https://docs.python.org/3/library/platform.html#platform.architecture
-if is_darwin:
- architecture = '64bit' if sys.maxsize > 2**32 else '32bit'
-else:
- architecture = platform.architecture()[0]
-
-# Cygwin needs special handling, because platform.system() contains identifiers such as MSYS_NT-10.0-19042 and
-# CYGWIN_NT-10.0-19042 that do not fit PyInstaller's OS naming scheme. Explicitly set `system` to 'Cygwin'.
-system = 'Cygwin' if is_cygwin else platform.system()
-
-# Machine suffix for bootloader.
-if is_win:
- # On Windows ARM64 using an x64 Python environment, platform.machine() returns ARM64 but
- # we really want the bootloader that matches the Python environment instead of the OS.
- machine = _pyi_machine(os.environ.get("PROCESSOR_ARCHITECTURE", platform.machine()), platform.system())
-else:
- machine = _pyi_machine(platform.machine(), platform.system())
-
-
-# Wine detection and support
-def is_wine_dll(filename: str | os.PathLike):
- """
- Check if the given PE file is a Wine DLL (PE-converted built-in, or fake/placeholder one).
-
- Returns True if the given file is a Wine DLL, False if not (or if file cannot be analyzed or does not exist).
- """
- _WINE_SIGNATURES = (
- b'Wine builtin DLL', # PE-converted Wine DLL
- b'Wine placeholder DLL', # Fake/placeholder Wine DLL
- )
- _MAX_LEN = max([len(sig) for sig in _WINE_SIGNATURES])
-
- # Wine places their DLL signature in the padding area between the IMAGE_DOS_HEADER and IMAGE_NT_HEADERS. So we need
- # to compare the bytes that come right after IMAGE_DOS_HEADER, i.e., after initial 64 bytes. We can read the file
- # directly and avoid using the pefile library to avoid performance penalty associated with full header parsing.
- try:
- with open(filename, 'rb') as fp:
- fp.seek(64)
- signature = fp.read(_MAX_LEN)
- return signature.startswith(_WINE_SIGNATURES)
- except Exception:
- pass
- return False
-
-
-if is_win:
- try:
- import ctypes.util # noqa: E402
- is_win_wine = is_wine_dll(ctypes.util.find_library('kernel32'))
- except Exception:
- pass
-
-# Set and get environment variables does not handle unicode strings correctly on Windows.
-
-# Acting on os.environ instead of using getenv()/setenv()/unsetenv(), as suggested in
-# : "Calling putenv() directly does not change os.environ, so it is
-# better to modify os.environ." (Same for unsetenv.)
-
-
-def getenv(name: str, default: str | None = None):
- """
- Returns unicode string containing value of environment variable 'name'.
- """
- return os.environ.get(name, default)
-
-
-def setenv(name: str, value: str):
- """
- Accepts unicode string and set it as environment variable 'name' containing value 'value'.
- """
- os.environ[name] = value
-
-
-def unsetenv(name: str):
- """
- Delete the environment variable 'name'.
- """
- # Some platforms (e.g., AIX) do not support `os.unsetenv()` and thus `del os.environ[name]` has no effect on the
- # real environment. For this case, we set the value to the empty string.
- os.environ[name] = ""
- del os.environ[name]
-
-
-# Exec commands in subprocesses.
-
-
-def exec_command(
- *cmdargs: str, encoding: str | None = None, raise_enoent: bool | None = None, **kwargs: int | bool | list | None
-):
- """
- Run the command specified by the passed positional arguments, optionally configured by the passed keyword arguments.
-
- .. DANGER::
- **Ignore this function's return value** -- unless this command's standard output contains _only_ pathnames, in
- which case this function returns the correct filesystem-encoded string expected by PyInstaller. In all other
- cases, this function's return value is _not_ safely usable.
-
- For backward compatibility, this function's return value non-portably depends on the current Python version and
- passed keyword arguments:
-
- * Under Python 3.x, this value is a **decoded `str` string**. However, even this value is _not_ necessarily
- safely usable:
- * If the `encoding` parameter is passed, this value is guaranteed to be safely usable.
- * Else, this value _cannot_ be safely used for any purpose (e.g., string manipulation or parsing), except to be
- passed directly to another non-Python command. Why? Because this value has been decoded with the encoding
- specified by `sys.getfilesystemencoding()`, the encoding used by `os.fsencode()` and `os.fsdecode()` to
- convert from platform-agnostic to platform-specific pathnames. This is _not_ necessarily the encoding with
- which this command's standard output was encoded. Cue edge-case decoding exceptions.
-
- Parameters
- ----------
- cmdargs :
- Variadic list whose:
- 1. Mandatory first element is the absolute path, relative path, or basename in the current `${PATH}` of the
- command to run.
- 2. Optional remaining elements are arguments to pass to this command.
- encoding : str, optional
- Optional keyword argument specifying the encoding with which to decode this command's standard output under
- Python 3. As this function's return value should be ignored, this argument should _never_ be passed.
- raise_enoent : boolean, optional
- Optional keyword argument to simply raise the exception if the executing the command fails since to the command
- is not found. This is useful to checking id a command exists.
-
- All remaining keyword arguments are passed as is to the `subprocess.Popen()` constructor.
-
- Returns
- ----------
- str
- Ignore this value. See discussion above.
- """
-
- proc = subprocess.Popen(cmdargs, stdout=subprocess.PIPE, **kwargs)
- try:
- out = proc.communicate(timeout=60)[0]
- except OSError as e:
- if raise_enoent and e.errno == errno.ENOENT:
- raise
- print('--' * 20, file=sys.stderr)
- print("Error running '%s':" % " ".join(cmdargs), file=sys.stderr)
- print(e, file=sys.stderr)
- print('--' * 20, file=sys.stderr)
- raise ExecCommandFailed("ERROR: Executing command failed!") from e
- except subprocess.TimeoutExpired:
- proc.kill()
- raise
-
- # stdout/stderr are returned as a byte array NOT as string, so we need to convert that to proper encoding.
- try:
- if encoding:
- out = out.decode(encoding)
- else:
- # If no encoding is given, assume we are reading filenames from stdout only because it is the common case.
- out = os.fsdecode(out)
- except UnicodeDecodeError as e:
- # The sub-process used a different encoding; provide more information to ease debugging.
- print('--' * 20, file=sys.stderr)
- print(str(e), file=sys.stderr)
- print('These are the bytes around the offending byte:', file=sys.stderr)
- print('--' * 20, file=sys.stderr)
- raise
- return out
-
-
-def exec_command_rc(*cmdargs: str, **kwargs: float | bool | list | None):
- """
- Return the exit code of the command specified by the passed positional arguments, optionally configured by the
- passed keyword arguments.
-
- Parameters
- ----------
- cmdargs : list
- Variadic list whose:
- 1. Mandatory first element is the absolute path, relative path, or basename in the current `${PATH}` of the
- command to run.
- 2. Optional remaining elements are arguments to pass to this command.
-
- All keyword arguments are passed as is to the `subprocess.call()` function.
-
- Returns
- ----------
- int
- This command's exit code as an unsigned byte in the range `[0, 255]`, where 0 signifies success and all other
- values signal a failure.
- """
-
- # 'encoding' keyword is not supported for 'subprocess.call'; remove it from kwargs.
- if 'encoding' in kwargs:
- kwargs.pop('encoding')
- return subprocess.call(cmdargs, **kwargs)
-
-
-def exec_command_all(*cmdargs: str, encoding: str | None = None, **kwargs: int | bool | list | None):
- """
- Run the command specified by the passed positional arguments, optionally configured by the passed keyword arguments.
-
- .. DANGER::
- **Ignore this function's return value.** If this command's standard output consists solely of pathnames, consider
- calling `exec_command()`
-
- Parameters
- ----------
- cmdargs : str
- Variadic list whose:
- 1. Mandatory first element is the absolute path, relative path, or basename in the current `${PATH}` of the
- command to run.
- 2. Optional remaining elements are arguments to pass to this command.
- encoding : str, optional
- Optional keyword argument specifying the encoding with which to decode this command's standard output. As this
- function's return value should be ignored, this argument should _never_ be passed.
-
- All remaining keyword arguments are passed as is to the `subprocess.Popen()` constructor.
-
- Returns
- ----------
- (int, str, str)
- Ignore this 3-element tuple `(exit_code, stdout, stderr)`. See the `exec_command()` function for discussion.
- """
- proc = subprocess.Popen(
- cmdargs,
- bufsize=-1, # Default OS buffer size.
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- **kwargs
- )
- # Waits for subprocess to complete.
- try:
- out, err = proc.communicate(timeout=60)
- except subprocess.TimeoutExpired:
- proc.kill()
- raise
- # stdout/stderr are returned as a byte array NOT as string. Thus we need to convert that to proper encoding.
- try:
- if encoding:
- out = out.decode(encoding)
- err = err.decode(encoding)
- else:
- # If no encoding is given, assume we're reading filenames from stdout only because it's the common case.
- out = os.fsdecode(out)
- err = os.fsdecode(err)
- except UnicodeDecodeError as e:
- # The sub-process used a different encoding, provide more information to ease debugging.
- print('--' * 20, file=sys.stderr)
- print(str(e), file=sys.stderr)
- print('These are the bytes around the offending byte:', file=sys.stderr)
- print('--' * 20, file=sys.stderr)
- raise
-
- return proc.returncode, out, err
-
-
-def __wrap_python(args, kwargs):
- cmdargs = [sys.executable]
-
- # macOS supports universal binaries (binary for multiple architectures. We need to ensure that subprocess
- # binaries are running for the same architecture as python executable. It is necessary to run binaries with 'arch'
- # command.
- if is_darwin:
- if architecture == '64bit':
- if platform.machine() == 'arm64':
- py_prefix = ['arch', '-arm64'] # Apple M1
- else:
- py_prefix = ['arch', '-x86_64'] # Intel
- elif architecture == '32bit':
- py_prefix = ['arch', '-i386']
- else:
- py_prefix = []
- # Since macOS 10.11, the environment variable DYLD_LIBRARY_PATH is no more inherited by child processes, so we
- # proactively propagate the current value using the `-e` option of the `arch` command.
- if 'DYLD_LIBRARY_PATH' in os.environ:
- path = os.environ['DYLD_LIBRARY_PATH']
- py_prefix += ['-e', 'DYLD_LIBRARY_PATH=%s' % path]
- cmdargs = py_prefix + cmdargs
-
- if not __debug__:
- cmdargs.append('-O')
-
- cmdargs.extend(args)
-
- env = kwargs.get('env')
- if env is None:
- env = dict(**os.environ)
-
- # Ensure python 3 subprocess writes 'str' as utf-8
- env['PYTHONIOENCODING'] = 'UTF-8'
- # ... and ensure we read output as utf-8
- kwargs['encoding'] = 'UTF-8'
-
- return cmdargs, kwargs
-
-
-def exec_python(*args: str, **kwargs: str | None):
- """
- Wrap running python script in a subprocess.
-
- Return stdout of the invoked command.
- """
- cmdargs, kwargs = __wrap_python(args, kwargs)
- return exec_command(*cmdargs, **kwargs)
-
-
-def exec_python_rc(*args: str, **kwargs: str | None):
- """
- Wrap running python script in a subprocess.
-
- Return exit code of the invoked command.
- """
- cmdargs, kwargs = __wrap_python(args, kwargs)
- return exec_command_rc(*cmdargs, **kwargs)
-
-
-# Path handling.
-
-
-# Site-packages functions - use native function if available.
-def getsitepackages(prefixes: list | None = None):
- """
- Returns a list containing all global site-packages directories.
-
- For each directory present in ``prefixes`` (or the global ``PREFIXES``), this function finds its `site-packages`
- subdirectory depending on the system environment, and returns a list of full paths.
- """
- # This implementation was copied from the ``site`` module, python 3.7.3.
- sitepackages = []
- seen = set()
-
- if prefixes is None:
- prefixes = [sys.prefix, sys.exec_prefix]
-
- for prefix in prefixes:
- if not prefix or prefix in seen:
- continue
- seen.add(prefix)
-
- if os.sep == '/':
- sitepackages.append(os.path.join(prefix, "lib", "python%d.%d" % sys.version_info[:2], "site-packages"))
- else:
- sitepackages.append(prefix)
- sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
- return sitepackages
-
-
-# Backported for virtualenv. Module 'site' in virtualenv might not have this attribute.
-getsitepackages = getattr(site, 'getsitepackages', getsitepackages)
-
-
-# Wrapper to load a module from a Python source file. This function loads import hooks when processing them.
-def importlib_load_source(name: str, pathname: str):
- # Import module from a file.
- mod_loader = importlib.machinery.SourceFileLoader(name, pathname)
- mod = types.ModuleType(mod_loader.name)
- mod.__file__ = mod_loader.get_filename() # Some hooks require __file__ attribute in their namespace
- mod_loader.exec_module(mod)
- return mod
-
-
-# Patterns of module names that should be bundled into the base_library.zip to be available during bootstrap.
-# These modules include direct or indirect dependencies of encodings.* modules. The encodings modules must be
-# recursively included to set the I/O encoding during python startup. Similarly, this list should include
-# modules used by PyInstaller's bootstrap scripts and modules (loader/pyi*.py)
-
-PY3_BASE_MODULES = {
- '_collections_abc',
- '_weakrefset',
- 'abc',
- 'codecs',
- 'collections',
- 'copyreg',
- 'encodings',
- 'enum',
- 'functools',
- 'genericpath', # dependency of os.path
- 'io',
- 'heapq',
- 'keyword',
- 'linecache',
- 'locale',
- 'ntpath', # dependency of os.path
- 'operator',
- 'os',
- 'posixpath', # dependency of os.path
- 're',
- 'reprlib',
- 'sre_compile',
- 'sre_constants',
- 'sre_parse',
- 'stat', # dependency of os.path
- 'traceback', # for startup errors
- 'types',
- 'weakref',
- 'warnings',
-}
-
-if not is_py310:
- PY3_BASE_MODULES.add('_bootlocale')
-
-# Object types of Pure Python modules in modulegraph dependency graph.
-# Pure Python modules have code object (attribute co_code).
-PURE_PYTHON_MODULE_TYPES = {
- 'SourceModule',
- 'CompiledModule',
- 'Package',
- 'NamespacePackage',
- # Deprecated.
- # TODO Could these module types be removed?
- 'FlatPackage',
- 'ArchiveModule',
-}
-# Object types of special Python modules (built-in, run-time, namespace package) in modulegraph dependency graph that do
-# not have code object.
-SPECIAL_MODULE_TYPES = {
- # Omit AliasNode from here (and consequently from VALID_MODULE_TYPES), in order to prevent PyiModuleGraph from
- # running standard hooks for aliased modules.
- #'AliasNode',
- 'BuiltinModule',
- 'RuntimeModule',
- 'RuntimePackage',
-
- # PyInstaller handles scripts differently and not as standard Python modules.
- 'Script',
-}
-# Object types of Binary Python modules (extensions, etc) in modulegraph dependency graph.
-BINARY_MODULE_TYPES = {
- 'Extension',
- 'ExtensionPackage',
-}
-# Object types of valid Python modules in modulegraph dependency graph.
-VALID_MODULE_TYPES = PURE_PYTHON_MODULE_TYPES | SPECIAL_MODULE_TYPES | BINARY_MODULE_TYPES
-# Object types of bad/missing/invalid Python modules in modulegraph dependency graph.
-# TODO: should be 'Invalid' module types also in the 'MISSING' set?
-BAD_MODULE_TYPES = {
- 'BadModule',
- 'ExcludedModule',
- 'InvalidSourceModule',
- 'InvalidCompiledModule',
- 'MissingModule',
-
- # Runtime modules and packages are technically valid rather than bad, but exist only in-memory rather than on-disk
- # (typically due to pre_safe_import_module() hooks), and hence cannot be physically frozen. For simplicity, these
- # nodes are categorized as bad rather than valid.
- 'RuntimeModule',
- 'RuntimePackage',
-}
-ALL_MODULE_TYPES = VALID_MODULE_TYPES | BAD_MODULE_TYPES
-# TODO: review this mapping to TOC, remove useless entries.
-# Dictionary to map ModuleGraph node types to TOC typecodes.
-MODULE_TYPES_TO_TOC_DICT = {
- # Pure modules.
- 'AliasNode': 'PYMODULE',
- 'Script': 'PYSOURCE',
- 'SourceModule': 'PYMODULE',
- 'CompiledModule': 'PYMODULE',
- 'Package': 'PYMODULE',
- 'FlatPackage': 'PYMODULE',
- 'ArchiveModule': 'PYMODULE',
- # Binary modules.
- 'Extension': 'EXTENSION',
- 'ExtensionPackage': 'EXTENSION',
- # Special valid modules.
- 'BuiltinModule': 'BUILTIN',
- 'NamespacePackage': 'PYMODULE',
- # Bad modules.
- 'BadModule': 'bad',
- 'ExcludedModule': 'excluded',
- 'InvalidSourceModule': 'invalid',
- 'InvalidCompiledModule': 'invalid',
- 'MissingModule': 'missing',
- 'RuntimeModule': 'runtime',
- 'RuntimePackage': 'runtime',
- # Other.
- 'does not occur': 'BINARY',
-}
-
-
-def check_requirements():
- """
- Verify that all requirements to run PyInstaller are met.
-
- Fail hard if any requirement is not met.
- """
- # Fail hard if Python does not have minimum required version
- if sys.version_info < (3, 8):
- raise EnvironmentError('PyInstaller requires Python 3.8 or newer.')
-
- if sys.implementation.name != "cpython":
- raise SystemExit(f"ERROR: PyInstaller does not support {sys.implementation.name}. Only CPython is supported.")
-
- if getattr(sys, "frozen", False):
- raise SystemExit("ERROR: PyInstaller can not be ran on itself")
-
- # There are some old packages which used to be backports of libraries which are now part of the standard library.
- # These backports are now unmaintained and contain only an older subset of features leading to obscure errors like
- # "enum has not attribute IntFlag" if installed.
- from importlib.metadata import distribution, PackageNotFoundError
-
- for name in ["enum34", "typing", "pathlib"]:
- try:
- dist = distribution(name)
- except PackageNotFoundError:
- continue
- remove = "conda remove" if is_conda else f'"{sys.executable}" -m pip uninstall {name}'
- raise SystemExit(
- f"ERROR: The '{name}' package is an obsolete backport of a standard library package and is incompatible "
- f"with PyInstaller. Please remove this package (located in {dist.locate_file('')}) using\n {remove}\n"
- "then try again."
- )
-
- # Bail out if binutils is not installed.
- if is_linux and shutil.which("objdump") is None:
- raise SystemExit(
- "ERROR: On Linux, objdump is required. It is typically provided by the 'binutils' package "
- "installable via your Linux distribution's package manager."
- )
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/config.py b/venv/lib/python3.12/site-packages/PyInstaller/config.py
deleted file mode 100755
index e6cb695..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/config.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-This module holds run-time PyInstaller configuration.
-
-Variable CONF is a dict() with all configuration options that are necessary for the build phase. Build phase is done by
-passing .spec file to exec() function. CONF variable is the only way how to pass arguments to exec() and how to avoid
-using 'global' variables.
-
-NOTE: Having 'global' variables does not play well with the test suite because it does not provide isolated environments
-for tests. Some tests might fail in this case.
-
-NOTE: The 'CONF' dict() is cleaned after building phase to not interfere with any other possible test.
-
-To pass any arguments to build phase, just do:
-
- from PyInstaller.config import CONF
- CONF['my_var_name'] = my_value
-
-And to use this variable in the build phase:
-
- from PyInstaller.config import CONF
- foo = CONF['my_var_name']
-
-
-This is the list of known variables. (Please update it if necessary.)
-
-cachedir
-hiddenimports
-noconfirm
-pathex
-ui_admin
-ui_access
-upx_available
-upx_dir
-workpath
-
-tests_modgraph - cached PyiModuleGraph object to speed up tests
-
-code_cache - dictionary associating `Analysis.pure` list instances with code cache dictionaries. Used by PYZ writer.
-"""
-
-# NOTE: Do not import other PyInstaller modules here. Just define constants here.
-
-CONF = {
- # Unit tests require this key to exist.
- 'pathex': [],
-}
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/configure.py b/venv/lib/python3.12/site-packages/PyInstaller/configure.py
deleted file mode 100755
index 46234b8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/configure.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Configure PyInstaller for the current Python installation.
-"""
-
-import os
-import subprocess
-
-from PyInstaller import compat
-from PyInstaller import log as logging
-
-logger = logging.getLogger(__name__)
-
-
-def _check_upx_availability(upx_dir):
- logger.debug('Testing UPX availability ...')
-
- upx_exe = "upx"
- if upx_dir:
- upx_exe = os.path.normpath(os.path.join(upx_dir, upx_exe))
-
- # Check if we can call `upx -V`.
- try:
- output = subprocess.check_output(
- [upx_exe, '-V'],
- stdin=subprocess.DEVNULL,
- stderr=subprocess.DEVNULL,
- encoding='utf-8',
- )
- except Exception:
- logger.debug('UPX is not available.')
- return False
-
- # Read the first line to display version string
- try:
- version_string = output.splitlines()[0]
- except IndexError:
- version_string = 'version string unavailable'
-
- logger.debug('UPX is available: %s', version_string)
- return True
-
-
-def _get_pyinstaller_cache_dir():
- old_cache_dir = None
- if compat.getenv('PYINSTALLER_CONFIG_DIR'):
- cache_dir = compat.getenv('PYINSTALLER_CONFIG_DIR')
- elif compat.is_win:
- cache_dir = compat.getenv('LOCALAPPDATA')
- if not cache_dir:
- cache_dir = os.path.expanduser('~\\Application Data')
- elif compat.is_darwin:
- cache_dir = os.path.expanduser('~/Library/Application Support')
- else:
- # According to XDG specification: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
- old_cache_dir = compat.getenv('XDG_DATA_HOME')
- if not old_cache_dir:
- old_cache_dir = os.path.expanduser('~/.local/share')
- cache_dir = compat.getenv('XDG_CACHE_HOME')
- if not cache_dir:
- cache_dir = os.path.expanduser('~/.cache')
- cache_dir = os.path.join(cache_dir, 'pyinstaller')
- # Move old cache-dir, if any, to new location.
- if old_cache_dir and not os.path.exists(cache_dir):
- old_cache_dir = os.path.join(old_cache_dir, 'pyinstaller')
- if os.path.exists(old_cache_dir):
- parent_dir = os.path.dirname(cache_dir)
- if not os.path.exists(parent_dir):
- os.makedirs(parent_dir)
- os.rename(old_cache_dir, cache_dir)
- return cache_dir
-
-
-def get_config(upx_dir=None):
- config = {}
-
- config['cachedir'] = _get_pyinstaller_cache_dir()
- config['upx_dir'] = upx_dir
-
- # Disable UPX on non-Windows. Using UPX (3.96) on modern Linux shared libraries (for example, the python3.x.so
- # shared library) seems to result in segmentation fault when they are dlopen'd. This happens in recent versions
- # of Fedora and Ubuntu linux, as well as in Alpine containers. On macOS, UPX (3.96) fails with
- # UnknownExecutableFormatException on most .dylibs (and interferes with code signature on other occasions). And
- # even when it would succeed, compressed libraries cannot be (re)signed due to failed strict validation.
- upx_available = _check_upx_availability(upx_dir)
- if upx_available:
- if compat.is_win or compat.is_cygwin:
- logger.info("UPX is available and will be used if enabled on build targets.")
- elif os.environ.get("PYINSTALLER_FORCE_UPX", "0") != "0":
- logger.warning(
- "UPX is available and force-enabled on platform with known compatibility problems - use at own risk!"
- )
- else:
- upx_available = False
- logger.info("UPX is available but is disabled on non-Windows due to known compatibility problems.")
- config['upx_available'] = upx_available
-
- return config
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 7329876..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/analysis.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/analysis.cpython-312.pyc
deleted file mode 100644
index 3afa698..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/analysis.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/bindepend.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/bindepend.cpython-312.pyc
deleted file mode 100644
index 28518ea..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/bindepend.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/bytecode.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/bytecode.cpython-312.pyc
deleted file mode 100644
index 3085be0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/bytecode.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/dylib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/dylib.cpython-312.pyc
deleted file mode 100644
index 43174fa..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/dylib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/imphook.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/imphook.cpython-312.pyc
deleted file mode 100644
index 91c4665..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/imphook.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/imphookapi.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/imphookapi.cpython-312.pyc
deleted file mode 100644
index 2d07aca..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/imphookapi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/utils.cpython-312.pyc
deleted file mode 100644
index abb0bee..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/depend/__pycache__/utils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/analysis.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/analysis.py
deleted file mode 100755
index 72ae4e4..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/analysis.py
+++ /dev/null
@@ -1,1025 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Define a modified ModuleGraph that can return its contents as a TOC and in other ways act like the old ImpTracker.
-TODO: This class, along with TOC and Tree, should be in a separate module.
-
-For reference, the ModuleGraph node types and their contents:
-
- nodetype identifier filename
-
- Script full path to .py full path to .py
- SourceModule basename full path to .py
- BuiltinModule basename None
- CompiledModule basename full path to .pyc
- Extension basename full path to .so
- MissingModule basename None
- Package basename full path to __init__.py
- packagepath is ['path to package']
- globalnames is set of global names __init__.py defines
- ExtensionPackage basename full path to __init__.{so,dll}
- packagepath is ['path to package']
-
-The main extension here over ModuleGraph is a method to extract nodes from the flattened graph and return them as a
-TOC, or added to a TOC. Other added methods look up nodes by identifier and return facts about them, replacing what
-the old ImpTracker list could do.
-"""
-
-import ast
-import os
-import sys
-import traceback
-from collections import defaultdict
-from copy import deepcopy
-
-from PyInstaller import HOMEPATH, PACKAGEPATH
-from PyInstaller import log as logging
-from PyInstaller.building.utils import destination_name_for_extension
-from PyInstaller.compat import (
- BAD_MODULE_TYPES, BINARY_MODULE_TYPES, MODULE_TYPES_TO_TOC_DICT, PURE_PYTHON_MODULE_TYPES, PY3_BASE_MODULES,
- VALID_MODULE_TYPES, importlib_load_source, is_win
-)
-from PyInstaller.depend import bytecode
-from PyInstaller.depend.imphook import AdditionalFilesCache, ModuleHookCache
-from PyInstaller.depend.imphookapi import (PreFindModulePathAPI, PreSafeImportModuleAPI)
-from PyInstaller.lib.modulegraph.find_modules import get_implies
-from PyInstaller.lib.modulegraph.modulegraph import ModuleGraph, DEFAULT_IMPORT_LEVEL, ABSOLUTE_IMPORT_LEVEL, Package
-from PyInstaller.log import DEBUG, INFO, TRACE
-from PyInstaller.utils.hooks import collect_submodules, is_package
-
-logger = logging.getLogger(__name__)
-
-# Location-based hook priority constants
-HOOK_PRIORITY_BUILTIN_HOOKS = -2000 # Built-in hooks. Lowest priority.
-HOOK_PRIORITY_CONTRIBUTED_HOOKS = -1000 # Hooks from pyinstaller-hooks-contrib package.
-HOOK_PRIORITY_UPSTREAM_HOOKS = 0 # Hooks provided by packages themselves, via entry-points.
-HOOK_PRIORITY_USER_HOOKS = 1000 # User-supplied hooks (command-line / spec file). Highest priority.
-
-
-class PyiModuleGraph(ModuleGraph):
- """
- Directed graph whose nodes represent modules and edges represent dependencies between these modules.
-
- This high-level subclass wraps the lower-level `ModuleGraph` class with support for graph and runtime hooks.
- While each instance of `ModuleGraph` represents a set of disconnected trees, each instance of this class *only*
- represents a single connected tree whose root node is the Python script originally passed by the user on the
- command line. For that reason, while there may (and typically do) exist more than one `ModuleGraph` instance,
- there typically exists only a singleton instance of this class.
-
- Attributes
- ----------
- _hooks : ModuleHookCache
- Dictionary mapping the fully-qualified names of all modules with normal (post-graph) hooks to the absolute paths
- of such hooks. See the the `_find_module_path()` method for details.
- _hooks_pre_find_module_path : ModuleHookCache
- Dictionary mapping the fully-qualified names of all modules with pre-find module path hooks to the absolute
- paths of such hooks. See the the `_find_module_path()` method for details.
- _hooks_pre_safe_import_module : ModuleHookCache
- Dictionary mapping the fully-qualified names of all modules with pre-safe import module hooks to the absolute
- paths of such hooks. See the `_safe_import_module()` method for details.
- _user_hook_dirs : list
- List of the absolute paths of all directories containing user-defined hooks for the current application.
- _excludes : list
- List of module names to be excluded when searching for dependencies.
- _additional_files_cache : AdditionalFilesCache
- Cache of all external dependencies (e.g., binaries, datas) listed in hook scripts for imported modules.
- _module_collection_mode : dict
- A dictionary of module/package collection mode settings set by hook scripts for their modules.
- _bindepend_symlink_suppression : set
- A set of paths or path patterns corresponding to shared libraries for which binary dependency analysis should
- not create symbolic links into top-level application directory.
- _base_modules: list
- Dependencies for `base_library.zip` (which remain the same for every executable).
- """
-
- # Note: these levels are completely arbitrary and may be adjusted if needed.
- LOG_LEVEL_MAPPING = {0: INFO, 1: DEBUG, 2: TRACE, 3: TRACE, 4: TRACE}
-
- def __init__(self, pyi_homepath, user_hook_dirs=(), excludes=(), **kwargs):
- super().__init__(excludes=excludes, **kwargs)
- # Homepath to the place where is PyInstaller located.
- self._homepath = pyi_homepath
- # modulegraph Node for the main python script that is analyzed by PyInstaller.
- self._top_script_node = None
-
- # Absolute paths of all user-defined hook directories.
- self._excludes = excludes
- self._reset(user_hook_dirs)
- self._analyze_base_modules()
-
- def _reset(self, user_hook_dirs):
- """
- Reset for another set of scripts. This is primary required for running the test-suite.
- """
- self._top_script_node = None
- self._additional_files_cache = AdditionalFilesCache()
- self._module_collection_mode = dict()
- self._bindepend_symlink_suppression = set()
- # Hook sources: user-supplied (command-line / spec file), entry-point (upstream hooks, contributed hooks), and
- # built-in hooks. The order does not really matter anymore, because each entry is now a (location, priority)
- # tuple, and order is determined from assigned priority (which may also be overridden by hooks themselves).
- self._user_hook_dirs = [
- *user_hook_dirs,
- (os.path.join(PACKAGEPATH, 'hooks'), HOOK_PRIORITY_BUILTIN_HOOKS),
- ]
- # Hook-specific lookup tables. These need to reset when reusing cached PyiModuleGraph to avoid hooks to refer to
- # files or data from another test-case.
- logger.info('Initializing module graph hook caches...')
- self._hooks = self._cache_hooks("")
- self._hooks_pre_safe_import_module = self._cache_hooks('pre_safe_import_module')
- self._hooks_pre_find_module_path = self._cache_hooks('pre_find_module_path')
-
- # Search for run-time hooks in all hook directories.
- self._available_rthooks = defaultdict(list)
- for uhd, _ in self._user_hook_dirs:
- uhd_path = os.path.abspath(os.path.join(uhd, 'rthooks.dat'))
- try:
- with open(uhd_path, 'r', encoding='utf-8') as f:
- rthooks = ast.literal_eval(f.read())
- except FileNotFoundError:
- # Ignore if this hook path doesn't have run-time hooks.
- continue
- except Exception as e:
- logger.error('Unable to read run-time hooks from %r: %s' % (uhd_path, e))
- continue
-
- self._merge_rthooks(rthooks, uhd, uhd_path)
-
- # Convert back to a standard dict.
- self._available_rthooks = dict(self._available_rthooks)
-
- def _merge_rthooks(self, rthooks, uhd, uhd_path):
- """
- The expected data structure for a run-time hook file is a Python dictionary of type ``Dict[str, List[str]]``,
- where the dictionary keys are module names and the sequence strings are Python file names.
-
- Check then merge this data structure, updating the file names to be absolute.
- """
- # Check that the root element is a dict.
- assert isinstance(rthooks, dict), 'The root element in %s must be a dict.' % uhd_path
- for module_name, python_file_name_list in rthooks.items():
- # Ensure the key is a string.
- assert isinstance(module_name, str), \
- '%s must be a dict whose keys are strings; %s is not a string.' % (uhd_path, module_name)
- # Ensure the value is a list.
- assert isinstance(python_file_name_list, list), \
- 'The value of %s key %s must be a list.' % (uhd_path, module_name)
- if module_name in self._available_rthooks:
- logger.warning(
- 'Runtime hooks for %s have already been defined. Skipping the runtime hooks for %s that are '
- 'defined in %s.', module_name, module_name, os.path.join(uhd, 'rthooks')
- )
- # Skip this module
- continue
- # Merge this with existing run-time hooks.
- for python_file_name in python_file_name_list:
- # Ensure each item in the list is a string.
- assert isinstance(python_file_name, str), \
- '%s key %s, item %r must be a string.' % (uhd_path, module_name, python_file_name)
- # Transform it into an absolute path.
- abs_path = os.path.join(uhd, 'rthooks', python_file_name)
- # Make sure this file exists.
- assert os.path.exists(abs_path), \
- 'In %s, key %s, the file %r expected to be located at %r does not exist.' % \
- (uhd_path, module_name, python_file_name, abs_path)
- # Merge it.
- self._available_rthooks[module_name].append(abs_path)
-
- @staticmethod
- def _findCaller(*args, **kwargs):
- # Used to add an additional stack-frame above logger.findCaller. findCaller expects the caller to be three
- # stack-frames above itself.
- return logger.findCaller(*args, **kwargs)
-
- def msg(self, level, s, *args):
- """
- Print a debug message with the given level.
-
- 1. Map the msg log level to a logger log level.
- 2. Generate the message format (the same format as ModuleGraph)
- 3. Find the caller, which findCaller expects three stack-frames above itself:
- [3] caller -> [2] msg (here) -> [1] _findCaller -> [0] logger.findCaller
- 4. Create a logRecord with the caller's information.
- 5. Handle the logRecord.
- """
- try:
- level = self.LOG_LEVEL_MAPPING[level]
- except KeyError:
- return
- if not logger.isEnabledFor(level):
- return
-
- msg = "%s %s" % (s, ' '.join(map(repr, args)))
-
- try:
- fn, lno, func, sinfo = self._findCaller()
- except ValueError: # pragma: no cover
- fn, lno, func, sinfo = "(unknown file)", 0, "(unknown function)", None
- record = logger.makeRecord(logger.name, level, fn, lno, msg, [], None, func, None, sinfo)
-
- logger.handle(record)
-
- # Set logging methods so that the stack is correctly detected.
- msgin = msg
- msgout = msg
-
- def _cache_hooks(self, hook_type):
- """
- Create a cache of all hooks of the specified type.
-
- The cache will include all official hooks defined by the PyInstaller codebase _and_ all unofficial hooks
- defined for the current application.
-
- Parameters
- ----------
- hook_type : str
- Type of hooks to be cached, equivalent to the basename of the subpackage of the `PyInstaller.hooks`
- package containing such hooks (e.g., empty string for standard hooks, `pre_safe_import_module` for
- pre-safe-import-module hooks, `pre_find_module_path` for pre-find-module-path hooks).
- """
- # Cache of this type of hooks.
- hook_dirs = []
- for user_hook_dir, priority in self._user_hook_dirs:
- # Absolute path of the user-defined subdirectory of this hook type. If this directory exists, add it to the
- # list to be cached.
- user_hook_type_dir = os.path.join(user_hook_dir, hook_type)
- if os.path.isdir(user_hook_type_dir):
- hook_dirs.append((user_hook_type_dir, priority))
-
- return ModuleHookCache(self, hook_dirs)
-
- def _analyze_base_modules(self):
- """
- Analyze dependencies of the the modules in base_library.zip.
- """
- logger.info('Analyzing modules for base_library.zip ...')
- required_mods = []
- # Collect submodules from required modules in base_library.zip.
- for m in PY3_BASE_MODULES:
- if is_package(m):
- required_mods += collect_submodules(m)
- else:
- required_mods.append(m)
- # Initialize ModuleGraph.
- self._base_modules = [mod for req in required_mods for mod in self.import_hook(req)]
-
- def add_script(self, pathname, caller=None):
- """
- Wrap the parent's 'run_script' method and create graph from the first script in the analysis, and save its
- node to use as the "caller" node for all others. This gives a connected graph rather than a collection of
- unrelated trees.
- """
- if self._top_script_node is None:
- # Remember the node for the first script.
- try:
- self._top_script_node = super().add_script(pathname)
- except SyntaxError:
- print("\nSyntax error in", pathname, file=sys.stderr)
- formatted_lines = traceback.format_exc().splitlines(True)
- print(*formatted_lines[-4:], file=sys.stderr)
- sys.exit(1)
- # Create references from the top script to the base_modules in graph.
- for node in self._base_modules:
- self.add_edge(self._top_script_node, node)
- # Return top-level script node.
- return self._top_script_node
- else:
- if not caller:
- # Defaults to as any additional script is called from the top-level script.
- caller = self._top_script_node
- return super().add_script(pathname, caller=caller)
-
- def process_post_graph_hooks(self, analysis):
- """
- For each imported module, run this module's post-graph hooks if any.
-
- Parameters
- ----------
- analysis: build_main.Analysis
- The Analysis that calls the hooks
-
- """
- # For each iteration of the infinite "while" loop below:
- #
- # 1. All hook() functions defined in cached hooks for imported modules are called. This may result in new
- # modules being imported (e.g., as hidden imports) that were ignored earlier in the current iteration: if
- # this is the case, all hook() functions defined in cached hooks for these modules will be called by the next
- # iteration.
- # 2. All cached hooks whose hook() functions were called are removed from this cache. If this cache is empty, no
- # hook() functions will be called by the next iteration and this loop will be terminated.
- # 3. If no hook() functions were called, this loop is terminated.
- logger.info('Processing module hooks (post-graph stage)...')
- while True:
- # Set of the names of all imported modules whose post-graph hooks are run by this iteration, preventing the
- # next iteration from re- running these hooks. If still empty at the end of this iteration, no post-graph
- # hooks were run; thus, this loop will be terminated.
- hooked_module_names = set()
-
- # For each remaining hookable module and corresponding hooks...
- for module_name, module_hook in self._hooks.items():
- # Graph node for this module if imported or "None" otherwise.
- module_node = self.find_node(module_name, create_nspkg=False)
-
- # If this module has not been imported, temporarily ignore it. This module is retained in the cache, as
- # a subsequently run post-graph hook could import this module as a hidden import.
- if module_node is None:
- continue
-
- # If this module is unimportable, permanently ignore it.
- if type(module_node).__name__ not in VALID_MODULE_TYPES:
- hooked_module_names.add(module_name)
- continue
-
- # Run this script's post-graph hook.
- module_hook.post_graph(analysis)
-
- # Cache all external dependencies listed by this script after running this hook, which could add
- # dependencies.
- self._additional_files_cache.add(module_name, module_hook.binaries, module_hook.datas)
-
- # Update package collection mode settings.
- self._module_collection_mode.update(module_hook.module_collection_mode)
-
- # Update symbolic link suppression patterns for binary dependency analysis.
- self._bindepend_symlink_suppression.update(module_hook.bindepend_symlink_suppression)
-
- # Prevent this module's hooks from being run again.
- hooked_module_names.add(module_name)
-
- # Prevent all post-graph hooks run above from being run again by the next iteration.
- self._hooks.remove_modules(*hooked_module_names)
-
- # If no post-graph hooks were run, terminate iteration.
- if not hooked_module_names:
- break
-
- def _find_all_excluded_imports(self, module_name):
- """
- Collect excludedimports from the hooks of the specified module and all its parents.
- """
- excluded_imports = set()
- while module_name:
- # Gather excluded imports from hook belonging to the module.
- module_hook = self._hooks.get(module_name, None)
- if module_hook:
- excluded_imports.update(module_hook.excludedimports)
- # Change module name to the module's parent name
- module_name = module_name.rpartition('.')[0]
- return excluded_imports
-
- def _safe_import_hook(
- self, target_module_partname, source_module, target_attr_names, level=DEFAULT_IMPORT_LEVEL, edge_attr=None
- ):
- if source_module is not None:
- # Gather all excluded imports for the referring modules, as well as its parents.
- # For example, we want the excluded imports specified by hook for PIL to be also applied when the referring
- # module is its submodule, PIL.Image.
- excluded_imports = self._find_all_excluded_imports(source_module.identifier)
-
- # Apply extra processing only if we have any excluded-imports rules
- if excluded_imports:
- # Resolve the base module name. Level can be ABSOLUTE_IMPORT_LEVEL (= 0) for absolute imports, or an
- # integer indicating the relative level. We do not use equality comparison just in case we ever happen
- # to get ABSOLUTE_OR_RELATIVE_IMPORT_LEVEL (-1), which is a remnant of python2 days.
- if level > ABSOLUTE_IMPORT_LEVEL:
- if isinstance(source_module, Package):
- # Package
- base_module_name = source_module.identifier
- else:
- # Module in a package; base name must be the parent package name!
- base_module_name = '.'.join(source_module.identifier.split('.')[:-1])
-
- # Adjust the base module name based on level
- if level > 1:
- base_module_name = '.'.join(base_module_name.split('.')[:-(level - 1)])
-
- if target_module_partname:
- base_module_name += '.' + target_module_partname
- else:
- base_module_name = target_module_partname
-
- def _exclude_module(module_name, excluded_imports, referrer_name):
- """
- Helper for checking whether given module should be excluded.
- Returns the name of exclusion rule if module should be excluded, None otherwise.
- """
- module_name_parts = module_name.split('.')
- for excluded_import in excluded_imports:
- excluded_import_parts = excluded_import.split('.')
- match = module_name_parts[:len(excluded_import_parts)] == excluded_import_parts
- if match:
- # Check if the referrer is (was!) subject to the same rule. Because if it was and was
- # analyzed anyway, some other import chain must have overrode the exclusion, and we should
- # waive it here. A package hook might exclude a part (a subpackage) of the said package to
- # prevent its collection when there are no external references; but when they are (for
- # example, user explicitly imports the said subpackage in their program), we must let the
- # subpackage import its submodules.
- referrer_name_parts = referrer_name.split('.')
- referrer_match = referrer_name_parts[:len(excluded_import_parts)] == excluded_import_parts
- if referrer_match:
- logger.debug(
- "Deactivating suppression rule %r for module %r because it also applies to the "
- "referrer (%r)...", excluded_import, module_name, referrer_name
- )
- continue
-
- return excluded_import
- return None
-
- # First, check if base module name is to be excluded.
- # This covers both basic `import a` and `import a.b.c`, as well as `from d import e, f` where base
- # module `d` is excluded.
- excluded_import_rule = _exclude_module(
- base_module_name,
- excluded_imports,
- source_module.identifier,
- )
- if excluded_import_rule:
- logger.debug(
- "Suppressing import of %r from module %r due to excluded import %r specified in a hook for %r "
- "(or its parent package(s)).", base_module_name, source_module.identifier, excluded_import_rule,
- source_module.identifier
- )
- return []
-
- # If we have target attribute names, check each of them, and remove excluded ones from the
- # `target_attr_names` list.
- if target_attr_names:
- filtered_target_attr_names = []
- for target_attr_name in target_attr_names:
- submodule_name = base_module_name + '.' + target_attr_name
- excluded_import_rule = _exclude_module(
- submodule_name,
- excluded_imports,
- source_module.identifier,
- )
- if excluded_import_rule:
- logger.debug(
- "Suppressing import of %r from module %r due to excluded import %r specified in a hook "
- "for %r (or its parent package(s)).", submodule_name, source_module.identifier,
- excluded_import_rule, source_module.identifier
- )
- else:
- filtered_target_attr_names.append(target_attr_name)
-
- # Swap with filtered target attribute names list; if no elements remain after the filtering, pass
- # None...
- target_attr_names = filtered_target_attr_names or None
-
- ret_modules = super()._safe_import_hook(
- target_module_partname, source_module, target_attr_names, level, edge_attr
- )
-
- # Ensure that hooks are pre-loaded for returned module(s), in an attempt to ensure that hooks are called in the
- # order of imports. The hooks are cached, so there should be no downsides to pre-loading hooks early (as opposed
- # to loading them in post-graph analysis). When modules are imported from other modules, the hooks for those
- # referring (source) modules and their parent package(s) are loaded by the exclusion mechanism that takes place
- # before the above `super()._safe_import_hook` call. The code below attempts to complement that, but for the
- # referred (target) modules and their parent package(s).
- for ret_module in ret_modules:
- if type(ret_module).__name__ not in VALID_MODULE_TYPES:
- continue
- # (Ab)use the `_find_all_excluded_imports` helper to load all hooks for the given module and its parent
- # package(s).
- self._find_all_excluded_imports(ret_module.identifier)
-
- return ret_modules
-
- def _safe_import_module(self, module_basename, module_name, parent_package):
- """
- Create a new graph node for the module with the passed name under the parent package signified by the passed
- graph node.
-
- This method wraps the superclass method with support for pre-import module hooks. If such a hook exists for
- this module (e.g., a script `PyInstaller.hooks.hook-{module_name}` containing a function
- `pre_safe_import_module()`), that hook will be run _before_ the superclass method is called.
-
- Pre-Safe-Import-Hooks are performed just *prior* to importing the module. When running the hook, the modules
- parent package has already been imported and ti's `__path__` is set up. But the module is just about to be
- imported.
-
- See the superclass method for description of parameters and return value.
- """
- # If this module has a pre-safe import module hook, run it. Make sure to remove it first, to prevent subsequent
- # calls from running it again.
- hook = self._hooks_pre_safe_import_module.pop(module_name, None)
- if hook is not None:
- # Dynamically import this hook as a fabricated module.
- hook_path, hook_basename = os.path.split(hook.hook_filename)
- logger.info('Processing pre-safe-import-module hook %r from %r', hook_basename, hook_path)
- hook_module_name = 'PyInstaller_hooks_pre_safe_import_module_' + module_name.replace('.', '_')
- hook_module = importlib_load_source(hook_module_name, hook.hook_filename)
-
- # Object communicating changes made by this hook back to us.
- hook_api = PreSafeImportModuleAPI(
- module_graph=self,
- module_basename=module_basename,
- module_name=module_name,
- parent_package=parent_package,
- )
-
- # Run this hook, passed this object.
- if not hasattr(hook_module, 'pre_safe_import_module'):
- raise NameError('pre_safe_import_module() function not defined by hook %r.' % hook_module)
- hook_module.pre_safe_import_module(hook_api)
-
- # Respect method call changes requested by this hook.
- module_basename = hook_api.module_basename
- module_name = hook_api.module_name
-
- # Call the superclass method.
- return super()._safe_import_module(module_basename, module_name, parent_package)
-
- def _find_module_path(self, fullname, module_name, search_dirs):
- """
- Get a 3-tuple detailing the physical location of the module with the passed name if that module exists _or_
- raise `ImportError` otherwise.
-
- This method wraps the superclass method with support for pre-find module path hooks. If such a hook exists
- for this module (e.g., a script `PyInstaller.hooks.hook-{module_name}` containing a function
- `pre_find_module_path()`), that hook will be run _before_ the superclass method is called.
-
- See superclass method for parameter and return value descriptions.
- """
- # If this module has a pre-find module path hook, run it. Make sure to remove it first, to prevent subsequent
- # calls from running it again.
- hook = self._hooks_pre_find_module_path.pop(fullname, None)
- if hook is not None:
- # Dynamically import this hook as a fabricated module.
- hook_path, hook_basename = os.path.split(hook.hook_filename)
- logger.info('Processing pre-find-module-path hook %r from %r', hook_basename, hook_path)
- hook_fullname = 'PyInstaller_hooks_pre_find_module_path_' + fullname.replace('.', '_')
- hook_module = importlib_load_source(hook_fullname, hook.hook_filename)
-
- # Object communicating changes made by this hook back to us.
- hook_api = PreFindModulePathAPI(
- module_graph=self,
- module_name=fullname,
- search_dirs=search_dirs,
- )
-
- # Run this hook, passed this object.
- if not hasattr(hook_module, 'pre_find_module_path'):
- raise NameError('pre_find_module_path() function not defined by hook %r.' % hook_module)
- hook_module.pre_find_module_path(hook_api)
-
- # Respect search-directory changes requested by this hook.
- search_dirs = hook_api.search_dirs
-
- # Call the superclass method.
- return super()._find_module_path(fullname, module_name, search_dirs)
-
- def get_code_objects(self):
- """
- Get code objects from ModuleGraph for pure Python modules. This allows to avoid writing .pyc/pyo files to hdd
- at later stage.
-
- :return: Dict with module name and code object.
- """
- code_dict = {}
- mod_types = PURE_PYTHON_MODULE_TYPES
- for node in self.iter_graph(start=self._top_script_node):
- # TODO This is terrible. To allow subclassing, types should never be directly compared. Use isinstance()
- # instead, which is safer, simpler, and accepts sets. Most other calls to type() in the codebase should also
- # be refactored to call isinstance() instead.
-
- # get node type e.g. Script
- mg_type = type(node).__name__
- if mg_type in mod_types:
- if node.code:
- code_dict[node.identifier] = node.code
- return code_dict
-
- def _make_toc(self, typecode=None):
- """
- Return the name, path and type of selected nodes as a TOC. The selection is determined by the given list
- of PyInstaller TOC typecodes. If that list is empty we return the complete flattened graph as a TOC with the
- ModuleGraph note types in place of typecodes -- meant for debugging only. Normally we return ModuleGraph
- nodes whose types map to the requested PyInstaller typecode(s) as indicated in the MODULE_TYPES_TO_TOC_DICT.
-
- We use the ModuleGraph (really, ObjectGraph) flatten() method to scan all the nodes. This is patterned after
- ModuleGraph.report().
- """
- toc = list()
- for node in self.iter_graph(start=self._top_script_node):
- entry = self._node_to_toc(node, typecode)
- # Append the entry. We do not check for duplicates here; the TOC normalization is left to caller.
- # However, as entries are obtained from modulegraph, there should not be any duplicates at this stage.
- if entry is not None:
- toc.append(entry)
- return toc
-
- def make_pure_toc(self):
- """
- Return all pure Python modules formatted as TOC.
- """
- # PyInstaller should handle special module types without code object.
- return self._make_toc(PURE_PYTHON_MODULE_TYPES)
-
- def make_binaries_toc(self):
- """
- Return all binary Python modules formatted as TOC.
- """
- return self._make_toc(BINARY_MODULE_TYPES)
-
- def make_missing_toc(self):
- """
- Return all MISSING Python modules formatted as TOC.
- """
- return self._make_toc(BAD_MODULE_TYPES)
-
- @staticmethod
- def _node_to_toc(node, typecode=None):
- # TODO This is terrible. Everything in Python has a type. It is nonsensical to even speak of "nodes [that] are
- # not typed." How would that even occur? After all, even "None" has a type! (It is "NoneType", for the curious.)
- # Remove this, please.
-
- # Get node type, e.g., Script
- mg_type = type(node).__name__
- assert mg_type is not None
-
- if typecode and mg_type not in typecode:
- # Type is not a to be selected one, skip this one
- return None
- # Extract the identifier and a path if any.
- if mg_type == 'Script':
- # for Script nodes only, identifier is a whole path
- (name, ext) = os.path.splitext(node.filename)
- name = os.path.basename(name)
- elif mg_type == 'ExtensionPackage':
- # Package with __init__ module being an extension module. This needs to end up as e.g. 'mypkg/__init__.so'.
- # Convert the packages name ('mypkg') into the module name ('mypkg.__init__') *here* to keep special cases
- # away elsewhere (where the module name is converted to a filename).
- name = node.identifier + ".__init__"
- else:
- name = node.identifier
- path = node.filename if node.filename is not None else ''
- # Ensure name is really 'str'. Module graph might return object type 'modulegraph.Alias' which inherits fromm
- # 'str'. But 'marshal.dumps()' function is able to marshal only 'str'. Otherwise on Windows PyInstaller might
- # fail with message like:
- # ValueError: unmarshallable object
- name = str(name)
- # Translate to the corresponding TOC typecode.
- toc_type = MODULE_TYPES_TO_TOC_DICT[mg_type]
- return name, path, toc_type
-
- def nodes_to_toc(self, nodes):
- """
- Given a list of nodes, create a TOC representing those nodes. This is mainly used to initialize a TOC of
- scripts with the ones that are runtime hooks. The process is almost the same as _make_toc(), but the caller
- guarantees the nodes are valid, so minimal checking.
- """
- return [self._node_to_toc(node) for node in nodes]
-
- # Return true if the named item is in the graph as a BuiltinModule node. The passed name is a basename.
- def is_a_builtin(self, name):
- node = self.find_node(name)
- if node is None:
- return False
- return type(node).__name__ == 'BuiltinModule'
-
- def get_importers(self, name):
- """
- List all modules importing the module with the passed name.
-
- Returns a list of (identifier, DependencyIinfo)-tuples. If the names module has not yet been imported, this
- method returns an empty list.
-
- Parameters
- ----------
- name : str
- Fully-qualified name of the module to be examined.
-
- Returns
- ----------
- list
- List of (fully-qualified names, DependencyIinfo)-tuples of all modules importing the module with the passed
- fully-qualified name.
-
- """
- def get_importer_edge_data(importer):
- edge = self.graph.edge_by_node(importer, name)
- # edge might be None in case an AliasModule was added.
- if edge is not None:
- return self.graph.edge_data(edge)
-
- node = self.find_node(name)
- if node is None:
- return []
- _, importers = self.get_edges(node)
- importers = (importer.identifier for importer in importers if importer is not None)
- return [(importer, get_importer_edge_data(importer)) for importer in importers]
-
- # TODO: create a class from this function.
- def analyze_runtime_hooks(self, custom_runhooks):
- """
- Analyze custom run-time hooks and run-time hooks implied by found modules.
-
- :return : list of Graph nodes.
- """
- rthooks_nodes = []
- logger.info('Analyzing run-time hooks ...')
- # Process custom runtime hooks (from --runtime-hook options). The runtime hooks are order dependent. First hooks
- # in the list are executed first. Put their graph nodes at the head of the priority_scripts list Pyinstaller
- # defined rthooks and thus they are executed first.
- if custom_runhooks:
- for hook_file in custom_runhooks:
- logger.info("Including custom run-time hook %r", hook_file)
- hook_file = os.path.abspath(hook_file)
- # Not using "try" here because the path is supposed to exist, if it does not, the raised error will
- # explain.
- rthooks_nodes.append(self.add_script(hook_file))
-
- # Find runtime hooks that are implied by packages already imported. Get a temporary TOC listing all the scripts
- # and packages graphed so far. Assuming that runtime hooks apply only to modules and packages.
- temp_toc = self._make_toc(VALID_MODULE_TYPES)
- for (mod_name, path, typecode) in temp_toc:
- # Look if there is any run-time hook for given module.
- if mod_name in self._available_rthooks:
- # There could be several run-time hooks for a module.
- for abs_path in self._available_rthooks[mod_name]:
- hook_path, hook_basename = os.path.split(abs_path)
- logger.info("Including run-time hook %r from %r", hook_basename, hook_path)
- rthooks_nodes.append(self.add_script(abs_path))
-
- return rthooks_nodes
-
- def add_hiddenimports(self, module_list):
- """
- Add hidden imports that are either supplied as CLI option --hidden-import=MODULENAME or as dependencies from
- some PyInstaller features when enabled (e.g., crypto feature).
- """
- assert self._top_script_node is not None
- # Analyze the script's hidden imports (named on the command line).
- for modnm in module_list:
- node = self.find_node(modnm)
- if node is not None:
- logger.debug('Hidden import %r already found', modnm)
- else:
- logger.info("Analyzing hidden import %r", modnm)
- # ModuleGraph throws ImportError if import not found.
- try:
- nodes = self.import_hook(modnm)
- assert len(nodes) == 1
- node = nodes[0]
- except ImportError:
- logger.error("Hidden import %r not found", modnm)
- continue
- # Create references from the top script to the hidden import, even if found otherwise. Do not waste time
- # checking whether it is actually added by this (test-) script.
- self.add_edge(self._top_script_node, node)
-
- def get_code_using(self, module: str) -> dict:
- """
- Find modules that import a given **module**.
- """
- co_dict = {}
- pure_python_module_types = PURE_PYTHON_MODULE_TYPES | {
- 'Script',
- }
- node = self.find_node(module)
- if node:
- referrers = self.incoming(node)
- for r in referrers:
- # Under python 3.7 and earlier, if `module` is added to hidden imports, one of referrers ends up being
- # None, causing #3825. Work around it.
- if r is None:
- continue
- # Ensure that modulegraph objects have 'code' attribute.
- if type(r).__name__ not in pure_python_module_types:
- continue
- identifier = r.identifier
- if identifier == module or identifier.startswith(module + '.'):
- # Skip self references or references from `modules`'s own submodules.
- continue
- # The code object may be None if referrer ends up shadowed by eponymous directory that ends up treated
- # as a namespace package. See #6873 for an example.
- if r.code is None:
- continue
- co_dict[r.identifier] = r.code
- return co_dict
-
- def metadata_required(self) -> set:
- """
- Collect metadata for all packages that appear to need it.
- """
-
- # List every function that we can think of which is known to require metadata.
- out = set()
-
- out |= self._metadata_from(
- "pkg_resources",
- ["get_distribution"], # Requires metadata for one distribution.
- ["require"], # Requires metadata for all dependencies.
- )
-
- # importlib.metadata is often `import ... as` aliased to importlib_metadata for compatibility with < py38.
- # Assume both are valid.
- for importlib_metadata in ["importlib.metadata", "importlib_metadata"]:
- out |= self._metadata_from(
- importlib_metadata,
- ["metadata", "distribution", "version", "files", "requires"],
- [],
- )
-
- return out
-
- def _metadata_from(self, package, methods=(), recursive_methods=()) -> set:
- """
- Collect metadata whose requirements are implied by given function names.
-
- Args:
- package:
- The module name that must be imported in a source file to trigger the search.
- methods:
- Function names from **package** which take a distribution name as an argument and imply that metadata
- is required for that distribution.
- recursive_methods:
- Like **methods** but also implies that a distribution's dependencies' metadata must be collected too.
- Returns:
- Required metadata in hook data ``(source, dest)`` format as returned by
- :func:`PyInstaller.utils.hooks.copy_metadata()`.
-
- Scan all source code to be included for usage of particular *key* functions which imply that that code will
- require metadata for some distribution (which may not be its own) at runtime. In the case of a match,
- collect the required metadata.
- """
- from PyInstaller.utils.hooks import copy_metadata
- from PyInstaller.compat import importlib_metadata
-
- # Generate sets of possible function names to search for.
- need_metadata = set()
- need_recursive_metadata = set()
- for method in methods:
- need_metadata.update(bytecode.any_alias(package + "." + method))
- for method in recursive_methods:
- need_recursive_metadata.update(bytecode.any_alias(package + "." + method))
-
- out = set()
-
- for name, code in self.get_code_using(package).items():
- for calls in bytecode.recursive_function_calls(code).values():
- for function_name, args in calls:
- # Only consider function calls taking one argument.
- if len(args) != 1:
- continue
- package = args[0]
- try:
- if function_name in need_metadata:
- out.update(copy_metadata(package))
- elif function_name in need_recursive_metadata:
- out.update(copy_metadata(package, recursive=True))
-
- except importlib_metadata.PackageNotFoundError:
- # Currently, we opt to silently skip over missing metadata.
- continue
-
- return out
-
- def get_collected_packages(self) -> list:
- """
- Return the list of collected python packages.
- """
- # `node.identifier` might be an instance of `modulegraph.Alias`, hence explicit conversion to `str`.
- return [
- str(node.identifier) for node in self.iter_graph(start=self._top_script_node)
- if type(node).__name__ == 'Package'
- ]
-
- def make_hook_binaries_toc(self) -> list:
- """
- Return the TOC list of binaries collected by hooks."
- """
- toc = []
- for node in self.iter_graph(start=self._top_script_node):
- module_name = str(node.identifier)
- for dest_name, src_name in self._additional_files_cache.binaries(module_name):
- toc.append((dest_name, src_name, 'BINARY'))
-
- return toc
-
- def make_hook_datas_toc(self) -> list:
- """
- Return the TOC list of data files collected by hooks."
- """
- toc = []
- for node in self.iter_graph(start=self._top_script_node):
- module_name = str(node.identifier)
- for dest_name, src_name in self._additional_files_cache.datas(module_name):
- toc.append((dest_name, src_name, 'DATA'))
-
- return toc
-
-
-_cached_module_graph_ = None
-
-
-def initialize_modgraph(excludes=(), user_hook_dirs=()):
- """
- Create the cached module graph.
-
- This function might appear weird but is necessary for speeding up test runtime because it allows caching basic
- ModuleGraph object that gets created for 'base_library.zip'.
-
- Parameters
- ----------
- excludes : list
- List of the fully-qualified names of all modules to be "excluded" and hence _not_ frozen into the executable.
- user_hook_dirs : list
- List of the absolute paths of all directories containing user-defined hooks for the current application or
- `None` if no such directories were specified.
-
- Returns
- ----------
- PyiModuleGraph
- Module graph with core dependencies.
- """
- # Normalize parameters to ensure tuples and make comparison work.
- user_hook_dirs = user_hook_dirs or ()
- excludes = excludes or ()
-
- # Ensure that __main__ is always excluded from the modulegraph, to prevent accidentally pulling PyInstaller itself
- # into the modulegraph. This seems to happen on Windows, because modulegraph is able to resolve `__main__` as
- # `.../PyInstaller.exe/__main__.py` and analyze it. The `__main__` has a different meaning during analysis compared
- # to the program run-time, when it refers to the program's entry-point (which would always be part of the
- # modulegraph anyway, by virtue of being the starting point of the analysis).
- if "__main__" not in excludes:
- excludes += ("__main__",)
-
- # If there is a graph cached with the same excludes, reuse it. See ``PyiModulegraph._reset()`` for what is
- # reset. This cache is used primarily to speed up the test-suite. Fixture `pyi_modgraph` calls this function with
- # empty excludes, creating a graph suitable for the huge majority of tests.
- global _cached_module_graph_
- if _cached_module_graph_ and _cached_module_graph_._excludes == excludes:
- logger.info('Reusing cached module dependency graph...')
- graph = deepcopy(_cached_module_graph_)
- graph._reset(user_hook_dirs)
- return graph
-
- logger.info('Initializing module dependency graph...')
-
- # Construct the initial module graph by analyzing all import statements.
- graph = PyiModuleGraph(
- HOMEPATH,
- excludes=excludes,
- # get_implies() are hidden imports known by modulgraph.
- implies=get_implies(),
- user_hook_dirs=user_hook_dirs,
- )
-
- if not _cached_module_graph_:
- # Only cache the first graph, see above for explanation.
- logger.info('Caching module dependency graph...')
- # cache a deep copy of the graph
- _cached_module_graph_ = deepcopy(graph)
- # Clear data which does not need to be copied from the cached graph since it will be reset by
- # ``PyiModulegraph._reset()`` anyway.
- _cached_module_graph_._hooks = None
- _cached_module_graph_._hooks_pre_safe_import_module = None
- _cached_module_graph_._hooks_pre_find_module_path = None
-
- return graph
-
-
-def get_bootstrap_modules():
- """
- Get TOC with the bootstrapping modules and their dependencies.
- :return: TOC with modules
- """
- # Import 'struct' modules to get real paths to module file names.
- mod_struct = __import__('struct')
- # Basic modules necessary for the bootstrap process.
- loader_mods = list()
- loaderpath = os.path.join(HOMEPATH, 'PyInstaller', 'loader')
- # On some platforms (Windows, Debian/Ubuntu) '_struct' and zlib modules are built-in modules (linked statically)
- # and thus does not have attribute __file__. 'struct' module is required for reading Python bytecode from
- # executable. 'zlib' is required to decompress this bytecode.
- for mod_name in ['_struct', 'zlib']:
- mod = __import__(mod_name) # C extension.
- if hasattr(mod, '__file__'):
- mod_file = os.path.abspath(mod.__file__)
- # Resolve full destination name for extension, diverting it into python3.x/lib-dynload directory if
- # necessary (to match behavior for extension collection introduced in #5604).
- mod_dest = destination_name_for_extension(mod_name, mod_file, 'EXTENSION')
- loader_mods.append((mod_dest, mod_file, 'EXTENSION'))
- loader_mods.append(('struct', os.path.abspath(mod_struct.__file__), 'PYMODULE'))
- # Loader/bootstrap modules.
- # NOTE: These modules should be kept simple without any complicated dependencies.
- loader_mods += [
- ('pyimod01_archive', os.path.join(loaderpath, 'pyimod01_archive.py'), 'PYMODULE'),
- ('pyimod02_importers', os.path.join(loaderpath, 'pyimod02_importers.py'), 'PYMODULE'),
- ('pyimod03_ctypes', os.path.join(loaderpath, 'pyimod03_ctypes.py'), 'PYMODULE'),
- ]
- if is_win:
- loader_mods.append(('pyimod04_pywin32', os.path.join(loaderpath, 'pyimod04_pywin32.py'), 'PYMODULE'))
- # The bootstrap script
- loader_mods.append(('pyiboot01_bootstrap', os.path.join(loaderpath, 'pyiboot01_bootstrap.py'), 'PYSOURCE'))
- return loader_mods
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/bindepend.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/bindepend.py
deleted file mode 100755
index 23b3769..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/bindepend.py
+++ /dev/null
@@ -1,1131 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Find external dependencies of binary libraries.
-"""
-
-import ctypes.util
-import functools
-import os
-import pathlib
-import re
-import sys
-import sysconfig
-import subprocess
-
-from PyInstaller import compat
-from PyInstaller import log as logging
-from PyInstaller.depend import dylib, utils
-from PyInstaller.utils.win32 import winutils
-from PyInstaller.exceptions import PythonLibraryNotFoundError
-
-if compat.is_darwin:
- import PyInstaller.utils.osx as osxutils
-
-logger = logging.getLogger(__name__)
-
-_exe_machine_type = None
-if compat.is_win:
- _exe_machine_type = winutils.get_pe_file_machine_type(compat.python_executable)
-
-#- High-level binary dependency analysis
-
-
-def _get_paths_for_parent_directory_preservation():
- """
- Return list of paths that serve as prefixes for parent-directory preservation of collected binaries and/or
- shared libraries. If a binary is collected from a location that starts with a path from this list, the relative
- directory structure is preserved within the frozen application bundle; otherwise, the binary is collected to the
- frozen application's top-level directory.
- """
-
- # Use only site-packages paths. We have no control over contents of `sys.path`, so using all paths from that may
- # lead to unintended behavior in corner cases. For example, if `sys.path` contained the drive root (see #7028),
- # all paths that do not match some other sub-path rooted in that drive will end up recognized as relative to the
- # drive root. In such case, any DLL collected from `c:\Windows\system32` will be collected into `Windows\system32`
- # sub-directory; ucrt DLLs collected from MSVC or Windows SDK installed in `c:\Program Files\...` will end up
- # collected into `Program Files\...` subdirectory; etc.
- #
- # On the other hand, the DLL parent directory preservation is primarily aimed at packages installed via PyPI
- # wheels, which are typically installed into site-packages. Therefore, limiting the directory preservation for
- # shared libraries collected from site-packages should do the trick, and should be reasonably safe.
- import site
-
- orig_paths = site.getsitepackages()
- orig_paths.append(site.getusersitepackages())
-
- # Explicitly excluded paths. `site.getsitepackages` seems to include `sys.prefix`, which we need to exclude, to
- # avoid issue swith DLLs in its sub-directories. We need both resolved and unresolved variant to handle cases
- # where `base_prefix` itself is a symbolic link (e.g., `scoop`-installed python on Windows, see #8023).
- excluded_paths = {
- pathlib.Path(sys.base_prefix),
- pathlib.Path(sys.base_prefix).resolve(),
- pathlib.Path(sys.prefix),
- pathlib.Path(sys.prefix).resolve(),
- }
-
- # For each path in orig_paths, append a resolved variant. This helps with linux venv where we need to consider
- # both `venv/lib/python3.11/site-packages` and `venv/lib/python3.11/site-packages` and `lib64` is a symlink
- # to `lib`.
- orig_paths += [pathlib.Path(path).resolve() for path in orig_paths]
-
- paths = set()
- for path in orig_paths:
- if not path:
- continue
- path = pathlib.Path(path)
- # Filter out non-directories (e.g., /path/to/python3x.zip) or non-existent paths
- if not path.is_dir():
- continue
- # Filter out explicitly excluded paths
- if path in excluded_paths:
- continue
- paths.add(path)
-
- # Sort by length (in term of path components) to ensure match against the longest common prefix (for example, match
- # /path/to/venv/lib/site-packages instead of /path/to/venv when both paths are in site paths).
- paths = sorted(paths, key=lambda x: len(x.parents), reverse=True)
-
- return paths
-
-
-def _select_destination_directory(src_filename, parent_dir_preservation_paths):
- # Check parent directory preservation paths
- for parent_dir_preservation_path in parent_dir_preservation_paths:
- if parent_dir_preservation_path in src_filename.parents:
- # Collect into corresponding sub-directory.
- return src_filename.relative_to(parent_dir_preservation_path)
-
- # Collect into top-level directory.
- return src_filename.name
-
-
-def binary_dependency_analysis(binaries, search_paths=None, symlink_suppression_patterns=None):
- """
- Perform binary dependency analysis on the given TOC list of collected binaries, by recursively scanning each binary
- for linked dependencies (shared library imports). Returns new TOC list that contains both original entries and their
- binary dependencies.
-
- Additional search paths for dependencies' full path resolution may be supplied via optional argument.
- """
-
- # Get all path prefixes for binaries' parent-directory preservation. For binaries collected from packages in (for
- # example) site-packages directory, we should try to preserve the parent directory structure.
- parent_dir_preservation_paths = _get_paths_for_parent_directory_preservation()
-
- # Keep track of processed binaries and processed dependencies.
- processed_binaries = set()
- processed_dependencies = set()
-
- # Keep track of unresolved dependencies, in order to defer the missing-library warnings until after everything has
- # been processed. This allows us to suppress warnings for dependencies that end up being collected anyway; for
- # details, see the end of this function.
- missing_dependencies = []
-
- # Populate output TOC with input binaries - this also serves as TODO list, as we iterate over it while appending
- # new entries at the end.
- output_toc = binaries[:]
- for dest_name, src_name, typecode in output_toc:
- # Do not process symbolic links (already present in input TOC list, or added during analysis below).
- if typecode == 'SYMLINK':
- continue
-
- # Keep track of processed binaries, to avoid unnecessarily repeating analysis of the same file. Use pathlib.Path
- # to avoid having to worry about case normalization.
- src_path = pathlib.Path(src_name)
- if src_path in processed_binaries:
- continue
- processed_binaries.add(src_path)
-
- logger.debug("Analyzing binary %r", src_name)
-
- # Analyze imports (linked dependencies)
- for dep_name, dep_src_path in get_imports(src_name, search_paths):
- logger.debug("Processing dependency, name: %r, resolved path: %r", dep_name, dep_src_path)
-
- # Skip unresolved dependencies. Defer the missing-library warnings until after binary dependency analysis
- # is complete.
- if not dep_src_path:
- missing_dependencies.append((dep_name, src_name))
- continue
-
- # Compare resolved dependency against global inclusion/exclusion rules.
- if not dylib.include_library(dep_src_path):
- logger.debug("Skipping dependency %r due to global exclusion rules.", dep_src_path)
- continue
-
- dep_src_path = pathlib.Path(dep_src_path) # Turn into pathlib.Path for subsequent processing
-
- # Avoid processing this dependency if we have already processed it.
- if dep_src_path in processed_dependencies:
- logger.debug("Skipping dependency %r due to prior processing.", str(dep_src_path))
- continue
- processed_dependencies.add(dep_src_path)
-
- # Try to preserve parent directory structure, if applicable.
- # NOTE: do not resolve the source path, because on macOS and linux, it may be a versioned .so (e.g.,
- # libsomething.so.1, pointing at libsomething.so.1.2.3), and we need to collect it under original name!
- dep_dest_path = _select_destination_directory(dep_src_path, parent_dir_preservation_paths)
- dep_dest_path = pathlib.PurePath(dep_dest_path) # Might be a str() if it is just a basename...
-
- # If we are collecting library into top-level directory on macOS, check whether it comes from a
- # .framework bundle. If it does, re-create the .framework bundle in the top-level directory
- # instead.
- if compat.is_darwin and dep_dest_path.parent == pathlib.PurePath('.'):
- if osxutils.is_framework_bundle_lib(dep_src_path):
- # dst_src_path is parent_path/Name.framework/Versions/Current/Name
- framework_parent_path = dep_src_path.parent.parent.parent.parent
- dep_dest_path = pathlib.PurePath(dep_src_path.relative_to(framework_parent_path))
-
- logger.debug("Collecting dependency %r as %r.", str(dep_src_path), str(dep_dest_path))
- output_toc.append((str(dep_dest_path), str(dep_src_path), 'BINARY'))
-
- # On non-Windows, if we are not collecting the binary into application's top-level directory ('.'),
- # add a symbolic link from top-level directory to the actual location. This is to accommodate
- # LD_LIBRARY_PATH being set to the top-level application directory on linux (although library search
- # should be mostly done via rpaths, so this might be redundant) and to accommodate library path
- # rewriting on macOS, which assumes that the library was collected into top-level directory.
- if compat.is_win:
- # We do not use symlinks on Windows.
- pass
- elif dep_dest_path.parent == pathlib.PurePath('.'):
- # The shared library itself is being collected into top-level application directory.
- pass
- elif any(dep_src_path.match(pattern) for pattern in symlink_suppression_patterns):
- # Honor symlink suppression patterns specified by hooks.
- logger.debug(
- "Skipping symbolic link from %r to top-level application directory due to source path matching one "
- "of symlink suppression path patterns.", str(dep_dest_path)
- )
- else:
- logger.debug("Adding symbolic link from %r to top-level application directory.", str(dep_dest_path))
- output_toc.append((str(dep_dest_path.name), str(dep_dest_path), 'SYMLINK'))
-
- # Handle missing dependencies: display warnings, add missing symbolic links to top-level application directory, etc.
- seen_binaries = {
- os.path.normcase(os.path.basename(src_name)): (dest_name, src_name, typecode)
- for dest_name, src_name, typecode in output_toc if typecode != 'SYMLINK'
- }
- existing_symlinks = set([dest_name for dest_name, src_name, typecode in output_toc if typecode == 'SYMLINK'])
-
- for dependency_name, referring_binary in missing_dependencies:
- # Ignore libraries that we would not collect in the first place.
- if not dylib.include_library(dependency_name):
- continue
-
- # If the binary with a matching basename happens to be among the discovered binaries, suppress the message as
- # well. This might happen either because the library was collected by some other mechanism (for example, via
- # hook, or supplied by the user), or because it was discovered during the analysis of another binary (which,
- # for example, had properly set run-paths on Linux/macOS or was located next to that other analyzed binary on
- # Windows).
- #
- # On non-Windows, also check if symbolic link to the discovered binary already exists in the top-level
- # application directory, and if not, create it. This is important especially on macOS, where our library path
- # rewriting assumes that all dependent libraries are available in the top-level application directory, or
- # linked into it.
- dependency_basename = os.path.normcase(os.path.basename(dependency_name))
- dependency_toc_entry = seen_binaries.get(dependency_basename, None)
- if dependency_toc_entry is None:
- # Not found, emit a warning (subject to global warning suppression rules).
- if not dylib.warn_missing_lib(dependency_name):
- continue
- logger.warning(
- "Library not found: could not resolve %r, dependency of %r.", dependency_name, referring_binary
- )
- elif not compat.is_win:
- # Found; generate symbolic link if necessary.
- dependency_dest_path = pathlib.PurePath(dependency_toc_entry[0])
- dependency_src_path = pathlib.Path(dependency_toc_entry[1])
-
- if dependency_dest_path.parent == pathlib.PurePath('.'):
- # The binary is collected into top-level application directory.
- continue
- elif dependency_basename in existing_symlinks:
- # The symbolic link already exists.
- continue
-
- # Keep honoring symlink suppression patterns specified by hooks (same as in main binary dependency analysis
- # loop).
- if any(dependency_src_path.match(pattern) for pattern in symlink_suppression_patterns):
- logger.info(
- "Missing dependency handling: skipping symbolic link from %r to top-level application directory "
- "due to source path matching one of symlink suppression path patterns.", str(dependency_dest_path)
- )
- continue
-
- # Create the symbolic link
- logger.info(
- "Missing dependency handling: adding symbolic link from %r to top-level application directory.",
- str(dependency_dest_path)
- )
- output_toc.append((dependency_basename, str(dependency_dest_path), 'SYMLINK'))
- existing_symlinks.add(dependency_basename)
-
- return output_toc
-
-
-#- Low-level import analysis
-
-
-def get_imports(filename, search_paths=None):
- """
- Analyze the given binary file (shared library or executable), and obtain the list of shared libraries it imports
- (i.e., link-time dependencies).
-
- Returns set of tuples (name, fullpath). The name component is the referenced name, and on macOS, may not be just
- a base name. If the library's full path cannot be resolved, fullpath element is None.
-
- Additional list of search paths may be specified via `search_paths`, to be used as a fall-back when the
- platform-specific resolution mechanism fails to resolve a library fullpath.
- """
- if compat.is_win:
- if str(filename).lower().endswith(".manifest"):
- return []
- return _get_imports_pefile(filename, search_paths)
- elif compat.is_darwin:
- return _get_imports_macholib(filename, search_paths)
- else:
- return _get_imports_ldd(filename, search_paths)
-
-
-def _get_imports_pefile(filename, search_paths):
- """
- Windows-specific helper for `get_imports`, which uses the `pefile` library to walk through PE header.
- """
- import pefile
-
- output = set()
-
- # By default, pefile library parses all PE information. We are only interested in the list of dependent dlls.
- # Performance is improved by reading only needed information. https://code.google.com/p/pefile/wiki/UsageExamples
- pe = pefile.PE(filename, fast_load=True)
- pe.parse_data_directories(
- directories=[
- pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT'],
- pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_EXPORT'],
- ],
- forwarded_exports_only=True,
- import_dllnames_only=True,
- )
-
- # If a library has no binary dependencies, pe.DIRECTORY_ENTRY_IMPORT does not exist.
- for entry in getattr(pe, 'DIRECTORY_ENTRY_IMPORT', []):
- dll_str = entry.dll.decode('utf-8')
- output.add(dll_str)
-
- # We must also read the exports table to find forwarded symbols:
- # http://blogs.msdn.com/b/oldnewthing/archive/2006/07/19/671238.aspx
- exported_symbols = getattr(pe, 'DIRECTORY_ENTRY_EXPORT', None)
- if exported_symbols:
- for symbol in exported_symbols.symbols:
- if symbol.forwarder is not None:
- # symbol.forwarder is a bytes object. Convert it to a string.
- forwarder = symbol.forwarder.decode('utf-8')
- # symbol.forwarder is for example 'KERNEL32.EnterCriticalSection'
- dll = forwarder.split('.')[0]
- output.add(dll + ".dll")
-
- pe.close()
-
- # Attempt to resolve full paths to referenced DLLs. Always add the input binary's parent directory to the search
- # paths.
- search_paths = [os.path.dirname(filename)] + (search_paths or [])
- output = {(lib, resolve_library_path(lib, search_paths)) for lib in output}
-
- return output
-
-
-def _get_imports_ldd(filename, search_paths):
- """
- Helper for `get_imports`, which uses `ldd` to analyze shared libraries. Used on Linux and other POSIX-like platforms
- (with exception of macOS).
- """
-
- output = set()
-
- # Output of ldd varies between platforms...
- if compat.is_aix:
- # Match libs of the form
- # 'archivelib.a(objectmember.so/.o)'
- # or
- # 'sharedlib.so'
- # Will not match the fake lib '/unix'
- LDD_PATTERN = re.compile(r"^\s*(((?P(.*\.a))(?P\(.*\)))|((?P(.*\.so))))$")
- elif compat.is_hpux:
- # Match libs of the form
- # 'sharedlib.so => full-path-to-lib
- # e.g.
- # 'libpython2.7.so => /usr/local/lib/hpux32/libpython2.7.so'
- LDD_PATTERN = re.compile(r"^\s+(.*)\s+=>\s+(.*)$")
- elif compat.is_solar:
- # Match libs of the form
- # 'sharedlib.so => full-path-to-lib
- # e.g.
- # 'libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0'
- # Will not match the platform specific libs starting with '/platform'
- LDD_PATTERN = re.compile(r"^\s+(.*)\s+=>\s+(.*)$")
- elif compat.is_linux:
- # Match libs of the form
- # libpython3.13.so.1.0 => /home/brenainn/.pyenv/versions/3.13.0/lib/libpython3.13.so.1.0 (0x00007a9e15800000)
- # or
- # /tmp/python/install/bin/../lib/libpython3.13.so.1.0 (0x00007b9489c82000)
- LDD_PATTERN = re.compile(r"^\s*(?:(.*?)\s+=>\s+)?(.*?)\s+\(.*\)")
- else:
- LDD_PATTERN = re.compile(r"\s*(.*?)\s+=>\s+(.*?)\s+\(.*\)")
-
- # Resolve symlinks since GNU ldd contains a bug in processing a symlink to a binary
- # using $ORIGIN: https://sourceware.org/bugzilla/show_bug.cgi?id=25263
- p = subprocess.run(
- ['ldd', os.path.realpath(filename)],
- stdin=subprocess.DEVNULL,
- stderr=subprocess.PIPE,
- stdout=subprocess.PIPE,
- encoding='utf-8',
- )
-
- ldd_warnings = []
- for line in p.stderr.splitlines():
- if not line:
- continue
- # Python extensions (including stdlib ones) are not linked against python.so but rely on Python's symbols having
- # already been loaded into symbol space at runtime. musl's ldd issues a series of harmless warnings to stderr
- # telling us that those symbols are unfindable. These should be suppressed.
- elif line.startswith("Error relocating ") and line.endswith(" symbol not found"):
- continue
- # Shared libraries should have the executable bits set; however, this is not the case for shared libraries
- # shipped in PyPI wheels, which cause ldd to emit `ldd: warning: you do not have execution permission for ...`
- # warnings. Suppress these.
- elif line.startswith("ldd: warning: you do not have execution permission for "):
- continue
- # When `ldd` is ran against a file that is not a dynamic binary (i.e., is not a binary at all, or is a static
- # binary), it emits a "not a dynamic executable" warning. Suppress it.
- elif "not a dynamic executable" in line:
- continue
- # Propagate any other warnings it might have.
- ldd_warnings.append(line)
- if ldd_warnings:
- logger.warning("ldd warnings for %r:\n%s", filename, "\n".join(ldd_warnings))
-
- for line in p.stdout.splitlines():
- name = None # Referenced name
- lib = None # Resolved library path
-
- m = LDD_PATTERN.search(line)
- if m:
- if compat.is_aix:
- libarchive = m.group('libarchive')
- if libarchive:
- # We matched an archive lib with a request for a particular embedded shared object.
- # 'archivelib.a(objectmember.so/.o)'
- lib = libarchive
- name = os.path.basename(lib) + m.group('objectmember')
- else:
- # We matched a stand-alone shared library.
- # 'sharedlib.so'
- lib = m.group('libshared')
- name = os.path.basename(lib)
- elif compat.is_hpux:
- name, lib = m.group(1), m.group(2)
- else:
- name, lib = m.group(1), m.group(2)
- name = name or os.path.basename(lib)
- if compat.is_linux:
- # Skip all ld variants listed https://sourceware.org/glibc/wiki/ABIList
- # plus musl's ld-musl-*.so.*.
- if re.fullmatch(r"ld(64)?(-linux|-musl)?(-.+)?\.so(\..+)?", os.path.basename(lib)):
- continue
- if name[:10] in ('linux-gate', 'linux-vdso'):
- # linux-gate is a fake library which does not exist and should be ignored. See also:
- # http://www.trilithium.com/johan/2005/08/linux-gate/
- continue
-
- if compat.is_cygwin:
- # exclude Windows system library
- if lib.lower().startswith('/cygdrive/c/windows/system'):
- continue
-
- # Reset library path if it does not exist
- if not os.path.exists(lib):
- lib = None
- elif line.endswith("not found"):
- # On glibc-based linux distributions, missing libraries are marked with name.so => not found
- tokens = line.split('=>')
- if len(tokens) != 2:
- continue
- name = tokens[0].strip()
- lib = None
- else:
- # TODO: should we warn about unprocessed lines?
- continue
-
- # Fall back to searching the supplied search paths, if any.
- if not lib:
- lib = _resolve_library_path_in_search_paths(
- os.path.basename(name), # Search for basename of the referenced name.
- search_paths,
- )
-
- # Normalize the resolved path, to remove any extraneous "../" elements.
- if lib:
- lib = os.path.normpath(lib)
-
- # Return referenced name as-is instead of computing a basename, to provide additional context when library
- # cannot be resolved.
- output.add((name, lib))
-
- return output
-
-
-def _get_imports_macholib(filename, search_paths):
- """
- macOS-specific helper for `get_imports`, which uses `macholib` to analyze library load commands in Mach-O headers.
- """
- from macholib.dyld import dyld_find
- from macholib.mach_o import LC_RPATH
- from macholib.MachO import MachO
-
- try:
- from macholib.dyld import _dyld_shared_cache_contains_path
- except ImportError:
- _dyld_shared_cache_contains_path = None
-
- output = set()
-
- # Parent directory of the input binary and parent directory of python executable, used to substitute @loader_path
- # and @executable_path. The macOS dylib loader (dyld) fully resolves the symbolic links when using @loader_path
- # and @executable_path references, so we need to do the same using `os.path.realpath`.
- bin_path = os.path.dirname(os.path.realpath(filename))
- python_bin = os.path.realpath(sys.executable)
- python_bin_path = os.path.dirname(python_bin)
-
- def _get_referenced_libs(m):
- # Collect referenced libraries from MachO object.
- referenced_libs = set()
- for header in m.headers:
- for idx, name, lib in header.walkRelocatables():
- referenced_libs.add(lib)
- return referenced_libs
-
- def _get_run_paths(m):
- # Find LC_RPATH commands to collect rpaths from MachO object.
- # macholib does not handle @rpath, so we need to handle run paths ourselves.
- run_paths = []
- for header in m.headers:
- for command in header.commands:
- # A command is a tuple like:
- # (,
- # ,
- # '../lib\x00\x00')
- cmd_type = command[0].cmd
- if cmd_type == LC_RPATH:
- rpath = command[2].decode('utf-8')
- # Remove trailing '\x00' characters. E.g., '../lib\x00\x00'
- rpath = rpath.rstrip('\x00')
- # If run path starts with @, ensure it starts with either @loader_path or @executable_path.
- # We cannot process anything else.
- if rpath.startswith("@") and not rpath.startswith(("@executable_path", "@loader_path")):
- logger.warning("Unsupported rpath format %r found in binary %r - ignoring...", rpath, filename)
- continue
- run_paths.append(rpath)
- return run_paths
-
- @functools.lru_cache
- def get_run_paths_and_referenced_libs(filename):
- # Walk through Mach-O headers, and collect all referenced libraries and run paths.
- m = MachO(filename)
- return _get_referenced_libs(m), _get_run_paths(m)
-
- @functools.lru_cache
- def get_run_paths(filename):
- # Walk through Mach-O headers, and collect only run paths.
- return _get_run_paths(MachO(filename))
-
- # Collect referenced libraries and run paths from the input binary.
- referenced_libs, run_paths = get_run_paths_and_referenced_libs(filename)
-
- # On macOS, run paths (rpaths) are inherited from the executable that loads the given shared library (or from the
- # shared library that loads the given shared library). This means that shared libraries and python binary extensions
- # can reference other shared libraries using @rpath without having set any run paths themselves.
- #
- # In order to simulate the run path inheritance that happens in unfrozen python programs, we need to augment the
- # run paths from the given binary with those set by the python interpreter executable (`sys.executable`). Anaconda
- # python, for example, sets the run path on the python executable to `@loader_path/../lib`, which allows python
- # extensions to reference shared libraries in the Anaconda environment's `lib` directory via only `@rpath`
- # (for example, the `_ssl` extension can reference the OpenSSL library as `@rpath/libssl.3.dylib`). In another
- # example, python executable has its run path set to the top-level directory of its .framework bundle; in this
- # case the `ssl` extension references the OpenSSL library as `@rpath/Versions/3.10/lib/libssl.1.1.dylib`.
- run_paths += get_run_paths(python_bin)
-
- # This fallback should be fully superseded by the above recovery of run paths from python executable; but for now,
- # keep it around in case of unforeseen corner cases.
- run_paths.append(os.path.join(compat.base_prefix, 'lib'))
-
- # De-duplicate run_paths while preserving their order.
- run_paths = list(dict.fromkeys(run_paths))
-
- def _resolve_using_path(lib):
- # Absolute paths should not be resolved; we should just check whether the library exists or not. This used to
- # be done using macholib's dyld_find() as well (as it properly handles system libraries that are hidden on
- # Big Sur and later), but it turns out that even if given an absolute path, it gives precedence to search paths
- # from DYLD_LIBRARY_PATH. This leads to confusing errors when directory in DYLD_LIBRARY_PATH contains a file
- # (shared library or data file) that happens to have the same name as a library from a system framework.
- if os.path.isabs(lib):
- if _dyld_shared_cache_contains_path is not None and _dyld_shared_cache_contains_path(lib):
- return lib
- if os.path.isfile(lib):
- return lib
- return None
-
- try:
- return dyld_find(lib)
- except ValueError:
- return None
-
- def _resolve_using_loader_path(lib, bin_path, python_bin_path):
- # Strictly speaking, @loader_path should be anchored to parent directory of analyzed binary (`bin_path`), while
- # @executable_path should be anchored to the parent directory of the process' executable. Typically, this would
- # be python executable (`python_bin_path`). Unless we are analyzing a collected 3rd party executable; in that
- # case, `bin_path` is correct option. So we first try resolving using `bin_path`, and then fall back to
- # `python_bin_path`. This does not account for transitive run paths of higher-order dependencies, but there is
- # only so much we can do here...
- #
- # NOTE: do not use macholib's `dyld_find`, because its fallback search locations might end up resolving wrong
- # instance of the library! For example, if our `bin_path` and `python_bin_path` are anchored in an Anaconda
- # python environment and the candidate library path does not exit (because we are calling this function when
- # trying to resolve @rpath with multiple candidate run paths), we do not want to fall back to eponymous library
- # that happens to be present in the Homebrew python environment...
- if lib.startswith('@loader_path/'):
- lib = lib[len('@loader_path/'):]
- elif lib.startswith('@executable_path/'):
- lib = lib[len('@executable_path/'):]
-
- # Try resolving with binary's path first...
- resolved_lib = _resolve_using_path(os.path.join(bin_path, lib))
- if resolved_lib is not None:
- return resolved_lib
-
- # ... and fall-back to resolving with python executable's path
- return _resolve_using_path(os.path.join(python_bin_path, lib))
-
- # Try to resolve full path of the referenced libraries.
- for referenced_lib in referenced_libs:
- resolved_lib = None
-
- # If path starts with @rpath, we have to handle it ourselves.
- if referenced_lib.startswith('@rpath'):
- lib = os.path.join(*referenced_lib.split(os.sep)[1:]) # Remove the @rpath/ prefix
-
- # Try all run paths.
- for run_path in run_paths:
- # Join the path.
- lib_path = os.path.join(run_path, lib)
-
- if lib_path.startswith(("@executable_path", "@loader_path")):
- # Run path starts with @executable_path or @loader_path.
- lib_path = _resolve_using_loader_path(lib_path, bin_path, python_bin_path)
- else:
- # If run path was relative, anchor it to binary's location.
- if not os.path.isabs(lib_path):
- os.path.join(bin_path, lib_path)
- lib_path = _resolve_using_path(lib_path)
-
- if lib_path and os.path.exists(lib_path):
- resolved_lib = lib_path
- break
- else:
- if referenced_lib.startswith(("@executable_path", "@loader_path")):
- resolved_lib = _resolve_using_loader_path(referenced_lib, bin_path, python_bin_path)
- else:
- resolved_lib = _resolve_using_path(referenced_lib)
-
- # Fall back to searching the supplied search paths, if any.
- if not resolved_lib:
- resolved_lib = _resolve_library_path_in_search_paths(
- os.path.basename(referenced_lib), # Search for basename of the referenced name.
- search_paths,
- )
-
- # Normalize the resolved path, to remove any extraneous "../" elements.
- if resolved_lib:
- resolved_lib = os.path.normpath(resolved_lib)
-
- # Return referenced library name as-is instead of computing a basename. Full referenced name carries additional
- # information that might be useful for the caller to determine how to deal with unresolved library (e.g., ignore
- # unresolved libraries that are supposed to be located in system-wide directories).
- output.add((referenced_lib, resolved_lib))
-
- return output
-
-
-#- Library full path resolution
-
-
-def resolve_library_path(name, search_paths=None):
- """
- Given a library name, attempt to resolve full path to that library. The search for library is done via
- platform-specific mechanism and fall back to optionally-provided list of search paths. Returns None if library
- cannot be resolved. If give library name is already an absolute path, the given path is returned without any
- processing.
- """
- # No-op if path is already absolute.
- if os.path.isabs(name):
- return name
-
- if compat.is_unix:
- # Use platform-specific helper.
- fullpath = _resolve_library_path_unix(name)
- if fullpath:
- return fullpath
- # Fall back to searching the supplied search paths, if any
- return _resolve_library_path_in_search_paths(name, search_paths)
- elif compat.is_win:
- # Try the caller-supplied search paths, if any.
- fullpath = _resolve_library_path_in_search_paths(name, search_paths)
- if fullpath:
- return fullpath
-
- # Fall back to default Windows search paths, using the PATH environment variable (which should also include
- # the system paths, such as c:\windows and c:\windows\system32)
- win_search_paths = [path for path in compat.getenv('PATH', '').split(os.pathsep) if path]
- return _resolve_library_path_in_search_paths(name, win_search_paths)
- else:
- return ctypes.util.find_library(name)
-
- return None
-
-
-# Compatibility aliases for hooks from contributed hooks repository. All of these now point to the high-level
-# `resolve_library_path`.
-findLibrary = resolve_library_path
-findSystemLibrary = resolve_library_path
-
-
-def _resolve_library_path_in_search_paths(name, search_paths=None):
- """
- Low-level helper for resolving given library name to full path in given list of search paths.
- """
- for search_path in search_paths or []:
- fullpath = os.path.join(search_path, name)
- if not os.path.isfile(fullpath):
- continue
-
- # On Windows, ensure that architecture matches that of running python interpreter.
- if compat.is_win:
- try:
- dll_machine_type = winutils.get_pe_file_machine_type(fullpath)
- except Exception:
- # A search path might contain a DLL that we cannot analyze; for example, a stub file. Skip over.
- continue
- if dll_machine_type != _exe_machine_type:
- continue
-
- return os.path.normpath(fullpath)
-
- return None
-
-
-def _resolve_library_path_unix(name):
- """
- UNIX-specific helper for resolving library path.
-
- Emulates the algorithm used by dlopen. `name` must include the prefix, e.g., ``libpython2.4.so``.
- """
- assert compat.is_unix, "Current implementation for Unix only (Linux, Solaris, AIX, FreeBSD)"
-
- if name.endswith('.so') or '.so.' in name:
- # We have been given full library name that includes suffix. Use `_resolve_library_path_in_search_paths` to find
- # the exact match.
- lib_search_func = _resolve_library_path_in_search_paths
- else:
- # We have been given a library name without suffix. Use `_which_library` as search function, which will try to
- # find library with matching basename.
- lib_search_func = _which_library
-
- # Look in the LD_LIBRARY_PATH according to platform.
- if compat.is_aix:
- lp = compat.getenv('LIBPATH', '')
- elif compat.is_darwin:
- lp = compat.getenv('DYLD_LIBRARY_PATH', '')
- else:
- lp = compat.getenv('LD_LIBRARY_PATH', '')
- lib = lib_search_func(name, filter(None, lp.split(os.pathsep)))
-
- # Look in /etc/ld.so.cache
- # Solaris does not have /sbin/ldconfig. Just check if this file exists.
- if lib is None:
- utils.load_ldconfig_cache()
- lib = utils.LDCONFIG_CACHE.get(name)
- if lib:
- assert os.path.isfile(lib)
-
- # Look in the known safe paths.
- if lib is None:
- # Architecture independent locations.
- paths = ['/lib', '/usr/lib']
- # Architecture dependent locations.
- if compat.architecture == '32bit':
- paths.extend(['/lib32', '/usr/lib32'])
- else:
- paths.extend(['/lib64', '/usr/lib64'])
- # Machine dependent locations.
- if compat.machine == 'intel':
- if compat.architecture == '32bit':
- paths.extend(['/usr/lib/i386-linux-gnu'])
- else:
- paths.extend(['/usr/lib/x86_64-linux-gnu'])
-
- # On Debian/Ubuntu /usr/bin/python is linked statically with libpython. Newer Debian/Ubuntu with multiarch
- # support puts the libpythonX.Y.so in paths like /usr/lib/i386-linux-gnu/. Try to query the arch-specific
- # sub-directory, if available.
- arch_subdir = sysconfig.get_config_var('multiarchsubdir')
- if arch_subdir:
- arch_subdir = os.path.basename(arch_subdir)
- paths.append(os.path.join('/usr/lib', arch_subdir))
- else:
- logger.debug('Multiarch directory not detected.')
-
- # Termux (a Ubuntu like subsystem for Android) has an additional libraries directory.
- if os.path.isdir('/data/data/com.termux/files/usr/lib'):
- paths.append('/data/data/com.termux/files/usr/lib')
-
- if compat.is_aix:
- paths.append('/opt/freeware/lib')
- elif compat.is_hpux:
- if compat.architecture == '32bit':
- paths.append('/usr/local/lib/hpux32')
- else:
- paths.append('/usr/local/lib/hpux64')
- elif compat.is_freebsd or compat.is_openbsd:
- paths.append('/usr/local/lib')
- lib = lib_search_func(name, paths)
-
- return lib
-
-
-def _which_library(name, dirs):
- """
- Search for a shared library in a list of directories.
-
- Args:
- name:
- The library name including the `lib` prefix but excluding any `.so` suffix.
- dirs:
- An iterable of folders to search in.
- Returns:
- The path to the library if found or None otherwise.
-
- """
- matcher = _library_matcher(name)
- for path in filter(os.path.exists, dirs):
- for _path in os.listdir(path):
- if matcher(_path):
- return os.path.join(path, _path)
-
-
-def _library_matcher(name):
- """
- Create a callable that matches libraries if **name** is a valid library prefix for input library full names.
- """
- return re.compile(name + r"[0-9]*\.").match
-
-
-#- Python shared library search
-
-
-def get_python_library_path():
- """
- Find Python shared library that belongs to the current interpreter.
-
- Return full path to Python dynamic library or None when not found.
-
- PyInstaller needs to collect the Python shared library, so that bootloader can load it, import Python C API
- symbols, and use them to set up the embedded Python interpreter.
-
- The name of the shared library is typically fixed (`python3.X.dll` on Windows, libpython3.X.so on Unix systems,
- and `libpython3.X.dylib` on macOS for shared library builds and `Python.framework/Python` for framework build).
- Its location can usually be inferred from the Python interpreter executable, when the latter is dynamically
- linked against the shared library.
-
- However, some situations require extra handling due to various quirks; for example, Debian-based linux
- distributions statically link the Python interpreter executable against the Python library, while also providing
- a shared library variant for external users.
- """
-
- # With Windows Python builds, this is pretty straight-forward: `sys.dllhandle` provides a handle to the loaded
- # Python DLL, and we can resolve its path using `GetModuleFileName()` from win32 API.
- # This is applicable to python.org Windows builds, Anaconda on Windows, and MSYS2 Python.
- if compat.is_win:
- if hasattr(sys, 'dllhandle'):
- import _winapi
- return _winapi.GetModuleFileName(sys.dllhandle)
- else:
- raise PythonLibraryNotFoundError(
- "Python was built without a shared library, which is required by PyInstaller."
- )
-
- # On other (POSIX) platforms, the name of the Python shared library is available in the `INSTSONAME` variable
- # exposed by the `sysconfig` module. There is also the `LDLIBRARY` variable, which points to the unversioned .so
- # symbolic link for linking purposes; however, we are interested in the actual, fully-versioned soname.
- # This should cover all variations in the naming schemes across different platforms as well as different build
- # options (debug build, free-threaded build, etc.).
- #
- # However, `INSTSONAME` points to the shared library only if shared library is enabled; in static-library builds,
- # it points to the static library, which is of no use to us. We can check if Python was built with shared library
- # (i.e., the `--enable-shared` option) by checking `Py_ENABLE_SHARED` variable, which should be set to 1 in this
- # case (and 0 in the case of a static-library build). On macOS, builds made with `--enable-framework` have
- # `Py_ENABLE_SHARED` set to 0, but have `PYTHONFRAMEWORK`set to a non-empty string.
- #
- # The above description is further complicated by the fact that in some Python builds, the `python` executable is
- # built against static Python library, and the shared library is built separately and provided for development and
- # for embedders (such as PyInstaller). Presumably, this is done for performance reasons. Also, it is enabled by the
- # fact that on POSIX, Python extensions do not need to have the referenced Python symbols resolved at link-time;
- # rather, these symbols can be resolved at run-time from the running Python process (and are effectively provided
- # by the `python` executable). Such builds come in two variants. In the first variant, `Py_ENABLE_SHARED` is 0 and
- # `INSTSONAME` points to the static library; an example of such build is Anaconda Python. In the second variant,
- # `Py_ENABLE_SHARED` is 1 and `INSTSONAME` points to the shared library, but `python` executable is not linked
- # against it; examples of such build are Debian-packaged Python and `astral-sh/python-build-standalone` Python.
- #
- # Therefore, our strategy is as follows: if we determine that shared library was enabled (via `Py_ENABLE_SHARED`
- # on all platforms and/or via `PYTHONFRAMEWORK` on macOS), we use the name given by `INSTSONAME`. First, we try
- # to locate it by analyzing binary dependencies of `python` executable (regular shared-library-enabled build),
- # then fall back to standard search locations (second variant of static-executable-with-separate-shared-library).
- # If `Py_ENABLE_SHARED` is set to 0, we try to guess the library name based on version and feature flags, but we
- # search only `sys.base_prefix` and `lib` directory under `sys.base_prefix`; if the shared library is not found
- # there, we assume it is unavailable and raise an error. This attempts to accommodate Anaconda python (and corner
- # cases when we cannot reliably identify Anaconda python - see #9273) and prevent accidental bundling of
- # system-wide Python shared library in cases when user tries to use custom Python build without shared library.
-
- def _find_lib_in_libdirs(name, *libdirs):
- for libdir in libdirs:
- full_path = os.path.join(libdir, name)
- if not os.path.exists(full_path):
- continue
- # Resolve potential symbolic links to achieve consistent results with linker-based search; e.g., on
- # POSIX systems, linker resolves unversioned library names (python3.X.so) to versioned ones
- # (libpython3.X.so.1.0) due to former being symbolic links to the latter. See #6831.
- full_path = os.path.realpath(full_path)
- if not os.path.exists(full_path):
- continue
- return full_path
- return None
-
- is_shared = (
- # Builds made with `--enable-shared` have `Py_ENABLE_SHARED` set to 1. This is true even for Debian-packaged
- # Python, which has the `python` executable statically linked against the Python library.
- sysconfig.get_config_var("Py_ENABLE_SHARED") or
- # On macOS, builds made with `--enable-framework` have `Py_ENABLE_SHARED` set to 0, but have `PYTHONFRAMEWORK`
- # set to a non-empty string.
- (compat.is_darwin and sysconfig.get_config_var("PYTHONFRAMEWORK"))
- )
-
- if not is_shared:
- # Anaconda Python; this codepath used to be under `compat.is_conda` switch, but we may also be dealing with
- # Anaconda Python without `conda-meta` directory (see #9273). Or some other Python build where shared library
- # is provided but `Py_ENABLE_SHARED` is set to 0.
- py_major, py_minor = sys.version_info[:2]
- py_suffix = "t" if compat.is_nogil else "" # TODO: does Anaconda provide debug builds with "d" suffix?
- if compat.is_darwin:
- # macOS
- expected_name = f"libpython{py_major}.{py_minor}{py_suffix}.dylib"
- else:
- # Linux; assume any other potential POSIX builds use the same naming scheme.
- expected_name = f"libpython{py_major}.{py_minor}{py_suffix}.so.1.0"
-
- # Allow the library to be only in `sys.base_prefix` or the `lib` directory under it. This should prevent us from
- # picking up an unrelated copy of shared library that might happen to be available in standard search path, when
- # we should instead be raising an error due to Python having been built without a shared library. (In true
- # static-library builds, Python's own extension modules are usually turned into built-ins. So picking up an
- # unrelated Python shared library that happens to be of the same version results in run-time errors due to
- # missing extensions - because in the build that produced the shared library, those extensions are expected to
- # be external extension modules!)
- python_libname = _find_lib_in_libdirs(
- expected_name, # Full name
- compat.base_prefix,
- os.path.join(compat.base_prefix, 'lib'),
- )
- if python_libname:
- return python_libname
-
- # Raise PythonLibraryNotFoundError
- option_str = (
- "either the `--enable-shared` or the `--enable-framework` option"
- if compat.is_darwin else "the `--enable-shared` option"
- )
- raise PythonLibraryNotFoundError(
- "Python was built without a shared library, which is required by PyInstaller. "
- f"If you built Python from source, rebuild it with {option_str}."
- )
-
- # Use the library name from `INSTSONAME`.
- expected_name = sysconfig.get_config_var('INSTSONAME')
-
- # In Cygwin builds (and also MSYS2 python, although that should be handled by Windows-specific codepath...),
- # INSTSONAME is available, but the name has a ".dll.a" suffix; remove that trailing ".a".
- if (compat.is_win or compat.is_cygwin) and os.path.normcase(expected_name).endswith('.dll.a'):
- expected_name = expected_name[:-2]
-
- # NOTE: on macOS with .framework bundle build, INSTSONAME contains full name of the .framework library, for example
- # `Python.framework/Versions/3.13/Python`. Pre-compute a basename for comparisons that are using only basename.
- expected_basename = os.path.normcase(os.path.basename(expected_name))
-
- # First, try to find the expected name among the libraries against which the Python executable is linked. This
- # assumes that the Python executable was not statically linked against the library (as is the case with
- # Debian-packaged Python or `astral-sh/python-build-standalone` Python).
- imported_libraries = get_imports(compat.python_executable) # (name, fullpath) tuples
- for _, lib_path in imported_libraries:
- if lib_path is None:
- continue # Skip unresolved imports
- if os.path.normcase(os.path.basename(lib_path)) == expected_basename: # Basename comparison
- # Python library found. Return absolute path to it.
- return lib_path
-
- # As a fallback, try to find the library in several "standard" search locations...
-
- # First, search the `sys.base_prefix` and `lib` directory in `sys.base_prefix`, as these locations have the closest
- # ties to our current Python process. This caters to builds such as `astral-sh/python-build-standalone` Python.
- python_libname = _find_lib_in_libdirs(
- expected_name, # Full name
- compat.base_prefix,
- os.path.join(compat.base_prefix, 'lib'),
- )
- if python_libname:
- return python_libname
-
- # Perform search in the configured library search locations. This should be done after exhausting all other options;
- # it primarily caters to Debian-packaged Python, but we need to make sure that we do not collect shared library from
- # system-installed Python when the current interpreter is in fact some other Python build (such as, for example,
- # `astral-sh/python-build-standalone` Python that is handled in the preceding code block).
- python_libname = resolve_library_path(expected_basename) # Basename
- if python_libname:
- return python_libname
-
- # Not found. Raise a PythonLibraryNotFoundError with corresponding message.
- message = f"ERROR: Python shared library ({expected_name!r}) was not found!"
- if compat.is_linux and os.path.isfile('/etc/debian_version'):
- # The shared library is provided by `libpython3.x` package (i.e., no need to install full `python3-dev`).
- pkg_name = f"libpython3.{sys.version_info.minor}"
- message += (
- " If you are using system python on Debian/Ubuntu, you might need to install a separate package by running "
- f"`apt install {pkg_name}`."
- )
-
- raise PythonLibraryNotFoundError(message)
-
-
-#- Binary vs data (re)classification
-
-
-def classify_binary_vs_data(filename):
- """
- Classify the given file as either BINARY or a DATA, using appropriate platform-specific method. Returns 'BINARY'
- or 'DATA' string depending on the determined file type, or None if classification cannot be performed (non-existing
- file, missing tool, and other errors during classification).
- """
-
- # We cannot classify non-existent files.
- if not os.path.isfile(filename):
- return None
-
- # Use platform-specific implementation.
- return _classify_binary_vs_data(filename)
-
-
-if compat.is_linux:
-
- def _classify_binary_vs_data(filename):
- # First check for ELF signature, in order to avoid calling `objdump` on every data file, which can be costly.
- try:
- with open(filename, 'rb') as fp:
- sig = fp.read(4)
- except Exception:
- return None
-
- if sig != b"\x7FELF":
- return "DATA"
-
- # Verify the binary by checking if `objdump` recognizes the file. The preceding ELF signature check should
- # ensure that this is an ELF file, while this check should ensure that it is a valid ELF file. In the future,
- # we could try checking that the architecture matches the running platform.
- cmd_args = ['objdump', '-a', filename]
- try:
- p = subprocess.run(
- cmd_args,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- stdin=subprocess.DEVNULL,
- encoding='utf8',
- )
- except Exception:
- return None # Failed to run `objdump` or `objdump` unavailable.
-
- return 'BINARY' if p.returncode == 0 else 'DATA'
-
-elif compat.is_win:
-
- @functools.lru_cache()
- def _no_op_pefile_gc():
- # Disable pefile's reduntant and very slow call to gc.collect(). See #8762.
- import types
- import gc
- import pefile
-
- fake_gc = types.ModuleType("gc")
- fake_gc.__dict__.update(gc.__dict__)
- fake_gc.collect = lambda *_, **__: None
- pefile.gc = fake_gc
-
- def _classify_binary_vs_data(filename):
- import pefile
-
- _no_op_pefile_gc()
-
- # First check for MZ signature, which should allow us to quickly classify the majority of data files.
- try:
- with open(filename, 'rb') as fp:
- sig = fp.read(2)
- except Exception:
- return None
-
- if sig != b"MZ":
- return "DATA"
-
- # Check if the file can be opened using `pefile`.
- try:
- with pefile.PE(filename, fast_load=True) as pe: # noqa: F841
- pass
- return 'BINARY'
- except pefile.PEFormatError:
- return 'DATA'
- except Exception:
- pass
-
- return None
-
-elif compat.is_darwin:
-
- def _classify_binary_vs_data(filename):
- # See if the file can be opened using `macholib`.
- import macholib.MachO
-
- try:
- macho = macholib.MachO.MachO(filename) # noqa: F841
- return 'BINARY'
- except Exception:
- # TODO: catch only `ValueError`?
- pass
-
- return 'DATA'
-
-else:
-
- def _classify_binary_vs_data(filename):
- # Classification not implemented for the platform.
- return None
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/bytecode.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/bytecode.py
deleted file mode 100755
index d51ea34..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/bytecode.py
+++ /dev/null
@@ -1,366 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Tools for searching bytecode for key statements that indicate the need for additional resources, such as data files
-and package metadata.
-
-By *bytecode* I mean the ``code`` object given by ``compile()``, accessible from the ``__code__`` attribute of any
-non-builtin function or, in PyInstallerLand, the ``PyiModuleGraph.node("some.module").code`` attribute. The best
-guide for bytecode format I have found is the disassembler reference: https://docs.python.org/3/library/dis.html
-
-This parser implementation aims to combine the flexibility and speed of regex with the clarity of the output of
-``dis.dis(code)``. It has not achieved the 2nd, but C'est la vie...
-
-The biggest clarity killer here is the ``EXTENDED_ARG`` opcode which can appear almost anywhere and therefore needs
-to be tiptoed around at every step. If this code needs to expand significantly, I would recommend an upgrade to a
-regex-based grammar parsing library such as Reparse. This way, little steps like unpacking ``EXTENDED_ARGS`` can be
-defined once then simply referenced forming a nice hierarchy rather than copied everywhere its needed.
-"""
-
-import dis
-import re
-from types import CodeType
-from typing import Pattern
-
-from PyInstaller import compat
-
-# opcode name -> opcode map
-# Python 3.11 introduced specialized opcodes that are not covered by opcode.opmap (and equivalent dis.opmap), but dis
-# has a private map of all opcodes called _all_opmap. So use the latter, if available.
-opmap = getattr(dis, '_all_opmap', dis.opmap)
-
-
-def _instruction_to_regex(x: str):
- """
- Get a regex-escaped opcode byte from its human readable name.
- """
- return re.escape(bytes([opmap[x]]))
-
-
-def bytecode_regex(pattern: bytes, flags=re.VERBOSE | re.DOTALL):
- """
- A regex-powered Python bytecode matcher.
-
- ``bytecode_regex`` provides a very thin wrapper around :func:`re.compile`.
-
- * Any opcode names wrapped in backticks are substituted for their corresponding opcode bytes.
- * Patterns are compiled in VERBOSE mode by default so that whitespace and comments may be used.
-
- This aims to mirror the output of :func:`dis.dis`, which is far more readable than looking at raw byte strings.
- """
- assert isinstance(pattern, bytes)
-
- # Replace anything wrapped in backticks with regex-escaped opcodes.
- pattern = re.sub(
- rb"`(\w+)`",
- lambda m: _instruction_to_regex(m[1].decode()),
- pattern,
- )
- return re.compile(pattern, flags=flags)
-
-
-def finditer(pattern: Pattern, string: bytes):
- """
- Call ``pattern.finditer(string)``, but remove any matches beginning on an odd byte (i.e., matches where
- match.start() is not a multiple of 2).
-
- This should be used to avoid false positive matches where a bytecode pair's argument is mistaken for an opcode.
- """
- assert isinstance(string, bytes)
- string = _cleanup_bytecode_string(string)
- matches = pattern.finditer(string)
- while True:
- for match in matches:
- if match.start() % 2 == 0:
- # All is good. This match starts on an OPCODE.
- yield match
- else:
- # This match has started on an odd byte, meaning that it is a false positive and should be skipped.
- # There is a very slim chance that a genuine match overlaps this one and, because re.finditer() does not
- # allow overlapping matches, it would be lost. To avoid that, restart the regex scan, starting at the
- # next even byte.
- matches = pattern.finditer(string, match.start() + 1)
- break
- else:
- break
-
-
-# Opcodes involved in function calls with constant arguments. The differences between python versions are handled by
-# variables below, which are then used to construct the _call_function_bytecode regex.
-# NOTE1: the _OPCODES_* entries are typically used in (non-capturing) groups that match the opcode plus an arbitrary
-# argument. But because the entries themselves may contain more than on opcode (with OR operator between them), they
-# themselves need to be enclosed in another (non-capturing) group. E.g., "(?:(?:_OPCODES_FUNCTION_GLOBAL).)".
-# NOTE2: _OPCODES_EXTENDED_ARG2 is an exception, as it is used as a list of opcodes to exclude, i.e.,
-# "[^_OPCODES_EXTENDED_ARG2]". Therefore, multiple opcodes are not separated by the OR operator.
-if not compat.is_py311:
- # Python 3.7 introduced two new function-related opcodes, LOAD_METHOD and CALL_METHOD
- _OPCODES_EXTENDED_ARG = rb"`EXTENDED_ARG`"
- _OPCODES_EXTENDED_ARG2 = _OPCODES_EXTENDED_ARG
- _OPCODES_FUNCTION_GLOBAL = rb"`LOAD_NAME`|`LOAD_GLOBAL`|`LOAD_FAST`"
- _OPCODES_FUNCTION_LOAD = rb"`LOAD_ATTR`|`LOAD_METHOD`"
- _OPCODES_FUNCTION_ARGS = rb"`LOAD_CONST`"
- _OPCODES_FUNCTION_CALL = rb"`CALL_FUNCTION`|`CALL_METHOD`|`CALL_FUNCTION_EX`"
-
- def _cleanup_bytecode_string(bytecode):
- return bytecode # Nothing to do here
-elif not compat.is_py312:
- # Python 3.11 removed CALL_FUNCTION and CALL_METHOD, and replaced them with PRECALL + CALL instruction sequence.
- # As both PRECALL and CALL have the same parameter (the argument count), we need to match only up to the PRECALL.
- # The CALL_FUNCTION_EX is still present.
- # From Python 3.11b1 on, there is an EXTENDED_ARG_QUICK specialization opcode present.
- _OPCODES_EXTENDED_ARG = rb"`EXTENDED_ARG`|`EXTENDED_ARG_QUICK`"
- _OPCODES_EXTENDED_ARG2 = rb"`EXTENDED_ARG``EXTENDED_ARG_QUICK`" # Special case; see note above the if/else block!
- _OPCODES_FUNCTION_GLOBAL = rb"`LOAD_NAME`|`LOAD_GLOBAL`|`LOAD_FAST`"
- _OPCODES_FUNCTION_LOAD = rb"`LOAD_ATTR`|`LOAD_METHOD`"
- _OPCODES_FUNCTION_ARGS = rb"`LOAD_CONST`"
- _OPCODES_FUNCTION_CALL = rb"`PRECALL`|`CALL_FUNCTION_EX`"
-
- # Starting with python 3.11, the bytecode is peppered with CACHE instructions (which dis module conveniently hides
- # unless show_caches=True is used). Dealing with these CACHE instructions in regex rules is going to render them
- # unreadable, so instead we pre-process the bytecode and filter the offending opcodes out.
- _cache_instruction_filter = bytecode_regex(rb"(`CACHE`.)|(..)")
-
- def _cleanup_bytecode_string(bytecode):
- return _cache_instruction_filter.sub(rb"\2", bytecode)
-else:
- # Python 3.12 merged EXTENDED_ARG_QUICK back in to EXTENDED_ARG, and LOAD_METHOD in to LOAD_ATTR
- # PRECALL is no longer a valid key
- _OPCODES_EXTENDED_ARG = rb"`EXTENDED_ARG`"
- _OPCODES_EXTENDED_ARG2 = _OPCODES_EXTENDED_ARG
- if compat.is_py314:
- # Python 3.14.0a7 added LOAD_FAST_BORROW.
- _OPCODES_FUNCTION_GLOBAL = rb"`LOAD_NAME`|`LOAD_GLOBAL`|`LOAD_FAST`|`LOAD_FAST_BORROW`"
- else:
- _OPCODES_FUNCTION_GLOBAL = rb"`LOAD_NAME`|`LOAD_GLOBAL`|`LOAD_FAST`"
- _OPCODES_FUNCTION_LOAD = rb"`LOAD_ATTR`"
- if compat.is_py314:
- # Python 3.14.0a2 split LOAD_CONST into LOAD_CONST, LOAD_IMMORTAL_CONST, and LOAD_SMALL_INT.
- # https://github.com/python/cpython/commit/faa3272fb8d63d481a136cc0467a0cba6ed7b264
- _OPCODES_FUNCTION_ARGS = rb"`LOAD_CONST`|`LOAD_SMALL_INT`|`LOAD_CONST_IMMORTAL`"
- else:
- _OPCODES_FUNCTION_ARGS = rb"`LOAD_CONST`"
- _OPCODES_FUNCTION_CALL = rb"`CALL`|`CALL_FUNCTION_EX`"
-
- # In Python 3.13, PUSH_NULL opcode is emitted after the LOAD_NAME (and after LOAD_ATTR opcode(s), if applicable).
- # In python 3.11 and 3.12, it was emitted before the LOAD_NAME, and thus fell outside of our regex matching; now,
- # we have to deal with it. But, instead of trying to add it to matching rules and adjusting the post-processing
- # to deal with it, we opt to filter them out (at the same time as we filter out CACHE opcodes), and leave the rest
- # of processing untouched.
- if compat.is_py313:
- _cache_instruction_filter = bytecode_regex(rb"(`CACHE`.)|(`PUSH_NULL`.)|(..)")
-
- def _cleanup_bytecode_string(bytecode):
- return _cache_instruction_filter.sub(rb"\3", bytecode)
- else:
- _cache_instruction_filter = bytecode_regex(rb"(`CACHE`.)|(..)")
-
- def _cleanup_bytecode_string(bytecode):
- return _cache_instruction_filter.sub(rb"\2", bytecode)
-
-
-# language=PythonVerboseRegExp
-_call_function_bytecode = bytecode_regex(
- rb"""
- # Matches `global_function('some', 'constant', 'arguments')`.
-
- # Load the global function. In code with >256 of names, this may require extended name references.
- (
- (?:(?:""" + _OPCODES_EXTENDED_ARG + rb""").)*
- (?:(?:""" + _OPCODES_FUNCTION_GLOBAL + rb""").)
- )
-
- # For foo.bar.whizz(), the above is the 'foo', below is the 'bar.whizz' (one opcode per name component, each
- # possibly preceded by name reference extension).
- (
- (?:
- (?:(?:""" + _OPCODES_EXTENDED_ARG + rb""").)*
- (?:""" + _OPCODES_FUNCTION_LOAD + rb""").
- )*
- )
-
- # Load however many arguments it takes. These (for now) must all be constants.
- # Again, code with >256 constants may need extended enumeration.
- (
- (?:
- (?:(?:""" + _OPCODES_EXTENDED_ARG + rb""").)*
- (?:""" + _OPCODES_FUNCTION_ARGS + rb""").
- )*
- )
-
- # Call the function. If opcode is CALL_FUNCTION_EX, the parameter are flags. For other opcodes, the parameter
- # is the argument count (which may be > 256).
- (
- (?:(?:""" + _OPCODES_EXTENDED_ARG + rb""").)*
- (?:""" + _OPCODES_FUNCTION_CALL + rb""").
- )
-"""
-)
-
-# language=PythonVerboseRegExp
-_extended_arg_bytecode = bytecode_regex(
- rb"""(
- # Arbitrary number of EXTENDED_ARG pairs.
- (?:(?:""" + _OPCODES_EXTENDED_ARG + rb""").)*
-
- # Followed by some other instruction (usually a LOAD).
- [^""" + _OPCODES_EXTENDED_ARG2 + rb"""].
-)"""
-)
-
-
-def extended_arguments(extended_args: bytes):
- """
- Unpack the (extended) integer used to reference names or constants.
-
- The input should be a bytecode snippet of the following form::
-
- EXTENDED_ARG ? # Repeated 0-4 times.
- LOAD_xxx ? # Any of LOAD_NAME/LOAD_CONST/LOAD_METHOD/...
-
- Each ? byte combined together gives the number we want.
- """
- return int.from_bytes(extended_args[1::2], "big")
-
-
-def load(raw: bytes, code: CodeType) -> str:
- """
- Parse an (extended) LOAD_xxx instruction.
- """
- # Get the enumeration.
- index = extended_arguments(raw)
-
- # Work out what that enumeration was for (constant/local var/global var).
-
- # If the last instruction byte is a LOAD_FAST:
- if raw[-2] == opmap["LOAD_FAST"]:
- # Then this is a local variable.
- return code.co_varnames[index]
- # Or if it is a LOAD_CONST:
- if raw[-2] == opmap["LOAD_CONST"]:
- # Then this is a literal.
- return code.co_consts[index]
- # Otherwise, it is a global name.
- if compat.is_py311 and raw[-2] == opmap["LOAD_GLOBAL"]:
- # In python 3.11, namei>>1 is pushed on stack...
- return code.co_names[index >> 1]
- if compat.is_py312 and raw[-2] == opmap["LOAD_ATTR"]:
- # In python 3.12, namei>>1 is pushed on stack...
- return code.co_names[index >> 1]
- if compat.is_py314 and raw[-2] == opmap["LOAD_SMALL_INT"]:
- # python 3.14 introduced LOAD_SMALL_INT, which pushes its argument (int value < 256) on the stack
- return index
- if compat.is_py314 and raw[-2] == opmap["LOAD_CONST_IMMORTAL"]:
- # python 3.14 introduced LOAD_CONST_IMMORTAL, which pushes co_consts[consti] on the stack. This is intended to
- # be a variant of LOAD_CONST for constants that are known to be immortal.
- return code.co_consts[index]
- if compat.is_py314 and raw[-2] == opmap["LOAD_FAST_BORROW"]:
- # python 3.14 introduced LOAD_FAST_BORROW, which pushes a borrowed reference to the local co_varnames[var_num]
- # onto the stack.
- return code.co_varnames[index]
-
- return code.co_names[index]
-
-
-def loads(raw: bytes, code: CodeType) -> list:
- """
- Parse multiple consecutive LOAD_xxx instructions. Or load() in a for loop.
-
- May be used to unpack a function's parameters or nested attributes ``(foo.bar.pop.whack)``.
- """
- return [load(i, code) for i in _extended_arg_bytecode.findall(raw)]
-
-
-def function_calls(code: CodeType) -> list:
- """
- Scan a code object for all function calls on constant arguments.
- """
- match: re.Match
- out = []
-
- for match in finditer(_call_function_bytecode, code.co_code):
- function_root, methods, args, function_call = match.groups()
-
- # For foo():
- # `function_root` contains 'foo' and `methods` is empty.
- # For foo.bar.whizz():
- # `function_root` contains 'foo' and `methods` contains the rest.
- function_root = load(function_root, code)
- methods = loads(methods, code)
- function = ".".join([function_root] + methods)
-
- args = loads(args, code)
- if function_call[0] == opmap['CALL_FUNCTION_EX']:
- flags = extended_arguments(function_call)
- if flags != 0:
- # Keyword arguments present. Unhandled at the moment.
- continue
- # In calls with const arguments, args contains a single
- # tuple with all values.
- if len(args) != 1 or not isinstance(args[0], tuple):
- continue
- args = list(args[0])
- else:
- arg_count = extended_arguments(function_call)
-
- if arg_count != len(args):
- # This happens if there are variable or keyword arguments. Bail out in either case.
- continue
-
- out.append((function, args))
-
- return out
-
-
-def search_recursively(search: callable, code: CodeType, _memo=None) -> dict:
- """
- Apply a search function to a code object, recursing into child code objects (function definitions).
- """
- if _memo is None:
- _memo = {}
- if code not in _memo:
- _memo[code] = search(code)
- for const in code.co_consts:
- if isinstance(const, CodeType):
- search_recursively(search, const, _memo)
- return _memo
-
-
-def recursive_function_calls(code: CodeType) -> dict:
- """
- Scan a code object for function calls on constant arguments, recursing into function definitions and bodies of
- comprehension loops.
- """
- return search_recursively(function_calls, code)
-
-
-def any_alias(full_name: str):
- """List possible aliases of a fully qualified Python name.
-
- >>> list(any_alias("foo.bar.wizz"))
- ['foo.bar.wizz', 'bar.wizz', 'wizz']
-
- This crudely allows us to capture uses of wizz() under any of
- ::
- import foo
- foo.bar.wizz()
- ::
- from foo import bar
- bar.wizz()
- ::
- from foo.bar import wizz
- wizz()
-
- However, it will fail for any form of aliases and quite likely find false matches.
- """
- parts = full_name.split('.')
- while parts:
- yield ".".join(parts)
- parts = parts[1:]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/dylib.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/dylib.py
deleted file mode 100755
index b351dcd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/dylib.py
+++ /dev/null
@@ -1,379 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Manipulating with dynamic libraries.
-"""
-
-import os
-import pathlib
-import re
-import sys
-
-from PyInstaller import compat
-import PyInstaller.log as logging
-
-logger = logging.getLogger(__name__)
-
-# Ignoring some system libraries speeds up packaging process
-_excludes = {
- # Ignore annoying warnings with Windows system DLLs.
- #
- # 'W: library kernel32.dll required via ctypes not found'
- # 'W: library coredll.dll required via ctypes not found'
- #
- # These these dlls has to be ignored for all operating systems because they might be resolved when scanning code for
- # ctypes dependencies.
- r'advapi32\.dll',
- r'ws2_32\.dll',
- r'gdi32\.dll',
- r'oleaut32\.dll',
- r'shell32\.dll',
- r'ole32\.dll',
- r'coredll\.dll',
- r'crypt32\.dll',
- r'kernel32',
- r'kernel32\.dll',
- r'msvcrt\.dll',
- r'rpcrt4\.dll',
- r'user32\.dll',
- # Some modules tries to import the Python library. e.g. pyreadline.console.console
- r'python\%s\%s',
-}
-
-# Regex includes - overrides excludes. Include list is used only to override specific libraries from exclude list.
-_includes = set()
-
-_win_includes = {
- # We need to allow collection of Visual Studio C++ (VC) runtime DLLs from system directories in order to avoid
- # missing DLL errors when the frozen application is run on a system that does not have the corresponding VC
- # runtime installed. The VC runtime DLLs may be dependencies of python shared library itself or of extension
- # modules provided by 3rd party packages.
-
- # Visual Studio 2010 (VC10) runtime
- # http://msdn.microsoft.com/en-us/library/8kche8ah(v=vs.100).aspx
- r'atl100\.dll',
- r'msvcr100\.dll',
- r'msvcp100\.dll',
- r'mfc100\.dll',
- r'mfc100u\.dll',
- r'mfcmifc80\.dll',
- r'mfcm100\.dll',
- r'mfcm100u\.dll',
-
- # Visual Studio 2012 (VC11) runtime
- # https://docs.microsoft.com/en-us/visualstudio/releases/2013/2012-redistribution-vs
- #
- # VC110.ATL
- r'atl110\.dll',
- # VC110.CRT
- r'msvcp110\.dll',
- r'msvcr110\.dll',
- r'vccorlib110\.dll',
- # VC110.CXXAMP
- r'vcamp110\.dll',
- # VC110.MFC
- r'mfc110\.dll',
- r'mfc110u\.dll',
- r'mfcm110\.dll',
- r'mfcm110u\.dll',
- # VC110.MFCLOC
- r'mfc110chs\.dll',
- r'mfc110cht\.dll',
- r'mfc110enu\.dll',
- r'mfc110esn\.dll',
- r'mfc110deu\.dll',
- r'mfc110fra\.dll',
- r'mfc110ita\.dll',
- r'mfc110jpn\.dll',
- r'mfc110kor\.dll',
- r'mfc110rus\.dll',
- # VC110.OpenMP
- r'vcomp110\.dll',
- # DIA SDK
- r'msdia110\.dll',
-
- # Visual Studio 2013 (VC12) runtime
- # https://docs.microsoft.com/en-us/visualstudio/releases/2013/2013-redistribution-vs
- #
- # VC120.CRT
- r'msvcp120\.dll',
- r'msvcr120\.dll',
- r'vccorlib120\.dll',
- # VC120.CXXAMP
- r'vcamp120\.dll',
- # VC120.MFC
- r'mfc120\.dll',
- r'mfc120u\.dll',
- r'mfcm120\.dll',
- r'mfcm120u\.dll',
- # VC120.MFCLOC
- r'mfc120chs\.dll',
- r'mfc120cht\.dll',
- r'mfc120deu\.dll',
- r'mfc120enu\.dll',
- r'mfc120esn\.dll',
- r'mfc120fra\.dll',
- r'mfc120ita\.dll',
- r'mfc120jpn\.dll',
- r'mfc120kor\.dll',
- r'mfc120rus\.dll',
- # VC120.OPENMP
- r'vcomp120\.dll',
- # DIA SDK
- r'msdia120\.dll',
- # Cpp REST Windows SDK
- r'casablanca120.winrt\.dll',
- # Mobile Services Cpp Client
- r'zumosdk120.winrt\.dll',
- # Cpp REST SDK
- r'casablanca120\.dll',
-
- # Universal C Runtime Library (since Visual Studio 2015)
- #
- # NOTE: these should be put under a switch, as they need not to be bundled if deployment target is Windows 10
- # and later, as "UCRT is now a system component in Windows 10 and later, managed by Windows Update".
- # (https://docs.microsoft.com/en-us/cpp/windows/determining-which-dlls-to-redistribute?view=msvc-170)
- # And as discovered in #6326, Windows prefers system-installed version over the bundled one, anyway
- # (see https://docs.microsoft.com/en-us/cpp/windows/universal-crt-deployment?view=msvc-170#local-deployment).
- r'api-ms-win-core.*',
- r'api-ms-win-crt.*',
- r'ucrtbase\.dll',
-
- # Visual Studio 2015/2017/2019/2022 (VC14) runtime
- # https://docs.microsoft.com/en-us/visualstudio/releases/2022/redistribution
- #
- # VC141.CRT/VC142.CRT/VC143.CRT
- r'concrt140\.dll',
- r'msvcp140\.dll',
- r'msvcp140_1\.dll',
- r'msvcp140_2\.dll',
- r'msvcp140_atomic_wait\.dll',
- r'msvcp140_codecvt_ids\.dll',
- r'vccorlib140\.dll',
- r'vcruntime140\.dll',
- r'vcruntime140_1\.dll',
- # VC141.CXXAMP/VC142.CXXAMP/VC143.CXXAMP
- r'vcamp140\.dll',
- # VC141.OpenMP/VC142.OpenMP/VC143.OpenMP
- r'vcomp140\.dll',
- # DIA SDK
- r'msdia140\.dll',
-
- # Allow pythonNN.dll, pythoncomNN.dll, pywintypesNN.dll
- r'py(?:thon(?:com(?:loader)?)?|wintypes)\d+\.dll',
-}
-
-_win_excludes = {
- # On Windows, only .dll files can be loaded.
- r'.*\.so',
- r'.*\.dylib',
-
- # MS assembly excludes
- r'Microsoft\.Windows\.Common-Controls',
-}
-
-_unix_excludes = {
- r'libc\.so(\..*)?',
- r'libdl\.so(\..*)?',
- r'libm\.so(\..*)?',
- r'libpthread\.so(\..*)?',
- r'librt\.so(\..*)?',
- r'libthread_db\.so(\..*)?',
- # glibc regex excludes.
- r'ld-linux\.so(\..*)?',
- r'libBrokenLocale\.so(\..*)?',
- r'libanl\.so(\..*)?',
- r'libcidn\.so(\..*)?',
- r'libcrypt\.so(\..*)?',
- r'libnsl\.so(\..*)?',
- r'libnss_compat.*\.so(\..*)?',
- r'libnss_dns.*\.so(\..*)?',
- r'libnss_files.*\.so(\..*)?',
- r'libnss_hesiod.*\.so(\..*)?',
- r'libnss_nis.*\.so(\..*)?',
- r'libnss_nisplus.*\.so(\..*)?',
- r'libresolv\.so(\..*)?',
- r'libutil\.so(\..*)?',
- # graphical interface libraries come with graphical stack (see libglvnd)
- r'libE?(Open)?GLX?(ESv1_CM|ESv2)?(dispatch)?\.so(\..*)?',
- r'libdrm\.so(\..*)?',
- # a subset of libraries included as part of the Nvidia Linux Graphics Driver as of 520.56.06:
- # https://download.nvidia.com/XFree86/Linux-x86_64/520.56.06/README/installedcomponents.html
- r'nvidia_drv\.so',
- r'libglxserver_nvidia\.so(\..*)?',
- r'libnvidia-egl-(gbm|wayland)\.so(\..*)?',
- r'libnvidia-(cfg|compiler|e?glcore|glsi|glvkspirv|rtcore|allocator|tls|ml)\.so(\..*)?',
- r'lib(EGL|GLX)_nvidia\.so(\..*)?',
- # libcuda.so, libcuda.so.1, and libcuda.so.{version} are run-time part of NVIDIA driver, and should not be
- # collected, as they need to match the rest of driver components on the target system.
- r'libcuda\.so(\..*)?',
- r'libcudadebugger\.so(\..*)?',
- # libxcb-dri changes ABI frequently (e.g.: between Ubuntu LTS releases) and is usually installed as dependency of
- # the graphics stack anyway. No need to bundle it.
- r'libxcb\.so(\..*)?',
- r'libxcb-dri.*\.so(\..*)?',
- # system running a Wayland compositor should already have these libraries
- # in versions that should not conflict with system drivers, unlike bundled
- r'libwayland.*\.so(\..*)?',
-}
-
-_aix_excludes = {
- r'libbz2\.a',
- r'libc\.a',
- r'libC\.a',
- r'libcrypt\.a',
- r'libdl\.a',
- r'libintl\.a',
- r'libpthreads\.a',
- r'librt\\.a',
- r'librtl\.a',
- r'libz\.a',
-}
-
-_solaris_excludes = {
- r'libsocket\.so(\..*)?',
-}
-
-_cygwin_excludes = {
- r'cygwin1\.dll',
-}
-
-if compat.is_win:
- _includes |= _win_includes
- _excludes |= _win_excludes
-elif compat.is_cygwin:
- _excludes |= _cygwin_excludes
-elif compat.is_aix:
- # The exclude list for AIX differs from other *nix platforms.
- _excludes |= _aix_excludes
-elif compat.is_solar:
- # The exclude list for Solaris differs from other *nix platforms.
- _excludes |= _solaris_excludes
- _excludes |= _unix_excludes
-elif compat.is_unix:
- # Common excludes for *nix platforms -- except AIX.
- _excludes |= _unix_excludes
-
-
-class MatchList:
- def __init__(self, entries):
- self._regex = re.compile('|'.join(entries), re.I) if entries else None
-
- def check_library(self, libname):
- if self._regex:
- return self._regex.match(os.path.basename(libname))
- return False
-
-
-if compat.is_darwin:
- import macholib.util
-
- class MacExcludeList(MatchList):
- def __init__(self, entries):
- super().__init__(entries)
-
- def check_library(self, libname):
- # Try the global exclude list.
- result = super().check_library(libname)
- if result:
- return result
-
- # Exclude libraries in standard system locations.
- return macholib.util.in_system_path(libname)
-
- exclude_list = MacExcludeList(_excludes)
- include_list = MatchList(_includes)
-
-elif compat.is_win:
- from PyInstaller.utils.win32 import winutils
-
- class WinExcludeList(MatchList):
- def __init__(self, entries):
- super().__init__(entries)
-
- self._windows_dir = pathlib.Path(winutils.get_windows_dir()).resolve()
-
- # When running as SYSTEM user, the home directory is `%WINDIR%\system32\config\systemprofile`.
- self._home_dir = pathlib.Path.home().resolve()
- self._system_home = self._windows_dir in self._home_dir.parents
-
- def check_library(self, libname):
- # Try the global exclude list. The global exclude list contains lower-cased names, so lower-case the input
- # for case-normalized comparison.
- result = super().check_library(libname.lower())
- if result:
- return result
-
- # Exclude everything from the Windows directory by default; but allow contents of user's gome directory if
- # that happens to be rooted under Windows directory (e.g., when running PyInstaller as SYSTEM user).
- lib_fullpath = pathlib.Path(libname).resolve()
- exclude = self._windows_dir in lib_fullpath.parents
- if exclude and self._system_home and self._home_dir in lib_fullpath.parents:
- exclude = False
- return exclude
-
- exclude_list = WinExcludeList(_excludes)
- include_list = MatchList(_includes)
-else:
- exclude_list = MatchList(_excludes)
- include_list = MatchList(_includes)
-
-_seen_wine_dlls = set() # Used for warning tracking in include_library()
-
-
-def include_library(libname):
- """
- Check if the dynamic library should be included with application or not.
- """
- if exclude_list.check_library(libname) and not include_list.check_library(libname):
- # Library is excluded and is not overridden by include list. It should be excluded.
- return False
-
- # If we are running under Wine and the library is a Wine built-in DLL, ensure that it is always excluded. Typically,
- # excluding a DLL leads to an incomplete bundle and run-time errors when the said DLL is not installed on the target
- # system. However, having Wine built-in DLLs collected is even more detrimental, as they usually provide Wine's
- # implementation of low-level functionality, and therefore cannot be used on actual Windows (i.e., system libraries
- # from the C:\Windows\system32 directory that might end up collected due to ``_win_includes`` list; a prominent
- # example are VC runtime DLLs, for which Wine provides their own implementation, unless user explicitly installs
- # Microsoft's VC redistributable package in their Wine environment). Therefore, excluding the Wine built-in DLLs
- # actually improves the chances of the bundle running on Windows, or at least makes the issue easier to debug by
- # turning it into the "standard" missing DLL problem. Exclusion should not affect the bundle's ability to run under
- # Wine itself, as the excluded DLLs are available there.
- if compat.is_win_wine and compat.is_wine_dll(libname):
- # Display warning message only once per DLL. Note that it is also displayed only if the DLL were to be included
- # in the first place.
- if libname not in _seen_wine_dlls:
- logger.warning("Excluding Wine built-in DLL: %s", libname)
- _seen_wine_dlls.add(libname)
- return False
-
- return True
-
-
-# Patterns for suppressing warnings about missing dynamically linked libraries
-_warning_suppressions = []
-
-# On some systems (e.g., openwrt), libc.so might point to ldd. Suppress warnings about it.
-if compat.is_linux:
- _warning_suppressions.append(r'ldd')
-
-# Suppress warnings about unresolvable UCRT DLLs (see issue #1566) on Windows 10+
-if compat.is_win and sys.getwindowsversion().major >= 10:
- _warning_suppressions.append(r'api-ms-win-.*\.dll')
-
-missing_lib_warning_suppression_list = MatchList(_warning_suppressions)
-
-
-def warn_missing_lib(libname):
- """
- Check if a missing-library warning should be displayed for the given library name (or full path).
- """
- return not missing_lib_warning_suppression_list.check_library(libname)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/imphook.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/imphook.py
deleted file mode 100755
index b4f184a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/imphook.py
+++ /dev/null
@@ -1,582 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Code related to processing of import hooks.
-"""
-
-import glob
-import os.path
-import sys
-import weakref
-import re
-
-from PyInstaller import log as logging
-from PyInstaller.building.utils import format_binaries_and_datas
-from PyInstaller.compat import importlib_load_source
-from PyInstaller.depend.imphookapi import PostGraphAPI
-from PyInstaller.exceptions import ImportErrorWhenRunningHook
-
-logger = logging.getLogger(__name__)
-
-
-class ModuleHookCache(dict):
- """
- Cache of lazily loadable hook script objects.
-
- This cache is implemented as a `dict` subclass mapping from the fully-qualified names of all modules with at
- least one hook script to lists of `ModuleHook` instances encapsulating these scripts. As a `dict` subclass,
- all cached module names and hook scripts are accessible via standard dictionary operations.
-
- Attributes
- ----------
- module_graph : ModuleGraph
- Current module graph.
- _hook_module_name_prefix : str
- String prefixing the names of all in-memory modules lazily loaded from cached hook scripts. See also the
- `hook_module_name_prefix` parameter passed to the `ModuleHook.__init__()` method.
- """
-
- _cache_id_next = 0
- """
- 0-based identifier unique to the next `ModuleHookCache` to be instantiated.
-
- This identifier is incremented on each instantiation of a new `ModuleHookCache` to isolate in-memory modules of
- lazily loaded hook scripts in that cache to the same cache-specific namespace, preventing edge-case collisions
- with existing in-memory modules in other caches.
-
- """
- def __init__(self, module_graph, hook_dirs):
- """
- Cache all hook scripts in the passed directories.
-
- **Order of caching is significant** with respect to hooks for the same module, as the values of this
- dictionary are lists. Hooks for the same module will be run in the order in which they are cached. Previously
- cached hooks are always preserved rather than overridden.
-
- By default, official hooks are cached _before_ user-defined hooks. For modules with both official and
- user-defined hooks, this implies that the former take priority over and hence will be loaded _before_ the
- latter.
-
- Parameters
- ----------
- module_graph : ModuleGraph
- Current module graph.
- hook_dirs : list
- List of the absolute or relative paths of all directories containing **hook scripts** (i.e.,
- Python scripts with filenames matching `hook-{module_name}.py`, where `{module_name}` is the module
- hooked by that script) to be cached.
- """
- super().__init__()
-
- # To avoid circular references and hence increased memory consumption, a weak rather than strong reference is
- # stored to the passed graph. Since this graph is guaranteed to live longer than this cache,
- # this is guaranteed to be safe.
- self.module_graph = weakref.proxy(module_graph)
-
- # String unique to this cache prefixing the names of all in-memory modules lazily loaded from cached hook
- # scripts, privatized for safety.
- self._hook_module_name_prefix = '__PyInstaller_hooks_{}_'.format(ModuleHookCache._cache_id_next)
- ModuleHookCache._cache_id_next += 1
-
- # Cache all hook scripts in the passed directories.
- self._cache_hook_dirs(hook_dirs)
-
- def _cache_hook_dirs(self, hook_dirs):
- """
- Cache all hook scripts in the passed directories.
-
- Parameters
- ----------
- hook_dirs : list
- List of the absolute or relative paths of all directories containing hook scripts to be cached.
- """
-
- for hook_dir, default_priority in hook_dirs:
- # Canonicalize this directory's path and validate its existence.
- hook_dir = os.path.abspath(hook_dir)
- if not os.path.isdir(hook_dir):
- raise FileNotFoundError('Hook directory "{}" not found.'.format(hook_dir))
-
- # For each hook script in this directory...
- hook_filenames = glob.glob(os.path.join(hook_dir, 'hook-*.py'))
- for hook_filename in hook_filenames:
- # Fully-qualified name of this hook's corresponding module, constructed by removing the "hook-" prefix
- # and ".py" suffix.
- module_name = os.path.basename(hook_filename)[5:-3]
-
- # Lazily loadable hook object.
- module_hook = ModuleHook(
- module_graph=self.module_graph,
- module_name=module_name,
- hook_filename=hook_filename,
- hook_module_name_prefix=self._hook_module_name_prefix,
- default_priority=default_priority,
- )
-
- # Add this hook to this module's list of hooks.
- module_hooks = self.setdefault(module_name, [])
- module_hooks.append(module_hook)
-
- # Post-processing: we allow only one instance of hook per module. Currently, the priority order is defined
- # implicitly, via order of hook directories, so the first hook in the list has the highest priority.
- for module_name in self.keys():
- hooks = self[module_name]
- if len(hooks) == 1:
- self[module_name] = hooks[0]
- else:
- # Order by priority value, in descending order.
- sorted_hooks = sorted(hooks, key=lambda hook: hook.priority, reverse=True)
- self[module_name] = sorted_hooks[0]
-
- def remove_modules(self, *module_names):
- """
- Remove the passed modules and all hook scripts cached for these modules from this cache.
-
- Parameters
- ----------
- module_names : list
- List of all fully-qualified module names to be removed.
- """
-
- for module_name in module_names:
- # Unload this module's hook script modules from memory. Since these are top-level pure-Python modules cached
- # only in the "sys.modules" dictionary, popping these modules from this dictionary suffices to garbage
- # collect them.
- module_hook = self.pop(module_name, None) # Remove our reference, if available.
- if module_hook is not None:
- sys.modules.pop(module_hook.hook_module_name, None)
-
-
-def _module_collection_mode_sanitizer(value):
- if isinstance(value, dict):
- # Hook set a dictionary; use it as-is
- return value
- elif isinstance(value, str):
- # Hook set a mode string; convert to a dictionary and assign the string to `None` (= the hooked module).
- return {None: value}
-
- raise ValueError(f"Invalid module collection mode setting value: {value!r}")
-
-
-def _bindepend_symlink_suppression_sanitizer(value):
- if isinstance(value, (list, set)):
- # Hook set a list or a set; use it as-is
- return set(value)
- elif isinstance(value, str):
- # Hook set a string; create a set with single element.
- return set([value])
-
- raise ValueError(f"Invalid value for bindepend_symlink_suppression: {value!r}")
-
-
-# Dictionary mapping the names of magic attributes required by the "ModuleHook" class to 2-tuples "(default_type,
-# sanitizer_func)", where:
-#
-# * "default_type" is the type to which that attribute will be initialized when that hook is lazily loaded.
-# * "sanitizer_func" is the callable sanitizing the original value of that attribute defined by that hook into a
-# safer value consumable by "ModuleHook" callers if any or "None" if the original value requires no sanitization.
-#
-# To avoid subtleties in the ModuleHook.__getattr__() method, this dictionary is declared as a module rather than a
-# class attribute. If declared as a class attribute and then undefined (...for whatever reason), attempting to access
-# this attribute from that method would produce infinite recursion.
-_MAGIC_MODULE_HOOK_ATTRS = {
- # Collections in which order is insignificant. This includes:
- #
- # * "datas", sanitized from hook-style 2-tuple lists defined by hooks into TOC-style 2-tuple sets consumable by
- # "ModuleHook" callers.
- # * "binaries", sanitized in the same way.
- 'datas': (set, format_binaries_and_datas),
- 'binaries': (set, format_binaries_and_datas),
- 'excludedimports': (set, None),
-
- # Collections in which order is significant. This includes:
- #
- # * "hiddenimports", as order of importation is significant. On module importation, hook scripts are loaded and hook
- # functions declared by these scripts are called. As these scripts and functions can have side effects dependent
- # on module importation order, module importation itself can have side effects dependent on this order!
- 'hiddenimports': (list, None),
-
- # Flags
- 'warn_on_missing_hiddenimports': (lambda: True, bool),
-
- # Package/module collection mode dictionary.
- 'module_collection_mode': (dict, _module_collection_mode_sanitizer),
-
- # Path patterns for suppression of symbolic links created by binary dependency analysis.
- 'bindepend_symlink_suppression': (set, _bindepend_symlink_suppression_sanitizer),
-}
-
-
-class ModuleHook:
- """
- Cached object encapsulating a lazy loadable hook script.
-
- This object exposes public attributes (e.g., `datas`) of the underlying hook script as attributes of the same
- name of this object. On the first access of any such attribute, this hook script is lazily loaded into an
- in-memory private module reused on subsequent accesses. These dynamic attributes are referred to as "magic." All
- other static attributes of this object (e.g., `hook_module_name`) are referred to as "non-magic."
-
- Attributes (Magic)
- ----------
- datas : set
- Set of `TOC`-style 2-tuples `(target_file, source_file)` for all external non-executable files required by
- the module being hooked, converted from the `datas` list of hook-style 2-tuples `(source_dir_or_glob,
- target_dir)` defined by this hook script.
- binaries : set
- Set of `TOC`-style 2-tuples `(target_file, source_file)` for all external executable files required by the
- module being hooked, converted from the `binaries` list of hook-style 2-tuples `(source_dir_or_glob,
- target_dir)` defined by this hook script.
- excludedimports : set
- Set of the fully-qualified names of all modules imported by the module being hooked to be ignored rather than
- imported from that module, converted from the `excludedimports` list defined by this hook script. These
- modules will only be "locally" rather than "globally" ignored. These modules will remain importable from all
- modules other than the module being hooked.
- hiddenimports : set
- Set of the fully-qualified names of all modules imported by the module being hooked that are _not_
- automatically detectable by PyInstaller (usually due to being dynamically imported in that module),
- converted from the `hiddenimports` list defined by this hook script.
- warn_on_missing_hiddenimports : bool
- Boolean flag indicating whether missing hidden imports from the hook should generate warnings or not. This
- behavior is enabled by default, but individual hooks can opt out of it.
- module_collection_mode : dict
- A dictionary of package/module names and their corresponding collection mode strings ('pyz', 'pyc', 'py',
- 'pyz+py', 'py+pyz').
- bindepend_symlink_suppression : set
- A set of paths or path patterns corresponding to shared libraries for which binary dependency analysis should
- not create symbolic links into top-level application directory.
-
- Attributes (Non-magic)
- ----------
- module_graph : ModuleGraph
- Current module graph.
- module_name : str
- Name of the module hooked by this hook script.
- hook_filename : str
- Absolute or relative path of this hook script.
- hook_module_name : str
- Name of the in-memory module of this hook script's interpreted contents.
- _hook_module : module
- In-memory module of this hook script's interpreted contents, lazily loaded on the first call to the
- `_load_hook_module()` method _or_ `None` if this method has yet to be accessed.
- _default_priority : int
- Default (location-based) priority for this hook.
- priority : int
- Actual priority for this hook. Might be different from `_default_priority` if hook file specifies the hook
- priority override.
- """
-
- #-- Magic --
-
- def __init__(self, module_graph, module_name, hook_filename, hook_module_name_prefix, default_priority):
- """
- Initialize this metadata.
-
- Parameters
- ----------
- module_graph : ModuleGraph
- Current module graph.
- module_name : str
- Name of the module hooked by this hook script.
- hook_filename : str
- Absolute or relative path of this hook script.
- hook_module_name_prefix : str
- String prefixing the name of the in-memory module for this hook script. To avoid namespace clashes with
- similar modules created by other `ModuleHook` objects in other `ModuleHookCache` containers, this string
- _must_ be unique to the `ModuleHookCache` container containing this `ModuleHook` object. If this string
- is non-unique, an existing in-memory module will be erroneously reused when lazily loading this hook
- script, thus erroneously resanitizing previously sanitized hook script attributes (e.g., `datas`) with
- the `format_binaries_and_datas()` helper.
- default_priority : int
- Default, location-based priority for this hook. Used to select active hook when multiple hooks are defined
- for the same module.
- """
- # Note that the passed module graph is already a weak reference, avoiding circular reference issues. See
- # ModuleHookCache.__init__(). TODO: Add a failure message
- assert isinstance(module_graph, weakref.ProxyTypes)
- self.module_graph = module_graph
- self.module_name = module_name
- self.hook_filename = hook_filename
-
- # Default priority; used as fall-back for dynamic `hook_priority` attribute.
- self._default_priority = default_priority
-
- # Name of the in-memory module fabricated to refer to this hook script.
- self.hook_module_name = hook_module_name_prefix + self.module_name.replace('.', '_')
-
- # Attributes subsequently defined by the _load_hook_module() method.
- self._loaded = False
- self._has_hook_function = False
- self._hook_module = None
-
- def __getattr__(self, attr_name):
- """
- Get the magic attribute with the passed name (e.g., `datas`) from this lazily loaded hook script if any _or_
- raise `AttributeError` otherwise.
-
- This special method is called only for attributes _not_ already defined by this object. This includes
- undefined attributes and the first attempt to access magic attributes.
-
- This special method is _not_ called for subsequent attempts to access magic attributes. The first attempt to
- access magic attributes defines corresponding instance variables accessible via the `self.__dict__` instance
- dictionary (e.g., as `self.datas`) without calling this method. This approach also allows magic attributes to
- be deleted from this object _without_ defining the `__delattr__()` special method.
-
- See Also
- ----------
- Class docstring for supported magic attributes.
- """
-
- if attr_name == 'priority':
- # If attribute is part of hook metadata, read metadata from hook script and return the attribute value.
- self._load_hook_metadata()
- return getattr(self, attr_name)
- if attr_name in _MAGIC_MODULE_HOOK_ATTRS and not self._loaded:
- # If attribute is hook's magic attribute, load and run the hook script, and return the attribute value.
- self._load_hook_module()
- return getattr(self, attr_name)
- else:
- # This is an undefined attribute. Raise an exception.
- raise AttributeError(attr_name)
-
- def __setattr__(self, attr_name, attr_value):
- """
- Set the attribute with the passed name to the passed value.
-
- If this is a magic attribute, this hook script will be lazily loaded before setting this attribute. Unlike
- `__getattr__()`, this special method is called to set _any_ attribute -- including magic, non-magic,
- and undefined attributes.
-
- See Also
- ----------
- Class docstring for supported magic attributes.
- """
-
- # If this is a magic attribute, initialize this attribute by lazy loading this hook script before overwriting
- # this attribute.
- if attr_name in _MAGIC_MODULE_HOOK_ATTRS:
- self._load_hook_module()
-
- # Set this attribute to the passed value. To avoid recursion, the superclass method rather than setattr() is
- # called.
- return super().__setattr__(attr_name, attr_value)
-
- #-- Loading --
-
- def _load_hook_metadata(self):
- """
- Load hook metadata from its source file.
- """
- self.priority = self._default_priority
-
- # Priority override pattern: `# $PyInstaller-Hook-Priority: `
- priority_pattern = re.compile(r"^\s*#\s*\$PyInstaller-Hook-Priority:\s*(?P[\S]+)")
-
- with open(self.hook_filename, "r", encoding="utf-8") as f:
- for line in f:
- # Attempt to match and parse hook priority directive
- m = priority_pattern.match(line)
- if m is not None:
- try:
- self.priority = int(m.group('value'))
- except Exception:
- logger.warning(
- "Failed to parse hook priority value string: %r!", m.group('value'), exc_info=True
- )
- # Currently, this is our only line of interest, so we can stop the search here.
- return
-
- def _load_hook_module(self, keep_module_ref=False):
- """
- Lazily load this hook script into an in-memory private module.
-
- This method (and, indeed, this class) preserves all attributes and functions defined by this hook script as
- is, ensuring sane behaviour in hook functions _not_ expecting unplanned external modification. Instead,
- this method copies public attributes defined by this hook script (e.g., `binaries`) into private attributes
- of this object, which the special `__getattr__()` and `__setattr__()` methods safely expose to external
- callers. For public attributes _not_ defined by this hook script, the corresponding private attributes will
- be assigned sane defaults. For some public attributes defined by this hook script, the corresponding private
- attributes will be transformed into objects more readily and safely consumed elsewhere by external callers.
-
- See Also
- ----------
- Class docstring for supported attributes.
- """
-
- # If this hook script module has already been loaded, noop.
- if self._loaded and (self._hook_module is not None or not keep_module_ref):
- return
-
- # Load and execute the hook script. Even if mechanisms from the import machinery are used, this does not import
- # the hook as the module.
- hook_path, hook_basename = os.path.split(self.hook_filename)
- logger.info('Processing standard module hook %r from %r', hook_basename, hook_path)
- try:
- self._hook_module = importlib_load_source(self.hook_module_name, self.hook_filename)
- except ImportError:
- logger.debug("Hook failed with:", exc_info=True)
- raise ImportErrorWhenRunningHook(self.hook_module_name, self.hook_filename)
-
- # Mark as loaded
- self._loaded = True
-
- # Check if module has hook() function.
- self._has_hook_function = hasattr(self._hook_module, 'hook')
-
- # Copy hook script attributes into magic attributes exposed as instance variables of the current "ModuleHook"
- # instance.
- for attr_name, (default_type, sanitizer_func) in _MAGIC_MODULE_HOOK_ATTRS.items():
- # Unsanitized value of this attribute.
- attr_value = getattr(self._hook_module, attr_name, None)
-
- # If this attribute is undefined, expose a sane default instead.
- if attr_value is None:
- attr_value = default_type()
- # Else if this attribute requires sanitization, do so.
- elif sanitizer_func is not None:
- attr_value = sanitizer_func(attr_value)
- # Else, expose the unsanitized value of this attribute.
-
- # Expose this attribute as an instance variable of the same name.
- setattr(self, attr_name, attr_value)
-
- # If module_collection_mode has an entry with None key, reassign it to the hooked module's name.
- setattr(
- self, 'module_collection_mode', {
- key if key is not None else self.module_name: value
- for key, value in getattr(self, 'module_collection_mode').items()
- }
- )
-
- # Release the module if we do not need the reference. This is the case when hook is loaded during the analysis
- # rather as part of the post-graph operations.
- if not keep_module_ref:
- self._hook_module = None
-
- #-- Hooks --
-
- def post_graph(self, analysis):
- """
- Call the **post-graph hook** (i.e., `hook()` function) defined by this hook script, if any.
-
- Parameters
- ----------
- analysis: build_main.Analysis
- Analysis that calls the hook
-
- This method is intended to be called _after_ the module graph for this application is constructed.
- """
-
- # Lazily load this hook script into an in-memory module.
- # The script might have been loaded before during modulegraph analysis; in that case, it needs to be reloaded
- # only if it provides a hook() function.
- if not self._loaded or self._has_hook_function:
- # Keep module reference when loading the hook, so we can call its hook function!
- self._load_hook_module(keep_module_ref=True)
-
- # Call this hook script's hook() function, which modifies attributes accessed by subsequent methods and
- # hence must be called first.
- self._process_hook_func(analysis)
-
- # Order is insignificant here.
- self._process_hidden_imports()
-
- def _process_hook_func(self, analysis):
- """
- Call this hook's `hook()` function if defined.
-
- Parameters
- ----------
- analysis: build_main.Analysis
- Analysis that calls the hook
- """
-
- # If this hook script defines no hook() function, noop.
- if not hasattr(self._hook_module, 'hook'):
- return
-
- # Call this hook() function.
- hook_api = PostGraphAPI(module_name=self.module_name, module_graph=self.module_graph, analysis=analysis)
- try:
- self._hook_module.hook(hook_api)
- except ImportError:
- logger.debug("Hook failed with:", exc_info=True)
- raise ImportErrorWhenRunningHook(self.hook_module_name, self.hook_filename)
-
- # Update all magic attributes modified by the prior call.
- self.datas.update(set(hook_api._added_datas))
- self.binaries.update(set(hook_api._added_binaries))
- self.hiddenimports.extend(hook_api._added_imports)
- self.module_collection_mode.update(hook_api._module_collection_mode)
- self.bindepend_symlink_suppression.update(hook_api._bindepend_symlink_suppression)
-
- # FIXME: `hook_api._deleted_imports` should be appended to `self.excludedimports` and used to suppress module
- # import during the modulegraph construction rather than handled here. However, for that to work, the `hook()`
- # function needs to be ran during modulegraph construction instead of in post-processing (and this in turn
- # requires additional code refactoring in order to be able to pass `analysis` to `PostGraphAPI` object at
- # that point). So once the modulegraph rewrite is complete, remove the code block below.
- for deleted_module_name in hook_api._deleted_imports:
- # Remove the graph link between the hooked module and item. This removes the 'item' node from the graph if
- # no other links go to it (no other modules import it)
- self.module_graph.removeReference(hook_api.node, deleted_module_name)
-
- def _process_hidden_imports(self):
- """
- Add all imports listed in this hook script's `hiddenimports` attribute to the module graph as if directly
- imported by this hooked module.
-
- These imports are typically _not_ implicitly detectable by PyInstaller and hence must be explicitly defined
- by hook scripts.
- """
-
- # For each hidden import required by the module being hooked...
- for import_module_name in self.hiddenimports:
- try:
- # Graph node for this module. Do not implicitly create namespace packages for non-existent packages.
- caller = self.module_graph.find_node(self.module_name, create_nspkg=False)
-
- # Manually import this hidden import from this module.
- self.module_graph.import_hook(import_module_name, caller)
- # If this hidden import is unimportable, print a non-fatal warning. Hidden imports often become
- # desynchronized from upstream packages and hence are only "soft" recommendations.
- except ImportError:
- if self.warn_on_missing_hiddenimports:
- logger.warning('Hidden import "%s" not found!', import_module_name)
-
-
-class AdditionalFilesCache:
- """
- Cache for storing what binaries and datas were pushed by what modules when import hooks were processed.
- """
- def __init__(self):
- self._binaries = {}
- self._datas = {}
-
- def add(self, modname, binaries, datas):
-
- self._binaries.setdefault(modname, [])
- self._binaries[modname].extend(binaries or [])
- self._datas.setdefault(modname, [])
- self._datas[modname].extend(datas or [])
-
- def __contains__(self, name):
- return name in self._binaries or name in self._datas
-
- def binaries(self, modname):
- """
- Return list of binaries for given module name.
- """
- return self._binaries.get(modname, [])
-
- def datas(self, modname):
- """
- Return list of datas for given module name.
- """
- return self._datas.get(modname, [])
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/imphookapi.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/imphookapi.py
deleted file mode 100755
index 16ce0c1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/imphookapi.py
+++ /dev/null
@@ -1,486 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Classes facilitating communication between PyInstaller and import hooks.
-
-PyInstaller passes instances of classes defined by this module to corresponding functions defined by external import
-hooks, which commonly modify the contents of these instances before returning. PyInstaller then detects and converts
-these modifications into appropriate operations on the current `PyiModuleGraph` instance, thus modifying which
-modules will be frozen into the executable.
-"""
-
-from PyInstaller.building.utils import format_binaries_and_datas
-from PyInstaller.lib.modulegraph.modulegraph import (RuntimeModule, RuntimePackage)
-
-
-class PreSafeImportModuleAPI:
- """
- Metadata communicating changes made by the current **pre-safe import module hook** (i.e., hook run immediately
- _before_ a call to `ModuleGraph._safe_import_module()` recursively adding the hooked module, package,
- or C extension and all transitive imports thereof to the module graph) back to PyInstaller.
-
- Pre-safe import module hooks _must_ define a `pre_safe_import_module()` function accepting an instance of this
- class, whose attributes describe the subsequent `ModuleGraph._safe_import_module()` call creating the hooked
- module's graph node.
-
- Each pre-safe import module hook is run _only_ on the first attempt to create the hooked module's graph node and
- then subsequently ignored. If this hook successfully creates that graph node, the subsequent
- `ModuleGraph._safe_import_module()` call will observe this fact and silently return without attempting to
- recreate that graph node.
-
- Pre-safe import module hooks are typically used to create graph nodes for **runtime modules** (i.e.,
- modules dynamically defined at runtime). Most modules are physically defined in external `.py`-suffixed scripts.
- Some modules, however, are dynamically defined at runtime (e.g., `six.moves`, dynamically defined by the
- physically defined `six.py` module). However, `ModuleGraph` only parses `import` statements residing in external
- scripts. `ModuleGraph` is _not_ a full-fledged, Turing-complete Python interpreter and hence has no means of
- parsing `import` statements performed by runtime modules existing only in-memory.
-
- 'With great power comes great responsibility.'
-
-
- Attributes (Immutable)
- ----------------------------
- The following attributes are **immutable** (i.e., read-only). For safety, any attempts to change these attributes
- _will_ result in a raised exception:
-
- module_graph : PyiModuleGraph
- Current module graph.
- parent_package : Package
- Graph node for the package providing this module _or_ `None` if this module is a top-level module.
-
- Attributes (Mutable)
- -----------------------------
- The following attributes are editable.
-
- module_basename : str
- Unqualified name of the module to be imported (e.g., `text`).
- module_name : str
- Fully-qualified name of this module (e.g., `email.mime.text`).
- """
- def __init__(self, module_graph, module_basename, module_name, parent_package):
- self._module_graph = module_graph
- self.module_basename = module_basename
- self.module_name = module_name
- self._parent_package = parent_package
-
- # Immutable properties. No corresponding setters are defined.
- @property
- def module_graph(self):
- """
- Current module graph.
- """
- return self._module_graph
-
- @property
- def parent_package(self):
- """
- Parent Package of this node.
- """
- return self._parent_package
-
- def add_runtime_module(self, module_name):
- """
- Add a graph node representing a non-package Python module with the passed name dynamically defined at runtime.
-
- Most modules are statically defined on-disk as standard Python files. Some modules, however, are dynamically
- defined in-memory at runtime (e.g., `gi.repository.Gst`, dynamically defined by the statically defined
- `gi.repository.__init__` module).
-
- This method adds a graph node representing such a runtime module. Since this module is _not_ a package,
- all attempts to import submodules from this module in `from`-style import statements (e.g., the `queue`
- submodule in `from six.moves import queue`) will be silently ignored. To circumvent this, simply call
- `add_runtime_package()` instead.
-
- Parameters
- ----------
- module_name : str
- Fully-qualified name of this module (e.g., `gi.repository.Gst`).
-
- Examples
- ----------
- This method is typically called by `pre_safe_import_module()` hooks, e.g.:
-
- def pre_safe_import_module(api):
- api.add_runtime_module(api.module_name)
- """
-
- self._module_graph.add_module(RuntimeModule(module_name))
-
- def add_runtime_package(self, package_name):
- """
- Add a graph node representing a non-namespace Python package with the passed name dynamically defined at
- runtime.
-
- Most packages are statically defined on-disk as standard subdirectories containing `__init__.py` files. Some
- packages, however, are dynamically defined in-memory at runtime (e.g., `six.moves`, dynamically defined by
- the statically defined `six` module).
-
- This method adds a graph node representing such a runtime package. All attributes imported from this package
- in `from`-style import statements that are submodules of this package (e.g., the `queue` submodule in `from
- six.moves import queue`) will be imported rather than ignored.
-
- Parameters
- ----------
- package_name : str
- Fully-qualified name of this package (e.g., `six.moves`).
-
- Examples
- ----------
- This method is typically called by `pre_safe_import_module()` hooks, e.g.:
-
- def pre_safe_import_module(api):
- api.add_runtime_package(api.module_name)
- """
-
- self._module_graph.add_module(RuntimePackage(package_name))
-
- def add_alias_module(self, real_module_name, alias_module_name):
- """
- Alias the source module to the target module with the passed names.
-
- This method ensures that the next call to findNode() given the target module name will resolve this alias.
- This includes importing and adding a graph node for the source module if needed as well as adding a reference
- from the target to the source module.
-
- Parameters
- ----------
- real_module_name : str
- Fully-qualified name of the **existing module** (i.e., the module being aliased).
- alias_module_name : str
- Fully-qualified name of the **non-existent module** (i.e., the alias to be created).
- """
-
- self._module_graph.alias_module(real_module_name, alias_module_name)
-
- def append_package_path(self, directory):
- """
- Modulegraph does a good job at simulating Python's, but it cannot handle packagepath `__path__` modifications
- packages make at runtime.
-
- Therefore there is a mechanism whereby you can register extra paths in this map for a package, and it will be
- honored.
-
- Parameters
- ----------
- directory : str
- Absolute or relative path of the directory to be appended to this package's `__path__` attribute.
- """
-
- self._module_graph.append_package_path(self.module_name, directory)
-
-
-class PreFindModulePathAPI:
- """
- Metadata communicating changes made by the current **pre-find module path hook** (i.e., hook run immediately
- _before_ a call to `ModuleGraph._find_module_path()` finding the hooked module's absolute path) back to PyInstaller.
-
- Pre-find module path hooks _must_ define a `pre_find_module_path()` function accepting an instance of this class,
- whose attributes describe the subsequent `ModuleGraph._find_module_path()` call to be performed.
-
- Pre-find module path hooks are typically used to change the absolute path from which a module will be
- subsequently imported and thus frozen into the executable. To do so, hooks may overwrite the default
- `search_dirs` list of the absolute paths of all directories to be searched for that module: e.g.,
-
- def pre_find_module_path(api):
- api.search_dirs = ['/the/one/true/package/providing/this/module']
-
- Each pre-find module path hook is run _only_ on the first call to `ModuleGraph._find_module_path()` for the
- corresponding module.
-
- Attributes
- ----------
- The following attributes are **mutable** (i.e., modifiable). All changes to these attributes will be immediately
- respected by PyInstaller:
-
- search_dirs : list
- List of the absolute paths of all directories to be searched for this module (in order). Searching will halt
- at the first directory containing this module.
-
- Attributes (Immutable)
- ----------
- The following attributes are **immutable** (i.e., read-only). For safety, any attempts to change these attributes
- _will_ result in a raised exception:
-
- module_name : str
- Fully-qualified name of this module.
- module_graph : PyiModuleGraph
- Current module graph. For efficiency, this attribute is technically mutable. To preserve graph integrity,
- this attribute should nonetheless _never_ be modified. While read-only `PyiModuleGraph` methods (e.g.,
- `findNode()`) are safely callable from within pre-find module path hooks, methods modifying the graph are
- _not_. If graph modifications are required, consider an alternative type of hook (e.g., pre-import module
- hooks).
- """
- def __init__(
- self,
- module_graph,
- module_name,
- search_dirs,
- ):
- # Mutable attributes.
- self.search_dirs = search_dirs
-
- # Immutable attributes.
- self._module_graph = module_graph
- self._module_name = module_name
-
- # Immutable properties. No corresponding setters are defined.
- @property
- def module_graph(self):
- """
- Current module graph.
- """
- return self._module_graph
-
- @property
- def module_name(self):
- """
- Fully-qualified name of this module.
- """
- return self._module_name
-
-
-class PostGraphAPI:
- """
- Metadata communicating changes made by the current **post-graph hook** (i.e., hook run for a specific module
- transitively imported by the current application _after_ the module graph of all `import` statements performed by
- this application has been constructed) back to PyInstaller.
-
- Post-graph hooks may optionally define a `post_graph()` function accepting an instance of this class,
- whose attributes describe the current state of the module graph and the hooked module's graph node.
-
- Attributes (Mutable)
- ----------
- The following attributes are **mutable** (i.e., modifiable). All changes to these attributes will be immediately
- respected by PyInstaller:
-
- module_graph : PyiModuleGraph
- Current module graph.
- module : Node
- Graph node for the currently hooked module.
-
- 'With great power comes great responsibility.'
-
- Attributes (Immutable)
- ----------
- The following attributes are **immutable** (i.e., read-only). For safety, any attempts to change these attributes
- _will_ result in a raised exception:
-
- __name__ : str
- Fully-qualified name of this module (e.g., `six.moves.tkinter`).
- __file__ : str
- Absolute path of this module. If this module is:
- * A standard (rather than namespace) package, this is the absolute path of this package's directory.
- * A namespace (rather than standard) package, this is the abstract placeholder `-`. (Don't ask. Don't tell.)
- * A non-package module or C extension, this is the absolute path of the corresponding file.
- __path__ : list
- List of the absolute paths of all directories comprising this package if this module is a package _or_ `None`
- otherwise. If this module is a standard (rather than namespace) package, this list contains only the absolute
- path of this package's directory.
- co : code
- Code object compiled from the contents of `__file__` (e.g., via the `compile()` builtin).
- analysis: build_main.Analysis
- The Analysis that load the hook.
-
- Attributes (Private)
- ----------
- The following attributes are technically mutable but private, and hence should _never_ be externally accessed or
- modified by hooks. Call the corresponding public methods instead:
-
- _added_datas : list
- List of the `(name, path)` 2-tuples or TOC objects of all external data files required by the current hook,
- defaulting to the empty list. This is equivalent to the global `datas` hook attribute.
- _added_imports : list
- List of the fully-qualified names of all modules imported by the current hook, defaulting to the empty list.
- This is equivalent to the global `hiddenimports` hook attribute.
- _added_binaries : list
- List of the `(name, path)` 2-tuples or TOC objects of all external C extensions imported by the current hook,
- defaulting to the empty list. This is equivalent to the global `binaries` hook attribute.
- _module_collection_mode : dict
- Dictionary of package/module names and their corresponding collection mode strings. This is equivalent to the
- global `module_collection_mode` hook attribute.
- _bindepend_symlink_suppression : set
- A set of paths or path patterns corresponding to shared libraries for which binary dependency analysis should
- not generate symbolic links into top-level application directory.
- """
- def __init__(self, module_name, module_graph, analysis):
- # Mutable attributes.
- self.module_graph = module_graph
- self.module = module_graph.find_node(module_name)
- assert self.module is not None # should not occur
-
- # Immutable attributes.
- self.___name__ = module_name
- self.___file__ = self.module.filename
- self._co = self.module.code
- self._analysis = analysis
-
- # To enforce immutability, convert this module's package path if any into an immutable tuple.
- self.___path__ = tuple(self.module.packagepath) \
- if self.module.packagepath is not None else None
-
- #FIXME: Refactor "_added_datas", "_added_binaries", and "_deleted_imports" into sets. Since order of
- #import is important, "_added_imports" must remain a list.
-
- # Private attributes.
- self._added_binaries = []
- self._added_datas = []
- self._added_imports = []
- self._deleted_imports = []
- self._module_collection_mode = {}
- self._bindepend_symlink_suppression = set()
-
- # Immutable properties. No corresponding setters are defined.
- @property
- def __file__(self):
- """
- Absolute path of this module's file.
- """
- return self.___file__
-
- @property
- def __path__(self):
- """
- List of the absolute paths of all directories comprising this package if this module is a package _or_ `None`
- otherwise. If this module is a standard (rather than namespace) package, this list contains only the absolute
- path of this package's directory.
- """
- return self.___path__
-
- @property
- def __name__(self):
- """
- Fully-qualified name of this module (e.g., `six.moves.tkinter`).
- """
- return self.___name__
-
- @property
- def co(self):
- """
- Code object compiled from the contents of `__file__` (e.g., via the `compile()` builtin).
- """
- return self._co
-
- @property
- def analysis(self):
- """
- build_main.Analysis that calls the hook.
- """
- return self._analysis
-
- # Obsolete immutable properties provided to preserve backward compatibility.
- @property
- def name(self):
- """
- Fully-qualified name of this module (e.g., `six.moves.tkinter`).
-
- **This property has been deprecated by the `__name__` property.**
- """
- return self.___name__
-
- @property
- def graph(self):
- """
- Current module graph.
-
- **This property has been deprecated by the `module_graph` property.**
- """
- return self.module_graph
-
- @property
- def node(self):
- """
- Graph node for the currently hooked module.
-
- **This property has been deprecated by the `module` property.**
- """
- return self.module
-
- # TODO: This incorrectly returns the list of the graph nodes of all modules *TRANSITIVELY* (rather than directly)
- # imported by this module. Unfortunately, this implies that most uses of this property are currently broken
- # (e.g., "hook-PIL.SpiderImagePlugin.py"). We only require this for the aforementioned hook, so contemplate
- # alternative approaches.
- @property
- def imports(self):
- """
- List of the graph nodes of all modules directly imported by this module.
- """
- return self.module_graph.iter_graph(start=self.module)
-
- def add_imports(self, *module_names):
- """
- Add all Python modules whose fully-qualified names are in the passed list as "hidden imports" upon which the
- current module depends.
-
- This is equivalent to appending such names to the hook-specific `hiddenimports` attribute.
- """
- # Append such names to the current list of all such names.
- self._added_imports.extend(module_names)
-
- def del_imports(self, *module_names):
- """
- Remove the named fully-qualified modules from the set of imports (either hidden or visible) upon which the
- current module depends.
-
- This is equivalent to appending such names to the hook-specific `excludedimports` attribute.
- """
- self._deleted_imports.extend(module_names)
-
- def add_binaries(self, binaries):
- """
- Add all external dynamic libraries in the passed list of `(src_name, dest_name)` 2-tuples as dependencies of the
- current module. This is equivalent to adding to the global `binaries` hook attribute.
-
- For convenience, the `binaries` may also be a list of TOC-style 3-tuples `(dest_name, src_name, typecode)`.
- """
-
- # Detect TOC 3-tuple list by checking the length of the first entry
- if binaries and len(binaries[0]) == 3:
- self._added_binaries.extend(entry[:2] for entry in binaries)
- else:
- # NOTE: `format_binaries_and_datas` changes tuples from input format `(src_name, dest_name)` to output
- # format `(dest_name, src_name)`.
- self._added_binaries.extend(format_binaries_and_datas(binaries))
-
- def add_datas(self, datas):
- """
- Add all external data files in the passed list of `(src_name, dest_name)` 2-tuples as dependencies of the
- current module. This is equivalent to adding to the global `datas` hook attribute.
-
- For convenience, the `datas` may also be a list of TOC-style 3-tuples `(dest_name, src_name, typecode)`.
- """
-
- # Detect TOC 3-tuple list by checking the length of the first entry
- if datas and len(datas[0]) == 3:
- self._added_datas.extend(entry[:2] for entry in datas)
- else:
- # NOTE: `format_binaries_and_datas` changes tuples from input format `(src_name, dest_name)` to output
- # format `(dest_name, src_name)`.
- self._added_datas.extend(format_binaries_and_datas(datas))
-
- def set_module_collection_mode(self, name, mode):
- """"
- Set the package/module collection mode for the specified module name. If `name` is `None`, the hooked
- module/package name is used. `mode` can be one of valid mode strings (`'pyz'`, `'pyc'`, `'py'`, `'pyz+py'`,
- `'py+pyz'`) or `None`, which clears the setting for the module/package - but only within this hook's context!
- """
- if name is None:
- name = self.__name__
- if mode is None:
- self._module_collection_mode.pop(name)
- else:
- self._module_collection_mode[name] = mode
-
- def add_bindepend_symlink_suppression_pattern(self, pattern):
- """
- Add the given path or path pattern to the set of patterns that prevent binary dependency analysis from creating
- a symbolic link to the top-level application directory.
- """
- self._bindepend_symlink_suppression.add(pattern)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/depend/utils.py b/venv/lib/python3.12/site-packages/PyInstaller/depend/utils.py
deleted file mode 100755
index ebbbbff..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/depend/utils.py
+++ /dev/null
@@ -1,344 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Utility functions related to analyzing/bundling dependencies.
-"""
-
-import ctypes.util
-import os
-import re
-import shutil
-from types import CodeType
-
-from PyInstaller import compat
-from PyInstaller import log as logging
-from PyInstaller.depend import bytecode
-from PyInstaller.depend.dylib import include_library
-from PyInstaller.exceptions import ExecCommandFailed
-
-logger = logging.getLogger(__name__)
-
-
-def scan_code_for_ctypes(co):
- binaries = __recursively_scan_code_objects_for_ctypes(co)
-
- # If any of the libraries has been requested with anything else than the basename, drop that entry and warn the
- # user - PyInstaller would need to patch the compiled pyc file to make it work correctly!
- binaries = set(binaries)
- for binary in list(binaries):
- # 'binary' might be in some cases None. Some Python modules (e.g., PyObjC.objc._bridgesupport) might contain
- # code like this:
- # dll = ctypes.CDLL(None)
- if not binary:
- # None values have to be removed too.
- binaries.remove(binary)
- elif binary != os.path.basename(binary):
- # TODO make these warnings show up somewhere.
- try:
- filename = co.co_filename
- except Exception:
- filename = 'UNKNOWN'
- logger.warning(
- "Ignoring %s imported from %s - only basenames are supported with ctypes imports!", binary, filename
- )
- binaries.remove(binary)
-
- binaries = _resolveCtypesImports(binaries)
- return binaries
-
-
-def __recursively_scan_code_objects_for_ctypes(code: CodeType):
- """
- Detects ctypes dependencies, using reasonable heuristics that should cover most common ctypes usages; returns a
- list containing names of binaries detected as dependencies.
- """
- from PyInstaller.depend.bytecode import any_alias, search_recursively
-
- binaries = []
- ctypes_dll_names = {
- *any_alias("ctypes.CDLL"),
- *any_alias("ctypes.cdll.LoadLibrary"),
- *any_alias("ctypes.WinDLL"),
- *any_alias("ctypes.windll.LoadLibrary"),
- *any_alias("ctypes.OleDLL"),
- *any_alias("ctypes.oledll.LoadLibrary"),
- *any_alias("ctypes.PyDLL"),
- *any_alias("ctypes.pydll.LoadLibrary"),
- }
- find_library_names = {
- *any_alias("ctypes.util.find_library"),
- }
-
- for calls in bytecode.recursive_function_calls(code).values():
- for (name, args) in calls:
- if not len(args) == 1 or not isinstance(args[0], str):
- continue
- if name in ctypes_dll_names:
- # ctypes.*DLL() or ctypes.*dll.LoadLibrary()
- binaries.append(*args)
- elif name in find_library_names:
- # ctypes.util.find_library() needs to be handled separately, because we need to resolve the library base
- # name given as the argument (without prefix and suffix, e.g. 'gs') into corresponding full name (e.g.,
- # 'libgs.so.9').
- libname = args[0]
- if libname:
- try: # this try was inserted due to the ctypes bug https://github.com/python/cpython/issues/93094
- libname = ctypes.util.find_library(libname)
- except FileNotFoundError:
- libname = None
- logger.warning(
- 'ctypes.util.find_library raised a FileNotFoundError. '
- 'Supressing and assuming no lib with the name "%s" was found.', args[0]
- )
- if libname:
- # On Windows, `find_library` may return a full pathname. See issue #1934.
- libname = os.path.basename(libname)
- binaries.append(libname)
-
- # The above handles any flavour of function/class call. We still need to capture the (albeit rarely used) case of
- # loading libraries with ctypes.cdll's getattr.
- for i in search_recursively(_scan_code_for_ctypes_getattr, code).values():
- binaries.extend(i)
-
- return binaries
-
-
-_ctypes_getattr_regex = bytecode.bytecode_regex(
- rb"""
- # Matches 'foo.bar' or 'foo.bar.whizz'.
-
- # Load the 'foo'.
- (
- (?:(?:""" + bytecode._OPCODES_EXTENDED_ARG + rb""").)*
- (?:""" + bytecode._OPCODES_FUNCTION_GLOBAL + rb""").
- )
-
- # Load the 'bar.whizz' (one opcode per name component, each possibly preceded by name reference extension).
- (
- (?:
- (?:(?:""" + bytecode._OPCODES_EXTENDED_ARG + rb""").)*
- (?:""" + bytecode._OPCODES_FUNCTION_LOAD + rb""").
- )+
- )
-"""
-)
-
-
-def _scan_code_for_ctypes_getattr(code: CodeType):
- """
- Detect uses of ``ctypes.cdll.library_name``, which implies that ``library_name.dll`` should be collected.
- """
-
- key_names = ("cdll", "oledll", "pydll", "windll")
-
- for match in bytecode.finditer(_ctypes_getattr_regex, code.co_code):
- name, attrs = match.groups()
- name = bytecode.load(name, code)
- attrs = bytecode.loads(attrs, code)
-
- if attrs and attrs[-1] == "LoadLibrary":
- continue
-
- # Capture `from ctypes import ole; ole.dll_name`.
- if len(attrs) == 1:
- if name in key_names:
- yield attrs[0] + ".dll"
- # Capture `import ctypes; ctypes.ole.dll_name`.
- if len(attrs) == 2:
- if name == "ctypes" and attrs[0] in key_names:
- yield attrs[1] + ".dll"
-
-
-# TODO: reuse this code with modulegraph implementation.
-def _resolveCtypesImports(cbinaries):
- """
- Completes ctypes BINARY entries for modules with their full path.
-
- Input is a list of c-binary-names (as found by `scan_code_instruction_for_ctypes`). Output is a list of tuples
- ready to be appended to the ``binaries`` of a modules.
-
- This function temporarily extents PATH, LD_LIBRARY_PATH or DYLD_LIBRARY_PATH (depending on the platform) by
- CONF['pathex'] so shared libs will be search there, too.
-
- Example:
- >>> _resolveCtypesImports(['libgs.so'])
- [(libgs.so', ''/usr/lib/libgs.so', 'BINARY')]
- """
- from ctypes.util import find_library
-
- from PyInstaller.config import CONF
-
- if compat.is_unix:
- envvar = "LD_LIBRARY_PATH"
- elif compat.is_darwin:
- envvar = "DYLD_LIBRARY_PATH"
- else:
- envvar = "PATH"
-
- def _setPaths():
- path = os.pathsep.join(CONF['pathex'])
- old = compat.getenv(envvar)
- if old is not None:
- path = os.pathsep.join((path, old))
- compat.setenv(envvar, path)
- return old
-
- def _restorePaths(old):
- if old is None:
- compat.unsetenv(envvar)
- else:
- compat.setenv(envvar, old)
-
- ret = []
-
- # Try to locate the shared library on the disk. This is done by calling ctypes.util.find_library with
- # ImportTracker's local paths temporarily prepended to the library search paths (and restored after the call).
- old = _setPaths()
- for cbin in cbinaries:
- try:
- # There is an issue with find_library() where it can run into errors trying to locate the library. See
- # #5734.
- cpath = find_library(os.path.splitext(cbin)[0])
- except FileNotFoundError:
- # In these cases, find_library() should return None.
- cpath = None
- if compat.is_unix or compat.is_cygwin:
- # CAVEAT: find_library() is not the correct function. ctype's documentation says that it is meant to resolve
- # only the filename (as a *compiler* does) not the full path. Anyway, it works well enough on Windows and
- # macOS. On Linux, we need to implement more code to find out the full path.
- if cpath is None:
- cpath = cbin
- # "man ld.so" says that we should first search LD_LIBRARY_PATH and then the ldcache.
- for d in compat.getenv(envvar, '').split(os.pathsep):
- if os.path.isfile(os.path.join(d, cpath)):
- cpath = os.path.join(d, cpath)
- break
- else:
- if LDCONFIG_CACHE is None:
- load_ldconfig_cache()
- if cpath in LDCONFIG_CACHE:
- cpath = LDCONFIG_CACHE[cpath]
- assert os.path.isfile(cpath)
- else:
- cpath = None
- if cpath is None:
- # Skip warning message if cbin (basename of library) is ignored. This prevents messages like:
- # 'W: library kernel32.dll required via ctypes not found'
- if not include_library(cbin):
- continue
- # On non-Windows, automatically ignore all ctypes-based referenes to DLL files. This complements the above
- # check, which might not match potential case variations (e.g., `KERNEL32.dll`, instead of `kernel32.dll`)
- # due to case-sensitivity of the matching that is in effect on non-Windows platforms.
- if (not compat.is_win and not compat.is_cygwin) and cbin.lower().endswith('.dll'):
- continue
- logger.warning("Library %s required via ctypes not found", cbin)
- else:
- if not include_library(cpath):
- continue
- ret.append((cbin, cpath, "BINARY"))
- _restorePaths(old)
- return ret
-
-
-LDCONFIG_CACHE = None # cache the output of `/sbin/ldconfig -p`
-
-
-def load_ldconfig_cache():
- """
- Create a cache of the `ldconfig`-output to call it only once.
- It contains thousands of libraries and running it on every dylib is expensive.
- """
- global LDCONFIG_CACHE
-
- if LDCONFIG_CACHE is not None:
- return
-
- if compat.is_cygwin:
- # Not available under Cygwin; but we might be re-using general POSIX codepaths, and end up here. So exit early.
- LDCONFIG_CACHE = {}
- return
-
- if compat.is_musl:
- # Musl deliberately doesn't use ldconfig. The ldconfig executable either doesn't exist or it's a functionless
- # executable which, on calling with any arguments, simply tells you that those arguments are invalid.
- LDCONFIG_CACHE = {}
- return
-
- ldconfig = shutil.which('ldconfig')
- if ldconfig is None:
- # If `ldconfig` is not found in $PATH, search for it in some fixed directories. Simply use a second call instead
- # of fiddling around with checks for empty env-vars and string-concat.
- ldconfig = shutil.which('ldconfig', path='/usr/sbin:/sbin:/usr/bin:/bin')
-
- # If we still could not find the 'ldconfig' command...
- if ldconfig is None:
- LDCONFIG_CACHE = {}
- return
-
- if compat.is_freebsd or compat.is_openbsd:
- # This has a quite different format than other Unixes:
- # [vagrant@freebsd-10 ~]$ ldconfig -r
- # /var/run/ld-elf.so.hints:
- # search directories: /lib:/usr/lib:/usr/lib/compat:...
- # 0:-lgeom.5 => /lib/libgeom.so.5
- # 184:-lpython2.7.1 => /usr/local/lib/libpython2.7.so.1
- ldconfig_arg = '-r'
- splitlines_count = 2
- pattern = re.compile(r'^\s+\d+:-l(\S+)(\s.*)? => (\S+)')
- else:
- # Skip first line of the library list because it is just an informative line and might contain localized
- # characters. Example of first line with locale set to cs_CZ.UTF-8:
- #$ /sbin/ldconfig -p
- #V keši „/etc/ld.so.cache“ nalezeno knihoven: 2799
- # libzvbi.so.0 (libc6,x86-64) => /lib64/libzvbi.so.0
- # libzvbi-chains.so.0 (libc6,x86-64) => /lib64/libzvbi-chains.so.0
- ldconfig_arg = '-p'
- splitlines_count = 1
- pattern = re.compile(r'^\s+(\S+)(\s.*)? => (\S+)')
-
- try:
- text = compat.exec_command(ldconfig, ldconfig_arg)
- except ExecCommandFailed:
- logger.warning("Failed to execute ldconfig. Disabling LD cache.")
- LDCONFIG_CACHE = {}
- return
-
- text = text.strip().splitlines()[splitlines_count:]
-
- LDCONFIG_CACHE = {}
- for line in text:
- # :fixme: this assumes library names do not contain whitespace
- m = pattern.match(line)
-
- # Sanitize away any abnormal lines of output.
- if m is None:
- # Warn about it then skip the rest of this iteration.
- if re.search("Cache generated by:", line):
- # See #5540. This particular line is harmless.
- pass
- else:
- logger.warning("Unrecognised line of output %r from ldconfig", line)
- continue
-
- path = m.groups()[-1]
- if compat.is_freebsd or compat.is_openbsd:
- # Insert `.so` at the end of the lib's basename. soname and filename may have (different) trailing versions.
- # We assume the `.so` in the filename to mark the end of the lib's basename.
- bname = os.path.basename(path).split('.so', 1)[0]
- name = 'lib' + m.group(1)
- assert name.startswith(bname)
- name = bname + '.so' + name[len(bname):]
- else:
- name = m.group(1)
- # ldconfig may know about several versions of the same lib, e.g., different arch, different libc, etc.
- # Use the first entry.
- if name not in LDCONFIG_CACHE:
- LDCONFIG_CACHE[name] = path
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/exceptions.py b/venv/lib/python3.12/site-packages/PyInstaller/exceptions.py
deleted file mode 100755
index 020e878..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/exceptions.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-class ExecCommandFailed(SystemExit):
- pass
-
-
-class HookError(Exception):
- """
- Base class for hook related errors.
- """
- pass
-
-
-class ImportErrorWhenRunningHook(HookError):
- def __str__(self):
- return (
- "ERROR: Failed to import module {0} required by hook for module {1}. Please check whether module {0} "
- "actually exists and whether the hook is compatible with your version of {1}: You might want to read more "
- "about hooks in the manual and provide a pull-request to improve PyInstaller.".format(
- self.args[0], self.args[1]
- )
- )
-
-
-class RemovedCipherFeatureError(SystemExit):
- def __init__(self, message):
- super().__init__(
- f"ERROR: Bytecode encryption was removed in PyInstaller v6.0. {message}"
- " For the rationale and alternatives see https://github.com/pyinstaller/pyinstaller/pull/6999"
- )
-
-
-class RemovedExternalManifestError(SystemExit):
- def __init__(self, message):
- super().__init__(f"ERROR: Support for external executable manifest was removed in PyInstaller v6.0. {message}")
-
-
-class RemovedWinSideBySideSupportError(SystemExit):
- def __init__(self, message):
- super().__init__(
- f"ERROR: Support for collecting and processing WinSxS assemblies was removed in PyInstaller v6.0. {message}"
- )
-
-
-class PythonLibraryNotFoundError(SystemExit):
- def __init__(self, message):
- super().__init__(f"ERROR: {message}")
-
-
-class InvalidSrcDestTupleError(SystemExit):
- def __init__(self, src_dest, message):
- super().__init__(f"ERROR: Invalid (SRC, DEST_DIR) tuple: {src_dest!r}. {message}")
-
-
-class ImportlibMetadataError(SystemExit):
- def __init__(self):
- super().__init__(
- "ERROR: PyInstaller requires importlib.metadata from python >= 3.10 stdlib or importlib_metadata from "
- "importlib-metadata >= 4.6"
- )
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/__pycache__/pyi_splash.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/__pycache__/pyi_splash.cpython-312.pyc
deleted file mode 100644
index f830fad..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/__pycache__/pyi_splash.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__init__.py
deleted file mode 100755
index e006337..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__init__.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-# -----------------------------------------------------------------------------
-
-import sys
-import os
-
-# A boolean indicating whether the frozen application is a macOS .app bundle.
-is_macos_app_bundle = sys.platform == 'darwin' and sys._MEIPASS.endswith("Contents/Frameworks")
-
-
-def prepend_path_to_environment_variable(path, variable_name):
- """
- Prepend the given path to the list of paths stored in the given environment variable (separated by `os.pathsep`).
- If the given path is already specified in the environment variable, no changes are made. If the environment variable
- is not set or is empty, it is set/overwritten with the given path.
- """
- stored_paths = os.environ.get(variable_name)
- if stored_paths:
- # If path is already included, make this a no-op. NOTE: we need to split the string and search in the list of
- # substrings to find an exact match; searching in the original string might erroneously match a prefix of a
- # longer (i.e., sub-directory) path when such entry already happens to be in PATH (see #8857).
- if path in stored_paths.split(os.pathsep):
- return
- # Otherwise, prepend the path
- stored_paths = path + os.pathsep + stored_paths
- else:
- stored_paths = path
- os.environ[variable_name] = stored_paths
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 47131f9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/_win32.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/_win32.cpython-312.pyc
deleted file mode 100644
index 0b02fe0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/_win32.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/qt.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/qt.cpython-312.pyc
deleted file mode 100644
index d5c6873..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/qt.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/tempfile.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/tempfile.cpython-312.pyc
deleted file mode 100644
index 06847e0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/__pycache__/tempfile.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/_win32.py b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/_win32.py
deleted file mode 100755
index 80e30ec..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/_win32.py
+++ /dev/null
@@ -1,333 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-# -----------------------------------------------------------------------------
-
-import ctypes
-import ctypes.wintypes
-
-# Constants from win32 headers
-TOKEN_QUERY = 0x0008
-
-TokenUser = 1 # from TOKEN_INFORMATION_CLASS enum
-TokenAppContainerSid = 31 # from TOKEN_INFORMATION_CLASS enum
-
-ERROR_INSUFFICIENT_BUFFER = 122
-
-INVALID_HANDLE = -1
-
-FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100
-FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
-
-SDDL_REVISION1 = 1
-
-# Structures for ConvertSidToStringSidW
-PSID = ctypes.wintypes.LPVOID
-
-
-class SID_AND_ATTRIBUTES(ctypes.Structure):
- _fields_ = [
- ("Sid", PSID),
- ("Attributes", ctypes.wintypes.DWORD),
- ]
-
-
-class TOKEN_USER(ctypes.Structure):
- _fields_ = [
- ("User", SID_AND_ATTRIBUTES),
- ]
-
-
-PTOKEN_USER = ctypes.POINTER(TOKEN_USER)
-
-
-class TOKEN_APPCONTAINER_INFORMATION(ctypes.Structure):
- _fields_ = [
- ("TokenAppContainer", PSID),
- ]
-
-
-PTOKEN_APPCONTAINER_INFORMATION = ctypes.POINTER(TOKEN_APPCONTAINER_INFORMATION)
-
-# SECURITY_ATTRIBUTES structure for CreateDirectoryW
-PSECURITY_DESCRIPTOR = ctypes.wintypes.LPVOID
-
-
-class SECURITY_ATTRIBUTES(ctypes.Structure):
- _fields_ = [
- ("nLength", ctypes.wintypes.DWORD),
- ("lpSecurityDescriptor", PSECURITY_DESCRIPTOR),
- ("bInheritHandle", ctypes.wintypes.BOOL),
- ]
-
-
-# win32 API functions, bound via ctypes.
-# NOTE: we do not use ctypes.windll. to avoid modifying its (global) function prototypes, which might affect
-# user's code.
-advapi32 = ctypes.WinDLL("advapi32")
-kernel32 = ctypes.WinDLL("kernel32")
-
-advapi32.ConvertSidToStringSidW.restype = ctypes.wintypes.BOOL
-advapi32.ConvertSidToStringSidW.argtypes = (
- PSID, # [in] PSID Sid
- ctypes.POINTER(ctypes.wintypes.LPWSTR), # [out] LPWSTR *StringSid
-)
-
-advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW.restype = ctypes.wintypes.BOOL
-advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW.argtypes = (
- ctypes.wintypes.LPCWSTR, # [in] LPCWSTR StringSecurityDescriptor
- ctypes.wintypes.DWORD, # [in] DWORD StringSDRevision
- ctypes.POINTER(PSECURITY_DESCRIPTOR), # [out] PSECURITY_DESCRIPTOR *SecurityDescriptor
- ctypes.wintypes.PULONG, # [out] PULONG SecurityDescriptorSize
-)
-
-advapi32.GetTokenInformation.restype = ctypes.wintypes.BOOL
-advapi32.GetTokenInformation.argtypes = (
- ctypes.wintypes.HANDLE, # [in] HANDLE TokenHandle
- ctypes.c_int, # [in] TOKEN_INFORMATION_CLASS TokenInformationClass
- ctypes.wintypes.LPVOID, # [out, optional] LPVOID TokenInformation
- ctypes.wintypes.DWORD, # [in] DWORD TokenInformationLength
- ctypes.wintypes.PDWORD, # [out] PDWORD ReturnLength
-)
-
-kernel32.CloseHandle.restype = ctypes.wintypes.BOOL
-kernel32.CloseHandle.argtypes = (
- ctypes.wintypes.HANDLE, # [in] HANDLE hObject
-)
-
-kernel32.CreateDirectoryW.restype = ctypes.wintypes.BOOL
-kernel32.CreateDirectoryW.argtypes = (
- ctypes.wintypes.LPCWSTR, # [in] LPCWSTR lpPathName
- ctypes.POINTER(SECURITY_ATTRIBUTES), # [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes
-)
-
-kernel32.FormatMessageW.restype = ctypes.wintypes.DWORD
-kernel32.FormatMessageW.argtypes = (
- ctypes.wintypes.DWORD, # [in] DWORD dwFlags
- ctypes.wintypes.LPCVOID, # [in, optional] LPCVOID lpSource
- ctypes.wintypes.DWORD, # [in] DWORD dwMessageId
- ctypes.wintypes.DWORD, # [in] DWORD dwLanguageId
- ctypes.wintypes.LPWSTR, # [out] LPWSTR lpBuffer
- ctypes.wintypes.DWORD, # [in] DWORD nSize
- ctypes.wintypes.LPVOID, # [in, optional] va_list *Arguments
-)
-
-kernel32.GetCurrentProcess.restype = ctypes.wintypes.HANDLE
-# kernel32.GetCurrentProcess has no arguments
-
-kernel32.GetLastError.restype = ctypes.wintypes.DWORD
-# kernel32.GetLastError has no arguments
-
-kernel32.LocalFree.restype = ctypes.wintypes.BOOL
-kernel32.LocalFree.argtypes = (
- ctypes.wintypes.HLOCAL, # [in] _Frees_ptr_opt_ HLOCAL hMem
-)
-
-kernel32.OpenProcessToken.restype = ctypes.wintypes.BOOL
-kernel32.OpenProcessToken.argtypes = (
- ctypes.wintypes.HANDLE, # [in] HANDLE ProcessHandle
- ctypes.wintypes.DWORD, # [in] DWORD DesiredAccess
- ctypes.wintypes.PHANDLE, # [out] PHANDLE TokenHandle
-)
-
-
-def _win_error_to_message(error_code):
- """
- Convert win32 error code to message.
- """
- message_wstr = ctypes.wintypes.LPWSTR(None)
- ret = kernel32.FormatMessageW(
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- None, # lpSource
- error_code, # dwMessageId
- 0x400, # dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
- ctypes.cast(
- ctypes.byref(message_wstr),
- ctypes.wintypes.LPWSTR,
- ), # pointer to LPWSTR due to FORMAT_MESSAGE_ALLOCATE_BUFFER; needs to be cast to LPWSTR
- 64, # due to FORMAT_MESSAGE_ALLOCATE_BUFFER, this is minimum number of characters to allocate
- None,
- )
- if ret == 0:
- return None
-
- message = message_wstr.value
- kernel32.LocalFree(message_wstr)
-
- # Strip trailing CR/LF.
- if message:
- message = message.strip()
- return message
-
-
-def _get_process_sid(token_information_class):
- """
- Obtain the SID from the current process by the given token information class.
-
- Args:
- token_information_class: Token information class identifying the SID that we're
- interested in. Only TokenUser and TokenAppContainerSid are supported.
-
- Returns: SID (if it could be fetched) or None if not available or on error.
- """
- process_token = ctypes.wintypes.HANDLE(INVALID_HANDLE)
-
- try:
- # Get access token for the current process
- ret = kernel32.OpenProcessToken(
- kernel32.GetCurrentProcess(),
- TOKEN_QUERY,
- ctypes.pointer(process_token),
- )
- if ret == 0:
- error_code = kernel32.GetLastError()
- raise RuntimeError(f"Failed to open process token! Error code: 0x{error_code:X}")
-
- # Query buffer size for sid
- token_info_size = ctypes.wintypes.DWORD(0)
-
- ret = advapi32.GetTokenInformation(
- process_token,
- token_information_class,
- None,
- 0,
- ctypes.byref(token_info_size),
- )
-
- # We expect this call to fail with ERROR_INSUFFICIENT_BUFFER
- if ret == 0:
- error_code = kernel32.GetLastError()
- if error_code != ERROR_INSUFFICIENT_BUFFER:
- raise RuntimeError(f"Failed to query token information buffer size! Error code: 0x{error_code:X}")
- else:
- raise RuntimeError("Unexpected return value from GetTokenInformation!")
-
- # Allocate buffer
- token_info = ctypes.create_string_buffer(token_info_size.value)
- ret = advapi32.GetTokenInformation(
- process_token,
- token_information_class,
- token_info,
- token_info_size,
- ctypes.byref(token_info_size),
- )
- if ret == 0:
- error_code = kernel32.GetLastError()
- raise RuntimeError(f"Failed to query token information! Error code: 0x{error_code:X}")
-
- # Convert SID to string
- # Technically, when UserToken is used, we need to pass user_info->User.Sid,
- # but as they are at the beginning of the buffer, just pass the buffer instead...
- sid_wstr = ctypes.wintypes.LPWSTR(None)
-
- if token_information_class == TokenUser:
- sid = ctypes.cast(token_info, PTOKEN_USER).contents.User.Sid
- elif token_information_class == TokenAppContainerSid:
- sid = ctypes.cast(token_info, PTOKEN_APPCONTAINER_INFORMATION).contents.TokenAppContainer
- else:
- raise ValueError(f"Unexpected token information class: {token_information_class}")
-
- ret = advapi32.ConvertSidToStringSidW(sid, ctypes.pointer(sid_wstr))
- if ret == 0:
- error_code = kernel32.GetLastError()
- raise RuntimeError(f"Failed to convert SID to string! Error code: 0x{error_code:X}")
- sid = sid_wstr.value
- kernel32.LocalFree(sid_wstr)
- except Exception:
- sid = None
- finally:
- # Close the process token
- if process_token.value != INVALID_HANDLE:
- kernel32.CloseHandle(process_token)
-
- return sid
-
-
-# Get and cache current user's SID
-_user_sid = _get_process_sid(TokenUser)
-
-# Get and cache current app container's SID (if any)
-_app_container_sid = _get_process_sid(TokenAppContainerSid)
-
-
-def secure_mkdir(dir_name):
- """
- Replacement for mkdir that limits the access to created directory to current user.
- """
-
- # Create security descriptor
- # Prefer actual user SID over SID S-1-3-4 (current owner), because at the time of writing, Wine does not properly
- # support the latter.
- user_sid = _user_sid or "S-1-3-4"
-
- # DACL descriptor (D):
- # ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute)
- # - ace_type = SDDL_ACCESS_ALLOWED (A)
- # - rights = SDDL_FILE_ALL (FA)
- # - account_sid = current user (queried SID)
- security_desc_str = f"D:(A;;FA;;;{user_sid})"
-
- # If the app is running within an AppContainer, the app container SID has to be added to the DACL.
- # Otherwise our process will not have access to the temp dir.
- #
- # Quoting https://learn.microsoft.com/en-us/windows/win32/secauthz/implementing-an-appcontainer:
- # "The AppContainer SID is a persistent unique identifier for the appcontainer. ...
- # To allow a single AppContainer to access a resource, add its AppContainerSID to the ACL for that resource."
- if _app_container_sid:
- security_desc_str += f"(A;;FA;;;{_app_container_sid})"
- security_desc = ctypes.wintypes.LPVOID(None)
-
- ret = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW(
- security_desc_str,
- SDDL_REVISION1,
- ctypes.byref(security_desc),
- None,
- )
- if ret == 0:
- error_code = kernel32.GetLastError()
- raise RuntimeError(
- f"Failed to create security descriptor! Error code: 0x{error_code:X}, "
- f"message: {_win_error_to_message(error_code)}"
- )
-
- security_attr = SECURITY_ATTRIBUTES()
- security_attr.nLength = ctypes.sizeof(SECURITY_ATTRIBUTES)
- security_attr.lpSecurityDescriptor = security_desc
- security_attr.bInheritHandle = False
-
- # Create directory
- ret = kernel32.CreateDirectoryW(
- dir_name,
- security_attr,
- )
- if ret == 0:
- # Call failed; store error code immediately, to avoid it being overwritten in cleanup below.
- error_code = kernel32.GetLastError()
-
- # Free security descriptor
- kernel32.LocalFree(security_desc)
-
- # Exit on succeess
- if ret != 0:
- return
-
- # Construct OSError from win error code
- error_message = _win_error_to_message(error_code)
-
- # Strip trailing dot to match error message from os.mkdir().
- if error_message and error_message[-1] == '.':
- error_message = error_message[:-1]
-
- raise OSError(
- None, # errno
- error_message, # strerror
- dir_name, # filename
- error_code, # winerror
- None, # filename2
- )
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/qt.py b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/qt.py
deleted file mode 100755
index b406677..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/qt.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-# -----------------------------------------------------------------------------
-
-import os
-import importlib
-import atexit
-
-# Helper for ensuring that only one Qt bindings package is registered at run-time via run-time hooks.
-_registered_qt_bindings = None
-
-
-def ensure_single_qt_bindings_package(qt_bindings):
- global _registered_qt_bindings
- if _registered_qt_bindings is not None:
- raise RuntimeError(
- f"Cannot execute run-time hook for {qt_bindings!r} because run-time hook for {_registered_qt_bindings!r} "
- "has been run before, and PyInstaller-frozen applications do not support multiple Qt bindings in the same "
- "application!"
- )
- _registered_qt_bindings = qt_bindings
-
-
-# Helper for relocating Qt prefix via embedded qt.conf file.
-_QT_CONF_FILENAME = ":/qt/etc/qt.conf"
-
-_QT_CONF_RESOURCE_NAME = (
- # qt
- b"\x00\x02"
- b"\x00\x00\x07\x84"
- b"\x00\x71"
- b"\x00\x74"
- # etc
- b"\x00\x03"
- b"\x00\x00\x6c\xa3"
- b"\x00\x65"
- b"\x00\x74\x00\x63"
- # qt.conf
- b"\x00\x07"
- b"\x08\x74\xa6\xa6"
- b"\x00\x71"
- b"\x00\x74\x00\x2e\x00\x63\x00\x6f\x00\x6e\x00\x66"
-)
-
-_QT_CONF_RESOURCE_STRUCT = (
- # :
- b"\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01"
- # :/qt
- b"\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02"
- # :/qt/etc
- b"\x00\x00\x00\x0a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03"
- # :/qt/etc/qt.conf
- b"\x00\x00\x00\x16\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00"
-)
-
-
-def create_embedded_qt_conf(qt_bindings, prefix_path):
- # The QtCore module might be unavailable if we collected just the top-level binding package (e.g., PyQt5) without
- # any of its submodules. Since this helper is called from run-time hook for the binding package, we need to handle
- # that scenario here.
- try:
- QtCore = importlib.import_module(qt_bindings + ".QtCore")
- except ImportError:
- return
-
- # No-op if embedded qt.conf already exists
- if QtCore.QFile.exists(_QT_CONF_FILENAME):
- return
-
- # Create qt.conf file that relocates Qt prefix.
- # NOTE: paths should use POSIX-style forward slashes as separator, even on Windows.
- if os.sep == '\\':
- prefix_path = prefix_path.replace(os.sep, '/')
-
- qt_conf = f"[Paths]\nPrefix = {prefix_path}\n"
- if os.name == 'nt' and qt_bindings in {"PySide2", "PySide6"}:
- # PySide PyPI wheels on Windows set LibraryExecutablesPath to PrefixPath
- qt_conf += f"LibraryExecutables = {prefix_path}"
-
- # Encode the contents; in Qt5, QSettings uses Latin1 encoding, in Qt6, it uses UTF8.
- if qt_bindings in {"PySide2", "PyQt5"}:
- qt_conf = qt_conf.encode("latin1")
- else:
- qt_conf = qt_conf.encode("utf-8")
-
- # Prepend data size (32-bit integer, big endian)
- qt_conf_size = len(qt_conf)
- qt_resource_data = qt_conf_size.to_bytes(4, 'big') + qt_conf
-
- # Register
- succeeded = QtCore.qRegisterResourceData(
- 0x01,
- _QT_CONF_RESOURCE_STRUCT,
- _QT_CONF_RESOURCE_NAME,
- qt_resource_data,
- )
- if not succeeded:
- return # Tough luck
-
- # Unregister the resource at exit, to ensure that the registered resource on Qt/C++ side does not outlive the
- # `_qt_resource_data` python variable and its data buffer. This also adds a reference to the `_qt_resource_data`,
- # which conveniently ensures that the data is not garbage collected before we perform the cleanup (otherwise garbage
- # collector might kick in at any time after we exit this helper function, and `qRegisterResourceData` does not seem
- # to make a copy of the data!).
- atexit.register(
- QtCore.qUnregisterResourceData,
- 0x01,
- _QT_CONF_RESOURCE_STRUCT,
- _QT_CONF_RESOURCE_NAME,
- qt_resource_data,
- )
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/tempfile.py b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/tempfile.py
deleted file mode 100755
index da2307b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/_pyi_rth_utils/tempfile.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-# -----------------------------------------------------------------------------
-
-import os
-import sys
-import errno
-import tempfile
-
-# Helper for creating temporary directories with access restricted to the user running the process.
-# On POSIX systems, this is already achieved by `tempfile.mkdtemp`, which uses 0o700 permissions mask.
-# On Windows, however, the POSIX permissions semantics have no effect, and we need to provide our own implementation
-# that restricts the access by passing appropriate security attributes to the `CreateDirectory` function.
-
-if os.name == 'nt':
- from . import _win32
-
- def secure_mkdtemp(suffix=None, prefix=None, dir=None):
- """
- Windows-specific replacement for `tempfile.mkdtemp` that restricts access to the user running the process.
- Based on `mkdtemp` implementation from python 3.11 stdlib.
- """
-
- prefix, suffix, dir, output_type = tempfile._sanitize_params(prefix, suffix, dir)
-
- names = tempfile._get_candidate_names()
- if output_type is bytes:
- names = map(os.fsencode, names)
-
- for seq in range(tempfile.TMP_MAX):
- name = next(names)
- file = os.path.join(dir, prefix + name + suffix)
- sys.audit("tempfile.mkdtemp", file)
- try:
- _win32.secure_mkdir(file)
- except FileExistsError:
- continue # try again
- except PermissionError:
- # This exception is thrown when a directory with the chosen name already exists on windows.
- if (os.name == 'nt' and os.path.isdir(dir) and os.access(dir, os.W_OK)):
- continue
- else:
- raise
- return file
-
- raise FileExistsError(errno.EEXIST, "No usable temporary directory name found")
-
-else:
- secure_mkdtemp = tempfile.mkdtemp
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/pyi_splash.py b/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/pyi_splash.py
deleted file mode 100755
index 3eb5719..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/fake-modules/pyi_splash.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-# -----------------------------------------------------------------------------
-
-# This module is not a "fake module" in the classical sense, but a real module that can be imported. It acts as an RPC
-# interface for the functions of the bootloader.
-"""
-This module connects to the bootloader to send messages to the splash screen.
-
-It is intended to act as a RPC interface for the functions provided by the bootloader, such as displaying text or
-closing. This makes the users python program independent of how the communication with the bootloader is implemented,
-since a consistent API is provided.
-
-To connect to the bootloader, it connects to a local tcp socket whose port is passed through the environment variable
-'_PYI_SPLASH_IPC'. The bootloader creates a server socket and accepts every connection request. Since the os-module,
-which is needed to request the environment variable, is not available at boot time, the module does not establish the
-connection until initialization.
-
-The protocol by which the Python interpreter communicates with the bootloader is implemented in this module.
-
-This module does not support reloads while the splash screen is displayed, i.e. it cannot be reloaded (such as by
-importlib.reload), because the splash screen closes automatically when the connection to this instance of the module
-is lost.
-"""
-
-import atexit
-import os
-
-# Import the _socket module instead of the socket module. All used functions to connect to the ipc system are
-# provided by the C module and the users program does not necessarily need to include the socket module and all
-# required modules it uses.
-import _socket
-
-__all__ = ["CLOSE_CONNECTION", "FLUSH_CHARACTER", "is_alive", "close", "update_text"]
-
-try:
- # The user might have excluded logging from imports.
- import logging as _logging
-except ImportError:
- _logging = None
-
-try:
- # The user might have excluded functools from imports.
- from functools import update_wrapper
-except ImportError:
- update_wrapper = None
-
-
-# Utility
-def _log(level, msg, *args, **kwargs):
- """
- Conditional wrapper around logging module. If the user excluded logging from the imports or it was not imported,
- this function should handle it and avoid using the logger.
- """
- if _logging:
- logger = _logging.getLogger(__name__)
- logger.log(level, msg, *args, **kwargs)
-
-
-# These constants define single characters which are needed to send commands to the bootloader. Those constants are
-# also set in the tcl script.
-CLOSE_CONNECTION = b'\x04' # ASCII End-of-Transmission character
-FLUSH_CHARACTER = b'\x0D' # ASCII Carriage Return character
-
-# Module internal variables
-_initialized = False
-# Keep these variables always synchronized
-_ipc_socket_closed = True
-_ipc_socket = _socket.socket(_socket.AF_INET, _socket.SOCK_STREAM)
-
-
-def _initialize():
- """
- Initialize this module
-
- :return:
- """
- global _initialized, _ipc_socket_closed
-
- # If _ipc_port is zero, the splash screen is intentionally suppressed (for example, we are in sub-process spawned
- # via sys.executable). Mark the splash screen as initialized, but do not attempt to connect.
- if _ipc_port == 0:
- _initialized = True
- return
-
- # Attempt to connect to the splash screen process.
- try:
- _ipc_socket.connect(("127.0.0.1", _ipc_port))
- _ipc_socket_closed = False
-
- _initialized = True
- _log(10, "IPC connection to the splash screen was successfully established.") # log-level: debug
- except OSError as err:
- raise ConnectionError(f"Could not connect to TCP port {_ipc_port}.") from err
-
-
-# We expect a splash screen from the bootloader, but if _PYI_SPLASH_IPC is not set, the module cannot connect to it.
-# _PYI_SPLASH_IPC being set to zero indicates that splash screen should be (gracefully) suppressed; i.e., the calls
-# in this module should become no-op without generating warning messages.
-try:
- _ipc_port = int(os.environ['_PYI_SPLASH_IPC'])
- del os.environ['_PYI_SPLASH_IPC']
- # Initialize the connection upon importing this module. This will establish a connection to the bootloader's TCP
- # server socket.
- _initialize()
-except (KeyError, ValueError):
- # log-level: warning
- _log(
- 30,
- "The environment does not allow connecting to the splash screen. Did bootloader fail to initialize it?",
- exc_info=True,
- )
-except ConnectionError:
- # log-level: error
- _log(40, "Failed to connect to the bootloader's IPC server!", exc_info=True)
-
-
-def _check_connection(func):
- """
- Utility decorator for checking whether the function should be executed.
-
- The wrapped function may raise a ConnectionError if the module was not initialized correctly.
- """
- def wrapper(*args, **kwargs):
- """
- Executes the wrapped function if the environment allows it.
-
- That is, if the connection to to bootloader has not been closed and the module is initialized.
-
- :raises RuntimeError: if the module was not initialized correctly.
- """
- if _initialized and _ipc_socket_closed:
- if _ipc_port != 0:
- _log(10, "Connection to splash screen has already been closed.") # log-level: debug
- return
- elif not _initialized:
- raise RuntimeError("This module is not initialized; did it fail to load?")
-
- return func(*args, **kwargs)
-
- if update_wrapper:
- # For runtime introspection
- update_wrapper(wrapper, func)
-
- return wrapper
-
-
-@_check_connection
-def _send_command(cmd, args=None):
- """
- Send the command followed by args to the splash screen.
-
- :param str cmd: The command to send. All command have to be defined as procedures in the tcl splash screen script.
- :param list[str] args: All arguments to send to the receiving function
- """
- if args is None:
- args = []
-
- full_cmd = "%s(%s)" % (cmd, " ".join(args))
- try:
- _ipc_socket.sendall(full_cmd.encode("utf-8") + FLUSH_CHARACTER)
- except OSError as err:
- raise ConnectionError(f"Unable to send command {full_cmd!r} to the bootloader") from err
-
-
-def is_alive():
- """
- Indicates whether the module can be used.
-
- Returns False if the module is either not initialized or was disabled by closing the splash screen. Otherwise,
- the module should be usable.
- """
- return _initialized and not _ipc_socket_closed
-
-
-@_check_connection
-def update_text(msg: str):
- """
- Updates the text on the splash screen window.
-
- :param str msg: the text to be displayed
- :raises ConnectionError: If the OS fails to write to the socket.
- :raises RuntimeError: If the module is not initialized.
- """
- _send_command("update_text", [msg])
-
-
-def close():
- """
- Close the connection to the ipc tcp server socket.
-
- This will close the splash screen and renders this module unusable. After this function is called, no connection
- can be opened to the splash screen again and all functions in this module become unusable.
- """
- global _ipc_socket_closed
- if _initialized and not _ipc_socket_closed:
- _ipc_socket.sendall(CLOSE_CONNECTION)
- _ipc_socket.close()
- _ipc_socket_closed = True
-
-
-@atexit.register
-def _exit():
- close()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index d552c2b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.Image.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.Image.cpython-312.pyc
deleted file mode 100644
index 099a5a5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.Image.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.ImageFilter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.ImageFilter.cpython-312.pyc
deleted file mode 100644
index ea6a2ad..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.ImageFilter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.SpiderImagePlugin.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.SpiderImagePlugin.cpython-312.pyc
deleted file mode 100644
index 9871f23..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.SpiderImagePlugin.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.cpython-312.pyc
deleted file mode 100644
index 548667f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PIL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QAxContainer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QAxContainer.cpython-312.pyc
deleted file mode 100644
index 92dcd0f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QAxContainer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qsci.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qsci.cpython-312.pyc
deleted file mode 100644
index 52e29c6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qsci.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt.cpython-312.pyc
deleted file mode 100644
index fd8f2ee..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DAnimation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DAnimation.cpython-312.pyc
deleted file mode 100644
index dfd6796..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DAnimation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DCore.cpython-312.pyc
deleted file mode 100644
index fac46d3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DExtras.cpython-312.pyc
deleted file mode 100644
index 0b09b94..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DInput.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DInput.cpython-312.pyc
deleted file mode 100644
index edd88c7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DInput.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DLogic.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DLogic.cpython-312.pyc
deleted file mode 100644
index a52f6c7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DLogic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DRender.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DRender.cpython-312.pyc
deleted file mode 100644
index 47ef2b0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.Qt3DRender.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtBluetooth.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtBluetooth.cpython-312.pyc
deleted file mode 100644
index 45c8d46..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtBluetooth.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtChart.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtChart.cpython-312.pyc
deleted file mode 100644
index 655f6dd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtChart.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtCore.cpython-312.pyc
deleted file mode 100644
index b86caea..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDBus.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDBus.cpython-312.pyc
deleted file mode 100644
index 5a20807..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDBus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDataVisualization.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDataVisualization.cpython-312.pyc
deleted file mode 100644
index 87d19b0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDataVisualization.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDesigner.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDesigner.cpython-312.pyc
deleted file mode 100644
index 928ce75..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtDesigner.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtGui.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtGui.cpython-312.pyc
deleted file mode 100644
index ac716eb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtGui.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtHelp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtHelp.cpython-312.pyc
deleted file mode 100644
index 010b446..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtHelp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtLocation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtLocation.cpython-312.pyc
deleted file mode 100644
index 24e3a9f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtLocation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMacExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMacExtras.cpython-312.pyc
deleted file mode 100644
index 92e6c9d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMacExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimedia.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimedia.cpython-312.pyc
deleted file mode 100644
index 4d3a9df..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimedia.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimediaWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimediaWidgets.cpython-312.pyc
deleted file mode 100644
index 9009ac6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtMultimediaWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetwork.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetwork.cpython-312.pyc
deleted file mode 100644
index c6f35ac..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetwork.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetworkAuth.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetworkAuth.cpython-312.pyc
deleted file mode 100644
index 0eb6837..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNetworkAuth.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNfc.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNfc.cpython-312.pyc
deleted file mode 100644
index 3e15241..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtNfc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtOpenGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtOpenGL.cpython-312.pyc
deleted file mode 100644
index 038edba..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtOpenGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPositioning.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPositioning.cpython-312.pyc
deleted file mode 100644
index f6a5213..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPositioning.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPrintSupport.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPrintSupport.cpython-312.pyc
deleted file mode 100644
index 357940f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPrintSupport.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPurchasing.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPurchasing.cpython-312.pyc
deleted file mode 100644
index 7daf5c5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtPurchasing.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQml.cpython-312.pyc
deleted file mode 100644
index cb653b1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick.cpython-312.pyc
deleted file mode 100644
index 956ada7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick3D.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick3D.cpython-312.pyc
deleted file mode 100644
index a9d1dff..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuick3D.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuickWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuickWidgets.cpython-312.pyc
deleted file mode 100644
index 87fabd9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtQuickWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtRemoteObjects.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtRemoteObjects.cpython-312.pyc
deleted file mode 100644
index 5149d1f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtRemoteObjects.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtScript.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtScript.cpython-312.pyc
deleted file mode 100644
index 68371af..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtScript.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSensors.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSensors.cpython-312.pyc
deleted file mode 100644
index c49a4a5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSensors.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSerialPort.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSerialPort.cpython-312.pyc
deleted file mode 100644
index 1737607..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSerialPort.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSql.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSql.cpython-312.pyc
deleted file mode 100644
index 79c8078..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSql.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSvg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSvg.cpython-312.pyc
deleted file mode 100644
index 5994576..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtSvg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtTest.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtTest.cpython-312.pyc
deleted file mode 100644
index b20932b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtTest.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtTextToSpeech.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtTextToSpeech.cpython-312.pyc
deleted file mode 100644
index 130d19e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtTextToSpeech.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebChannel.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebChannel.cpython-312.pyc
deleted file mode 100644
index 2f0321e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebChannel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngine.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngine.cpython-312.pyc
deleted file mode 100644
index b55d2e8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngine.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineCore.cpython-312.pyc
deleted file mode 100644
index 70cb339..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineWidgets.cpython-312.pyc
deleted file mode 100644
index e53c869..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebEngineWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKit.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKit.cpython-312.pyc
deleted file mode 100644
index 8caa556..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKit.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKitWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKitWidgets.cpython-312.pyc
deleted file mode 100644
index bc22a4a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebKitWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebSockets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebSockets.cpython-312.pyc
deleted file mode 100644
index 24a7063..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWebSockets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWidgets.cpython-312.pyc
deleted file mode 100644
index 3c2a6a7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWinExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWinExtras.cpython-312.pyc
deleted file mode 100644
index fab31d1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtWinExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtX11Extras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtX11Extras.cpython-312.pyc
deleted file mode 100644
index 591f065..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtX11Extras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtXml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtXml.cpython-312.pyc
deleted file mode 100644
index f7ee8ad..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtXml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtXmlPatterns.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtXmlPatterns.cpython-312.pyc
deleted file mode 100644
index 6e40073..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.QtXmlPatterns.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.cpython-312.pyc
deleted file mode 100644
index 11449e0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.uic.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.uic.cpython-312.pyc
deleted file mode 100644
index 9a0e1b9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt5.uic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QAxContainer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QAxContainer.cpython-312.pyc
deleted file mode 100644
index 7568a6f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QAxContainer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qsci.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qsci.cpython-312.pyc
deleted file mode 100644
index dec5ef5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qsci.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DAnimation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DAnimation.cpython-312.pyc
deleted file mode 100644
index 54acf67..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DAnimation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DCore.cpython-312.pyc
deleted file mode 100644
index 5c59a1d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DExtras.cpython-312.pyc
deleted file mode 100644
index 3453bb5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DInput.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DInput.cpython-312.pyc
deleted file mode 100644
index 24b9f4a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DInput.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DLogic.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DLogic.cpython-312.pyc
deleted file mode 100644
index 5c29206..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DLogic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DRender.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DRender.cpython-312.pyc
deleted file mode 100644
index d5995fb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.Qt3DRender.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtBluetooth.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtBluetooth.cpython-312.pyc
deleted file mode 100644
index f971447..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtBluetooth.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtCharts.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtCharts.cpython-312.pyc
deleted file mode 100644
index b3be33f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtCharts.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtCore.cpython-312.pyc
deleted file mode 100644
index 0168209..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDBus.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDBus.cpython-312.pyc
deleted file mode 100644
index 04d299b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDBus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDataVisualization.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDataVisualization.cpython-312.pyc
deleted file mode 100644
index d3114d3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDataVisualization.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDesigner.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDesigner.cpython-312.pyc
deleted file mode 100644
index f1ba0d7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtDesigner.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGraphs.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGraphs.cpython-312.pyc
deleted file mode 100644
index f16f62d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGraphs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGraphsWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGraphsWidgets.cpython-312.pyc
deleted file mode 100644
index 88476fe..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGraphsWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGui.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGui.cpython-312.pyc
deleted file mode 100644
index bbf8979..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtGui.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtHelp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtHelp.cpython-312.pyc
deleted file mode 100644
index a885b2b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtHelp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimedia.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimedia.cpython-312.pyc
deleted file mode 100644
index 0a5ef79..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimedia.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimediaWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimediaWidgets.cpython-312.pyc
deleted file mode 100644
index ba3a0a3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtMultimediaWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetwork.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetwork.cpython-312.pyc
deleted file mode 100644
index 10a25e7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetwork.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetworkAuth.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetworkAuth.cpython-312.pyc
deleted file mode 100644
index 3014316..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNetworkAuth.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNfc.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNfc.cpython-312.pyc
deleted file mode 100644
index df6f5f7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtNfc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGL.cpython-312.pyc
deleted file mode 100644
index 3cf394e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGLWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGLWidgets.cpython-312.pyc
deleted file mode 100644
index 2b1f7f9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtOpenGLWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPdf.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPdf.cpython-312.pyc
deleted file mode 100644
index a4f56ab..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPdf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPdfWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPdfWidgets.cpython-312.pyc
deleted file mode 100644
index 74024ef..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPdfWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPositioning.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPositioning.cpython-312.pyc
deleted file mode 100644
index 8dfe7b0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPositioning.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPrintSupport.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPrintSupport.cpython-312.pyc
deleted file mode 100644
index c8315c1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtPrintSupport.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQml.cpython-312.pyc
deleted file mode 100644
index 690a7c8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick.cpython-312.pyc
deleted file mode 100644
index a2bb563..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick3D.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick3D.cpython-312.pyc
deleted file mode 100644
index 9f8662d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuick3D.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuickWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuickWidgets.cpython-312.pyc
deleted file mode 100644
index bdddded..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtQuickWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtRemoteObjects.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtRemoteObjects.cpython-312.pyc
deleted file mode 100644
index 3eaf50f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtRemoteObjects.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSensors.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSensors.cpython-312.pyc
deleted file mode 100644
index 97a423b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSensors.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSerialPort.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSerialPort.cpython-312.pyc
deleted file mode 100644
index 914eb9d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSerialPort.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSpatialAudio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSpatialAudio.cpython-312.pyc
deleted file mode 100644
index 75365c1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSpatialAudio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSql.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSql.cpython-312.pyc
deleted file mode 100644
index 1065ea9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSql.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtStateMachine.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtStateMachine.cpython-312.pyc
deleted file mode 100644
index 3a4c57a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtStateMachine.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvg.cpython-312.pyc
deleted file mode 100644
index a062c39..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvgWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvgWidgets.cpython-312.pyc
deleted file mode 100644
index 3f9c82d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtSvgWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtTest.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtTest.cpython-312.pyc
deleted file mode 100644
index 1c520b5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtTest.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtTextToSpeech.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtTextToSpeech.cpython-312.pyc
deleted file mode 100644
index 4c40ad9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtTextToSpeech.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebChannel.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebChannel.cpython-312.pyc
deleted file mode 100644
index e07b9f6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebChannel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineCore.cpython-312.pyc
deleted file mode 100644
index 97603a7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineQuick.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineQuick.cpython-312.pyc
deleted file mode 100644
index b86d5bb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineQuick.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineWidgets.cpython-312.pyc
deleted file mode 100644
index 10d22b2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebEngineWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebSockets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebSockets.cpython-312.pyc
deleted file mode 100644
index c0a6599..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWebSockets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWidgets.cpython-312.pyc
deleted file mode 100644
index c319353..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtXml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtXml.cpython-312.pyc
deleted file mode 100644
index df5d9e0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.QtXml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.cpython-312.pyc
deleted file mode 100644
index 40d9ada..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.uic.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.uic.cpython-312.pyc
deleted file mode 100644
index 399c3e6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PyQt6.uic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DAnimation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DAnimation.cpython-312.pyc
deleted file mode 100644
index baebc01..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DAnimation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DCore.cpython-312.pyc
deleted file mode 100644
index 0f4dbe2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DExtras.cpython-312.pyc
deleted file mode 100644
index defc00b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DInput.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DInput.cpython-312.pyc
deleted file mode 100644
index 90a7643..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DInput.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DLogic.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DLogic.cpython-312.pyc
deleted file mode 100644
index 0677e4c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DLogic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DRender.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DRender.cpython-312.pyc
deleted file mode 100644
index 2f25f26..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qt3DRender.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtAxContainer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtAxContainer.cpython-312.pyc
deleted file mode 100644
index 19c4a7d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtAxContainer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtCharts.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtCharts.cpython-312.pyc
deleted file mode 100644
index 9eaf2cf..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtCharts.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtConcurrent.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtConcurrent.cpython-312.pyc
deleted file mode 100644
index a65d9e2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtConcurrent.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtCore.cpython-312.pyc
deleted file mode 100644
index f643d87..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtDataVisualization.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtDataVisualization.cpython-312.pyc
deleted file mode 100644
index e9ed740..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtDataVisualization.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtGui.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtGui.cpython-312.pyc
deleted file mode 100644
index 82ec512..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtGui.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtHelp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtHelp.cpython-312.pyc
deleted file mode 100644
index 15da58a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtHelp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtLocation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtLocation.cpython-312.pyc
deleted file mode 100644
index da9c7be..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtLocation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMacExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMacExtras.cpython-312.pyc
deleted file mode 100644
index 5a1d27f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMacExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimedia.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimedia.cpython-312.pyc
deleted file mode 100644
index f0a35c7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimedia.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimediaWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimediaWidgets.cpython-312.pyc
deleted file mode 100644
index 4355946..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtMultimediaWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtNetwork.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtNetwork.cpython-312.pyc
deleted file mode 100644
index 30f12b8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtNetwork.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGL.cpython-312.pyc
deleted file mode 100644
index 10c713d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGLFunctions.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGLFunctions.cpython-312.pyc
deleted file mode 100644
index b6517f1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtOpenGLFunctions.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtPositioning.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtPositioning.cpython-312.pyc
deleted file mode 100644
index b763562..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtPositioning.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtPrintSupport.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtPrintSupport.cpython-312.pyc
deleted file mode 100644
index 1daa72c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtPrintSupport.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQml.cpython-312.pyc
deleted file mode 100644
index 6a4dd33..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuick.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuick.cpython-312.pyc
deleted file mode 100644
index 00c9ad4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuick.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickControls2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickControls2.cpython-312.pyc
deleted file mode 100644
index e90146c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickControls2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickWidgets.cpython-312.pyc
deleted file mode 100644
index 3977383..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtQuickWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtRemoteObjects.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtRemoteObjects.cpython-312.pyc
deleted file mode 100644
index 60cf80e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtRemoteObjects.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScript.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScript.cpython-312.pyc
deleted file mode 100644
index c53cf9e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScript.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScriptTools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScriptTools.cpython-312.pyc
deleted file mode 100644
index 3506ba0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScriptTools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScxml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScxml.cpython-312.pyc
deleted file mode 100644
index 3f6fd02..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtScxml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSensors.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSensors.cpython-312.pyc
deleted file mode 100644
index 8c80ca8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSensors.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSerialPort.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSerialPort.cpython-312.pyc
deleted file mode 100644
index 53b15e5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSerialPort.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSql.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSql.cpython-312.pyc
deleted file mode 100644
index 4df6fad..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSql.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSvg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSvg.cpython-312.pyc
deleted file mode 100644
index e3c18fb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtSvg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtTest.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtTest.cpython-312.pyc
deleted file mode 100644
index b771567..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtTest.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtTextToSpeech.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtTextToSpeech.cpython-312.pyc
deleted file mode 100644
index e0e14cf..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtTextToSpeech.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtUiTools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtUiTools.cpython-312.pyc
deleted file mode 100644
index 5c471e9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtUiTools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebChannel.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebChannel.cpython-312.pyc
deleted file mode 100644
index d4e41af..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebChannel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngine.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngine.cpython-312.pyc
deleted file mode 100644
index 45f19b4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngine.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineCore.cpython-312.pyc
deleted file mode 100644
index be17403..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineWidgets.cpython-312.pyc
deleted file mode 100644
index 9d66500..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebEngineWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKit.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKit.cpython-312.pyc
deleted file mode 100644
index 2062fe5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKit.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKitWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKitWidgets.cpython-312.pyc
deleted file mode 100644
index 617eb70..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebKitWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebSockets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebSockets.cpython-312.pyc
deleted file mode 100644
index 9b05f2e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWebSockets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWidgets.cpython-312.pyc
deleted file mode 100644
index aef10a0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWinExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWinExtras.cpython-312.pyc
deleted file mode 100644
index 16763df..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtWinExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtX11Extras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtX11Extras.cpython-312.pyc
deleted file mode 100644
index 3b27074..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtX11Extras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtXml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtXml.cpython-312.pyc
deleted file mode 100644
index 4eae8b5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtXml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtXmlPatterns.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtXmlPatterns.cpython-312.pyc
deleted file mode 100644
index 1072946..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.QtXmlPatterns.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qwt5.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qwt5.cpython-312.pyc
deleted file mode 100644
index 2dd27a3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.Qwt5.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.cpython-312.pyc
deleted file mode 100644
index 569b2fc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DAnimation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DAnimation.cpython-312.pyc
deleted file mode 100644
index 467079a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DAnimation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DCore.cpython-312.pyc
deleted file mode 100644
index b143744..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DExtras.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DExtras.cpython-312.pyc
deleted file mode 100644
index 7464403..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DExtras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DInput.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DInput.cpython-312.pyc
deleted file mode 100644
index ce6777b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DInput.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DLogic.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DLogic.cpython-312.pyc
deleted file mode 100644
index cd5b578..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DLogic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DRender.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DRender.cpython-312.pyc
deleted file mode 100644
index 776c591..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.Qt3DRender.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtAxContainer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtAxContainer.cpython-312.pyc
deleted file mode 100644
index 5af5e48..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtAxContainer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtBluetooth.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtBluetooth.cpython-312.pyc
deleted file mode 100644
index 27d5d1a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtBluetooth.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtCharts.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtCharts.cpython-312.pyc
deleted file mode 100644
index 1487806..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtCharts.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtConcurrent.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtConcurrent.cpython-312.pyc
deleted file mode 100644
index 91e184b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtConcurrent.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtCore.cpython-312.pyc
deleted file mode 100644
index bb88f97..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDBus.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDBus.cpython-312.pyc
deleted file mode 100644
index 92f970c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDBus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDataVisualization.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDataVisualization.cpython-312.pyc
deleted file mode 100644
index acf1911..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDataVisualization.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDesigner.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDesigner.cpython-312.pyc
deleted file mode 100644
index 09c8c8c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtDesigner.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGraphs.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGraphs.cpython-312.pyc
deleted file mode 100644
index 164820e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGraphs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGraphsWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGraphsWidgets.cpython-312.pyc
deleted file mode 100644
index bcb7e1a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGraphsWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGui.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGui.cpython-312.pyc
deleted file mode 100644
index 70fbf98..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtGui.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtHelp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtHelp.cpython-312.pyc
deleted file mode 100644
index 023e5bf..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtHelp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtHttpServer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtHttpServer.cpython-312.pyc
deleted file mode 100644
index 6d08aa9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtHttpServer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtLocation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtLocation.cpython-312.pyc
deleted file mode 100644
index 4a21fa0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtLocation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimedia.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimedia.cpython-312.pyc
deleted file mode 100644
index 4667b52..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimedia.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimediaWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimediaWidgets.cpython-312.pyc
deleted file mode 100644
index d076480..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtMultimediaWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNetwork.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNetwork.cpython-312.pyc
deleted file mode 100644
index 2d7f838..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNetwork.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNetworkAuth.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNetworkAuth.cpython-312.pyc
deleted file mode 100644
index d20d8bd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNetworkAuth.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNfc.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNfc.cpython-312.pyc
deleted file mode 100644
index 1b80596..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtNfc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGL.cpython-312.pyc
deleted file mode 100644
index 7f2fd6a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGLWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGLWidgets.cpython-312.pyc
deleted file mode 100644
index c4549dc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtOpenGLWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPdf.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPdf.cpython-312.pyc
deleted file mode 100644
index 48771c4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPdf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPdfWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPdfWidgets.cpython-312.pyc
deleted file mode 100644
index 5343bdd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPdfWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPositioning.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPositioning.cpython-312.pyc
deleted file mode 100644
index 663bc27..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPositioning.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPrintSupport.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPrintSupport.cpython-312.pyc
deleted file mode 100644
index 71887a1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtPrintSupport.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQml.cpython-312.pyc
deleted file mode 100644
index 0e69ee4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick.cpython-312.pyc
deleted file mode 100644
index be878ae..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick3D.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick3D.cpython-312.pyc
deleted file mode 100644
index f8d3894..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuick3D.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickControls2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickControls2.cpython-312.pyc
deleted file mode 100644
index a846dad..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickControls2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickWidgets.cpython-312.pyc
deleted file mode 100644
index 91410a2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtQuickWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtRemoteObjects.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtRemoteObjects.cpython-312.pyc
deleted file mode 100644
index 5757668..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtRemoteObjects.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtScxml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtScxml.cpython-312.pyc
deleted file mode 100644
index 6ed4f3c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtScxml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSensors.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSensors.cpython-312.pyc
deleted file mode 100644
index 5005b6d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSensors.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSerialBus.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSerialBus.cpython-312.pyc
deleted file mode 100644
index b1afa20..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSerialBus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSerialPort.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSerialPort.cpython-312.pyc
deleted file mode 100644
index 25c994c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSerialPort.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSpatialAudio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSpatialAudio.cpython-312.pyc
deleted file mode 100644
index ae11ba6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSpatialAudio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSql.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSql.cpython-312.pyc
deleted file mode 100644
index 20f80b0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSql.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtStateMachine.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtStateMachine.cpython-312.pyc
deleted file mode 100644
index 5992bd3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtStateMachine.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSvg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSvg.cpython-312.pyc
deleted file mode 100644
index 0e85c83..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSvg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSvgWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSvgWidgets.cpython-312.pyc
deleted file mode 100644
index e042dfa..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtSvgWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtTest.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtTest.cpython-312.pyc
deleted file mode 100644
index 6cb9185..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtTest.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtTextToSpeech.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtTextToSpeech.cpython-312.pyc
deleted file mode 100644
index 2460db7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtTextToSpeech.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtUiTools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtUiTools.cpython-312.pyc
deleted file mode 100644
index 1a024d1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtUiTools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebChannel.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebChannel.cpython-312.pyc
deleted file mode 100644
index 539ef63..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebChannel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineCore.cpython-312.pyc
deleted file mode 100644
index 45a5804..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineQuick.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineQuick.cpython-312.pyc
deleted file mode 100644
index e86bcd2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineQuick.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineWidgets.cpython-312.pyc
deleted file mode 100644
index 989b2f1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebEngineWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebSockets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebSockets.cpython-312.pyc
deleted file mode 100644
index e2e2e56..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWebSockets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWidgets.cpython-312.pyc
deleted file mode 100644
index 406fcfd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtXml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtXml.cpython-312.pyc
deleted file mode 100644
index 37f7e9c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.QtXml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.cpython-312.pyc
deleted file mode 100644
index ae4504e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-PySide6.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_ctypes.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_ctypes.cpython-312.pyc
deleted file mode 100644
index d6f6475..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_ctypes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_osx_support.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_osx_support.cpython-312.pyc
deleted file mode 100644
index 1899372..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_osx_support.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_pyi_rth_utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_pyi_rth_utils.cpython-312.pyc
deleted file mode 100644
index b227cd9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_pyi_rth_utils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_tkinter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_tkinter.cpython-312.pyc
deleted file mode 100644
index 32ff17c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-_tkinter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-babel.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-babel.cpython-312.pyc
deleted file mode 100644
index ee88f26..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-babel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-difflib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-difflib.cpython-312.pyc
deleted file mode 100644
index f1d6f98..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-difflib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.command.check.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.command.check.cpython-312.pyc
deleted file mode 100644
index 2fb85fc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.command.check.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.cpython-312.pyc
deleted file mode 100644
index 3657e2a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.util.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.util.cpython-312.pyc
deleted file mode 100644
index b7909a6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-distutils.util.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.contrib.sessions.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.contrib.sessions.cpython-312.pyc
deleted file mode 100644
index 344492f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.contrib.sessions.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.cache.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.cache.cpython-312.pyc
deleted file mode 100644
index dacd591..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.cache.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.mail.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.mail.cpython-312.pyc
deleted file mode 100644
index a283114..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.mail.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.management.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.management.cpython-312.pyc
deleted file mode 100644
index 9444b94..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.core.management.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.cpython-312.pyc
deleted file mode 100644
index c44aa64..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.cpython-312.pyc
deleted file mode 100644
index 01f94cf..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.mysql.base.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.mysql.base.cpython-312.pyc
deleted file mode 100644
index 6ca447c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.mysql.base.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.oracle.base.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.oracle.base.cpython-312.pyc
deleted file mode 100644
index 824cf0c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.db.backends.oracle.base.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.template.loaders.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.template.loaders.cpython-312.pyc
deleted file mode 100644
index 6aa3807..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-django.template.loaders.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-encodings.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-encodings.cpython-312.pyc
deleted file mode 100644
index 5b13453..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-encodings.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gevent.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gevent.cpython-312.pyc
deleted file mode 100644
index 2b9b21f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gevent.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.cpython-312.pyc
deleted file mode 100644
index abc26df..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Adw.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Adw.cpython-312.pyc
deleted file mode 100644
index 914af62..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Adw.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.AppIndicator3.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.AppIndicator3.cpython-312.pyc
deleted file mode 100644
index 3d97c0a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.AppIndicator3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Atk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Atk.cpython-312.pyc
deleted file mode 100644
index fadb842..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Atk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.AyatanaAppIndicator3.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.AyatanaAppIndicator3.cpython-312.pyc
deleted file mode 100644
index c94165d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.AyatanaAppIndicator3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Champlain.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Champlain.cpython-312.pyc
deleted file mode 100644
index e7b2312..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Champlain.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Clutter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Clutter.cpython-312.pyc
deleted file mode 100644
index 8b10dc6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Clutter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.DBus.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.DBus.cpython-312.pyc
deleted file mode 100644
index 11993e0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.DBus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GIRepository.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GIRepository.cpython-312.pyc
deleted file mode 100644
index 5be90ba..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GIRepository.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GLib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GLib.cpython-312.pyc
deleted file mode 100644
index 1b13cb2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GLib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GModule.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GModule.cpython-312.pyc
deleted file mode 100644
index 7d98cfd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GModule.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GObject.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GObject.cpython-312.pyc
deleted file mode 100644
index eedd843..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GObject.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gdk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gdk.cpython-312.pyc
deleted file mode 100644
index 72b71de..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gdk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GdkPixbuf.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GdkPixbuf.cpython-312.pyc
deleted file mode 100644
index 2dea84a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GdkPixbuf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gio.cpython-312.pyc
deleted file mode 100644
index 49b7a3b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Graphene.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Graphene.cpython-312.pyc
deleted file mode 100644
index b2a24a4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Graphene.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gsk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gsk.cpython-312.pyc
deleted file mode 100644
index 86b375a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gsk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gst.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gst.cpython-312.pyc
deleted file mode 100644
index bbd3da5..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gst.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstAllocators.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstAllocators.cpython-312.pyc
deleted file mode 100644
index ad3604d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstAllocators.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstApp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstApp.cpython-312.pyc
deleted file mode 100644
index 3104656..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstApp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstAudio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstAudio.cpython-312.pyc
deleted file mode 100644
index f0562fc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstAudio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstBadAudio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstBadAudio.cpython-312.pyc
deleted file mode 100644
index 5f23593..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstBadAudio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstBase.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstBase.cpython-312.pyc
deleted file mode 100644
index ea119eb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstBase.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstCheck.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstCheck.cpython-312.pyc
deleted file mode 100644
index 9b2fabb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstCheck.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstCodecs.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstCodecs.cpython-312.pyc
deleted file mode 100644
index 0fb814b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstCodecs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstController.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstController.cpython-312.pyc
deleted file mode 100644
index 6b35508..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstController.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGL.cpython-312.pyc
deleted file mode 100644
index 7c50f5e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLEGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLEGL.cpython-312.pyc
deleted file mode 100644
index 8002b4a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLEGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLWayland.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLWayland.cpython-312.pyc
deleted file mode 100644
index 5901771..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLWayland.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLX11.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLX11.cpython-312.pyc
deleted file mode 100644
index 1ab9209..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstGLX11.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstInsertBin.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstInsertBin.cpython-312.pyc
deleted file mode 100644
index 902735f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstInsertBin.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstMpegts.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstMpegts.cpython-312.pyc
deleted file mode 100644
index e133a2d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstMpegts.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstNet.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstNet.cpython-312.pyc
deleted file mode 100644
index 801a4a8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstNet.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPbutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPbutils.cpython-312.pyc
deleted file mode 100644
index 8d24649..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPbutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPlay.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPlay.cpython-312.pyc
deleted file mode 100644
index f1300f6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPlay.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPlayer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPlayer.cpython-312.pyc
deleted file mode 100644
index a7501bf..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstPlayer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtp.cpython-312.pyc
deleted file mode 100644
index bffc20b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtsp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtsp.cpython-312.pyc
deleted file mode 100644
index 1fa1cc3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtsp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtspServer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtspServer.cpython-312.pyc
deleted file mode 100644
index 14f1730..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstRtspServer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstSdp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstSdp.cpython-312.pyc
deleted file mode 100644
index 7599bda..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstSdp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstTag.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstTag.cpython-312.pyc
deleted file mode 100644
index ee48671..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstTag.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstTranscoder.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstTranscoder.cpython-312.pyc
deleted file mode 100644
index dc271a8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstTranscoder.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVideo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVideo.cpython-312.pyc
deleted file mode 100644
index cf54140..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVideo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkan.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkan.cpython-312.pyc
deleted file mode 100644
index 43c9217..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkan.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkanWayland.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkanWayland.cpython-312.pyc
deleted file mode 100644
index 6bc89ff..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkanWayland.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkanXCB.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkanXCB.cpython-312.pyc
deleted file mode 100644
index 6e104a2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstVulkanXCB.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstWebRTC.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstWebRTC.cpython-312.pyc
deleted file mode 100644
index 8c0ae56..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GstWebRTC.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gtk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gtk.cpython-312.pyc
deleted file mode 100644
index ac6bfbd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Gtk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkChamplain.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkChamplain.cpython-312.pyc
deleted file mode 100644
index ca1d54f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkChamplain.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkClutter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkClutter.cpython-312.pyc
deleted file mode 100644
index 47bae91..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkClutter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkSource.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkSource.cpython-312.pyc
deleted file mode 100644
index cfd8f00..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkSource.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkosxApplication.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkosxApplication.cpython-312.pyc
deleted file mode 100644
index 339dc97..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.GtkosxApplication.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.HarfBuzz.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.HarfBuzz.cpython-312.pyc
deleted file mode 100644
index 5a29003..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.HarfBuzz.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.OsmGpsMap.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.OsmGpsMap.cpython-312.pyc
deleted file mode 100644
index 5dfb4e4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.OsmGpsMap.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Pango.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Pango.cpython-312.pyc
deleted file mode 100644
index b3b352e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Pango.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.PangoCairo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.PangoCairo.cpython-312.pyc
deleted file mode 100644
index 08706ac..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.PangoCairo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Rsvg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Rsvg.cpython-312.pyc
deleted file mode 100644
index 3da1fb3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.Rsvg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.cairo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.cairo.cpython-312.pyc
deleted file mode 100644
index 164c85b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.cairo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.freetype2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.freetype2.cpython-312.pyc
deleted file mode 100644
index bb9b164..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.freetype2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.xlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.xlib.cpython-312.pyc
deleted file mode 100644
index aa64742..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-gi.repository.xlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-heapq.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-heapq.cpython-312.pyc
deleted file mode 100644
index 0c22a4a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-heapq.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-idlelib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-idlelib.cpython-312.pyc
deleted file mode 100644
index 8973ac9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-idlelib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-importlib_metadata.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-importlib_metadata.cpython-312.pyc
deleted file mode 100644
index 782f67a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-importlib_metadata.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-importlib_resources.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-importlib_resources.cpython-312.pyc
deleted file mode 100644
index a83d1a6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-importlib_resources.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-keyring.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-keyring.cpython-312.pyc
deleted file mode 100644
index cd667a7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-keyring.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-kivy.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-kivy.cpython-312.pyc
deleted file mode 100644
index 5aa641d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-kivy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-lib2to3.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-lib2to3.cpython-312.pyc
deleted file mode 100644
index 81ecd0a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-lib2to3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backend_bases.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backend_bases.cpython-312.pyc
deleted file mode 100644
index d9df70b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backend_bases.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.backend_qtagg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.backend_qtagg.cpython-312.pyc
deleted file mode 100644
index 76720e1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.backend_qtagg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.backend_qtcairo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.backend_qtcairo.cpython-312.pyc
deleted file mode 100644
index c451961..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.backend_qtcairo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.cpython-312.pyc
deleted file mode 100644
index 3fff505..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.qt_compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.qt_compat.cpython-312.pyc
deleted file mode 100644
index 76e345c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.backends.qt_compat.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.cpython-312.pyc
deleted file mode 100644
index 5f8ad3c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.numerix.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.numerix.cpython-312.pyc
deleted file mode 100644
index ffe59a2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.numerix.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.pyplot.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.pyplot.cpython-312.pyc
deleted file mode 100644
index c530ce4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-matplotlib.pyplot.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-multiprocessing.util.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-multiprocessing.util.cpython-312.pyc
deleted file mode 100644
index 19b9192..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-multiprocessing.util.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-numpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-numpy.cpython-312.pyc
deleted file mode 100644
index b37dcc2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-numpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.cpython-312.pyc
deleted file mode 100644
index 361d7cc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.io.clipboard.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.io.clipboard.cpython-312.pyc
deleted file mode 100644
index 8853540..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.io.clipboard.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.io.formats.style.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.io.formats.style.cpython-312.pyc
deleted file mode 100644
index ec7e047..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.io.formats.style.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.plotting.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.plotting.cpython-312.pyc
deleted file mode 100644
index 2579080..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pandas.plotting.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pickle.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pickle.cpython-312.pyc
deleted file mode 100644
index 6d37874..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pickle.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pkg_resources.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pkg_resources.cpython-312.pyc
deleted file mode 100644
index 44381b8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pkg_resources.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-platform.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-platform.cpython-312.pyc
deleted file mode 100644
index 40bed57..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-platform.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pygments.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pygments.cpython-312.pyc
deleted file mode 100644
index 61fa9f6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pygments.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pytz.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pytz.cpython-312.pyc
deleted file mode 100644
index 7ed93bf..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pytz.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pytzdata.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pytzdata.cpython-312.pyc
deleted file mode 100644
index e575eb8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-pytzdata.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-qtawesome.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-qtawesome.cpython-312.pyc
deleted file mode 100644
index f8afc11..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-qtawesome.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-qtpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-qtpy.cpython-312.pyc
deleted file mode 100644
index 17bcdb4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-qtpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scapy.layers.all.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scapy.layers.all.cpython-312.pyc
deleted file mode 100644
index 7dba75f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scapy.layers.all.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.cpython-312.pyc
deleted file mode 100644
index 9e219d3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.io.matlab.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.io.matlab.cpython-312.pyc
deleted file mode 100644
index 4a07ee7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.io.matlab.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.linalg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.linalg.cpython-312.pyc
deleted file mode 100644
index e9e4139..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.linalg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.sparse.csgraph.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.sparse.csgraph.cpython-312.pyc
deleted file mode 100644
index 3d7c724..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.sparse.csgraph.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.spatial._ckdtree.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.spatial._ckdtree.cpython-312.pyc
deleted file mode 100644
index be9a801..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.spatial._ckdtree.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.spatial.transform.rotation.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.spatial.transform.rotation.cpython-312.pyc
deleted file mode 100644
index 82f2ce9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.spatial.transform.rotation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.special._ellip_harm_2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.special._ellip_harm_2.cpython-312.pyc
deleted file mode 100644
index ae75071..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.special._ellip_harm_2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.special._ufuncs.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.special._ufuncs.cpython-312.pyc
deleted file mode 100644
index e9b2fa3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.special._ufuncs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.stats._stats.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.stats._stats.cpython-312.pyc
deleted file mode 100644
index 4e6267b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scipy.stats._stats.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scrapy.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scrapy.cpython-312.pyc
deleted file mode 100644
index 5db96f4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-scrapy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools._vendor.importlib_metadata.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools._vendor.importlib_metadata.cpython-312.pyc
deleted file mode 100644
index 55169bd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools._vendor.importlib_metadata.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools._vendor.jaraco.text.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools._vendor.jaraco.text.cpython-312.pyc
deleted file mode 100644
index b1621ee..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools._vendor.jaraco.text.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools.cpython-312.pyc
deleted file mode 100644
index c4d733c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-setuptools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-shelve.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-shelve.cpython-312.pyc
deleted file mode 100644
index 2d27846..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-shelve.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-shiboken6.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-shiboken6.cpython-312.pyc
deleted file mode 100644
index 683779b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-shiboken6.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sphinx.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sphinx.cpython-312.pyc
deleted file mode 100644
index ff8af14..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sphinx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sqlalchemy.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sqlalchemy.cpython-312.pyc
deleted file mode 100644
index 5643df6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sqlalchemy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sqlite3.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sqlite3.cpython-312.pyc
deleted file mode 100644
index 2f53e98..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sqlite3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sysconfig.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sysconfig.cpython-312.pyc
deleted file mode 100644
index 5103a93..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-sysconfig.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-wcwidth.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-wcwidth.cpython-312.pyc
deleted file mode 100644
index 7dfee93..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-wcwidth.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-win32ctypes.core.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-win32ctypes.core.cpython-312.pyc
deleted file mode 100644
index a042d29..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-win32ctypes.core.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.cpython-312.pyc
deleted file mode 100644
index 882d4ee..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.dom.domreg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.dom.domreg.cpython-312.pyc
deleted file mode 100644
index 4c3d853..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.dom.domreg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.etree.cElementTree.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.etree.cElementTree.cpython-312.pyc
deleted file mode 100644
index 0e1f8eb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-xml.etree.cElementTree.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-zope.interface.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-zope.interface.cpython-312.pyc
deleted file mode 100644
index cf04f64..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/__pycache__/hook-zope.interface.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.Image.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.Image.py
deleted file mode 100755
index 1d9e029..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.Image.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This hook was tested with Pillow 2.9.0 (Maintained fork of PIL): https://pypi.python.org/pypi/Pillow
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# Include all PIL image plugins - module names containing 'ImagePlugin'. e.g. PIL.JpegImagePlugin
-hiddenimports = collect_submodules('PIL', lambda name: 'ImagePlugin' in name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.ImageFilter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.ImageFilter.py
deleted file mode 100755
index 528694b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.ImageFilter.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Only used if installed, not mean to pull in numpy.
-excludedimports = ["numpy"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.SpiderImagePlugin.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.SpiderImagePlugin.py
deleted file mode 100755
index 1b6466f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.SpiderImagePlugin.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# PIL's SpiderImagePlugin features a tkPhotoImage() method, which imports ImageTk (and thus brings in the whole Tcl/Tk
-# library). Assume that if people are really using tkinter in their application, they will also import it directly.
-excludedimports = ['tkinter']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.py
deleted file mode 100755
index b7a6849..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PIL.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This hook was tested with Pillow 2.9.0 (Maintained fork of PIL):
-# https://pypi.python.org/pypi/Pillow
-
-# Ignore tkinter to prevent inclusion of Tcl/Tk library and other GUI libraries. Assume that if people are really using
-# tkinter in their application, they will also import it directly and thus PyInstaller bundles the right GUI library.
-excludedimports = ['tkinter', 'PyQt5', 'PySide2', 'PyQt6', 'PySide6']
-
-# Similarly, prevent inclusion of IPython, which in turn ends up pulling in whole matplotlib, along with its optional
-# GUI library dependencies.
-excludedimports += ['IPython']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QAxContainer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QAxContainer.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QAxContainer.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qsci.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qsci.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qsci.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt.py
deleted file mode 100755
index 668d423..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# When PyQt5.Qt is imported it implies the import of all PyQt5 modules. See
-# http://pyqt.sourceforge.net/Docs/PyQt5/Qt.html.
-import os
-
-from PyInstaller.utils.hooks import get_module_file_attribute
-
-# Only do this if PyQt5 is found.
-mfi = get_module_file_attribute('PyQt5')
-if mfi:
- # Determine the name of all these modules by looking in the PyQt5 directory.
- hiddenimports = []
- for f in os.listdir(os.path.dirname(mfi)):
- root, ext = os.path.splitext(os.path.basename(f))
- if root.startswith('Qt') and root != 'Qt':
- # On Linux and macOS, PyQt 5.14.1 has a ``.abi3`` suffix on all library names. Remove it.
- if root.endswith('.abi3'):
- root = root[:-5]
- hiddenimports.append('PyQt5.' + root)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DAnimation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DAnimation.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DAnimation.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DCore.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DExtras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DInput.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DInput.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DInput.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DLogic.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DLogic.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DLogic.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DRender.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DRender.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.Qt3DRender.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtBluetooth.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtBluetooth.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtBluetooth.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtChart.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtChart.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtChart.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtCore.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDBus.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDBus.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDBus.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDataVisualization.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDataVisualization.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDataVisualization.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDesigner.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDesigner.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtDesigner.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtGui.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtGui.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtGui.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtHelp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtHelp.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtHelp.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtLocation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtLocation.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtLocation.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMacExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMacExtras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMacExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMultimedia.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMultimedia.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMultimedia.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMultimediaWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMultimediaWidgets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtMultimediaWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNetwork.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNetwork.py
deleted file mode 100755
index 1c8cc67..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNetwork.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies, pyqt5_library_info
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-binaries += pyqt5_library_info.collect_qtnetwork_files()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNetworkAuth.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNetworkAuth.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNetworkAuth.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNfc.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNfc.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtNfc.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtOpenGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtOpenGL.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtOpenGL.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPositioning.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPositioning.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPositioning.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPrintSupport.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPrintSupport.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPrintSupport.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPurchasing.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPurchasing.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtPurchasing.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQml.py
deleted file mode 100755
index 718d323..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQml.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies, pyqt5_library_info
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-qml_binaries, qml_datas = pyqt5_library_info.collect_qtqml_files()
-binaries += qml_binaries
-datas += qml_datas
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuick.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuick.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuick.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuick3D.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuick3D.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuick3D.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuickWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuickWidgets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtQuickWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtRemoteObjects.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtRemoteObjects.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtRemoteObjects.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtScript.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtScript.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtScript.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSensors.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSensors.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSensors.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSerialPort.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSerialPort.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSerialPort.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSql.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSql.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSql.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSvg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSvg.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtSvg.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtTest.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtTest.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtTest.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtTextToSpeech.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtTextToSpeech.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtTextToSpeech.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebChannel.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebChannel.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebChannel.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngine.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngine.py
deleted file mode 100755
index 7b67e1b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngine.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngineCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngineCore.py
deleted file mode 100755
index f575e0d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngineCore.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import \
- add_qt5_dependencies, pyqt5_library_info
-
-# Ensure PyQt5 is importable before adding info depending on it.
-if pyqt5_library_info.version is not None:
- hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-
- # Include helper process executable, translations, and resources.
- webengine_binaries, webengine_datas = pyqt5_library_info.collect_qtwebengine_files()
- binaries += webengine_binaries
- datas += webengine_datas
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py
deleted file mode 100755
index 7b67e1b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebKit.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebKit.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebKit.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebKitWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebKitWidgets.py
deleted file mode 100755
index 7b67e1b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebKitWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebSockets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebSockets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWebSockets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWidgets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWinExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWinExtras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtWinExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtX11Extras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtX11Extras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtX11Extras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtXml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtXml.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtXml.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtXmlPatterns.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtXmlPatterns.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.QtXmlPatterns.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.py
deleted file mode 100755
index 2325577..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import pyqt5_library_info, ensure_single_qt_bindings_package
-
-# Allow only one Qt bindings package to be collected in frozen application.
-ensure_single_qt_bindings_package("PyQt5")
-
-# Only proceed if PyQt5 can be imported.
-if pyqt5_library_info.version is not None:
- hiddenimports = [
- # PyQt5.10 and earlier uses sip in an separate package;
- 'sip',
- # PyQt5.11 and later provides SIP in a private package. Support both.
- 'PyQt5.sip',
- # Imported via __import__ in PyQt5/__init__.py
- 'pkgutil',
- ]
-
- # Collect required Qt binaries.
- binaries = pyqt5_library_info.collect_extra_binaries()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.uic.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.uic.py
deleted file mode 100755
index e4474dd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt5.uic.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# We need to include modules in PyQt5.uic.widget-plugins, so they can be dynamically loaded by uic. They should be
-# included as separate (data-like) files, so they can be found by os.listdir and friends. However, as this directory
-# is not a package, refer to it using the package (PyQt5.uic) followed by the subdirectory name (``widget-plugins/``).
-datas = collect_data_files('PyQt5.uic', True, 'widget-plugins')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QAxContainer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QAxContainer.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QAxContainer.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qsci.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qsci.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qsci.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DAnimation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DAnimation.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DAnimation.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DCore.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DExtras.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DInput.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DInput.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DInput.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DLogic.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DLogic.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DLogic.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DRender.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DRender.py
deleted file mode 100755
index 58ac06d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.Qt3DRender.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-hiddenimports += ["PyQt6.QtOpenGL"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtBluetooth.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtBluetooth.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtBluetooth.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtCharts.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtCharts.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtCharts.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtCore.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDBus.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDBus.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDBus.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDataVisualization.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDataVisualization.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDataVisualization.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDesigner.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDesigner.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtDesigner.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGraphs.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGraphs.py
deleted file mode 100755
index 17c60d1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGraphs.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-# These dependencies cannot seem to be inferred from linked libraries.
-hiddenimports += ['PyQt6.QtNetwork', 'PyQt6.QtQml']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGraphsWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGraphsWidgets.py
deleted file mode 100755
index c4cba93..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGraphsWidgets.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-# These dependencies cannot seem to be inferred from linked libraries.
-hiddenimports += ['PyQt6.QtGraphs', 'PyQt6.QtQuickWidgets']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGui.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGui.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtGui.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtHelp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtHelp.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtHelp.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtMultimedia.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtMultimedia.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtMultimedia.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtMultimediaWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtMultimediaWidgets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtMultimediaWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNetwork.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNetwork.py
deleted file mode 100755
index c780c7c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNetwork.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies, pyqt6_library_info
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-binaries += pyqt6_library_info.collect_qtnetwork_files()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNetworkAuth.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNetworkAuth.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNetworkAuth.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNfc.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNfc.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtNfc.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtOpenGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtOpenGL.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtOpenGL.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtOpenGLWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtOpenGLWidgets.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtOpenGLWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPdf.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPdf.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPdf.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPdfWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPdfWidgets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPdfWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPositioning.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPositioning.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPositioning.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPrintSupport.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPrintSupport.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtPrintSupport.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQml.py
deleted file mode 100755
index 024696a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQml.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies, pyqt6_library_info
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-qml_binaries, qml_datas = pyqt6_library_info.collect_qtqml_files()
-binaries += qml_binaries
-datas += qml_datas
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuick.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuick.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuick.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuick3D.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuick3D.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuick3D.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuickWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuickWidgets.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtQuickWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtRemoteObjects.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtRemoteObjects.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtRemoteObjects.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSensors.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSensors.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSensors.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSerialPort.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSerialPort.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSerialPort.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSpatialAudio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSpatialAudio.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSpatialAudio.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSql.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSql.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSql.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtStateMachine.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtStateMachine.py
deleted file mode 100755
index b1b97aa..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtStateMachine.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-# This dependency cannot seem to be inferred from linked libraries (at least on Windows).
-hiddenimports += ['PyQt6.QtGui']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSvg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSvg.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSvg.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSvgWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSvgWidgets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtSvgWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtTest.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtTest.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtTest.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtTextToSpeech.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtTextToSpeech.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtTextToSpeech.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebChannel.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebChannel.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebChannel.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineCore.py
deleted file mode 100755
index 7eb593c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineCore.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import \
- add_qt6_dependencies, pyqt6_library_info
-
-# Ensure PyQt6 is importable before adding info depending on it.
-if pyqt6_library_info.version is not None:
- # Qt6 prior to 6.2.2 contains a bug that makes it incompatible with the way PyInstaller collects
- # QtWebEngine shared libraries and resources. So exit here and now instead of producing a defunct build.
- if pyqt6_library_info.version < [6, 2, 2]:
- raise SystemExit("ERROR: PyInstaller's QtWebEngine support requires Qt6 6.2.2 or later!")
-
- hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
- # Include helper process executable, translations, and resources.
- webengine_binaries, webengine_datas = pyqt6_library_info.collect_qtwebengine_files()
- binaries += webengine_binaries
- datas += webengine_datas
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineQuick.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineQuick.py
deleted file mode 100755
index 19083de..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineQuick.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineWidgets.py
deleted file mode 100755
index 19083de..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebEngineWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebSockets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebSockets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWebSockets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWidgets.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtXml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtXml.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.QtXml.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.py
deleted file mode 100755
index b9e2f51..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import pyqt6_library_info, ensure_single_qt_bindings_package
-
-# Allow only one Qt bindings package to be collected in frozen application.
-ensure_single_qt_bindings_package("PyQt6")
-
-# Only proceed if PyQt6 can be imported.
-if pyqt6_library_info.version is not None:
- hiddenimports = [
- 'PyQt6.sip',
- # Imported via __import__ in PyQt6/__init__.py
- 'pkgutil',
- ]
-
- # Collect required Qt binaries.
- binaries = pyqt6_library_info.collect_extra_binaries()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.uic.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.uic.py
deleted file mode 100755
index 7744cbc..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PyQt6.uic.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# We need to include modules in PyQt6.uic.widget-plugins, so they can be dynamically loaded by uic. They should be
-# included as separate (data-like) files, so they can be found by os.listdir and friends. However, as this directory
-# is not a package, refer to it using the package (PyQt6.uic) followed by the subdirectory name (``widget-plugins/``).
-datas = collect_data_files('PyQt6.uic', True, 'widget-plugins')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DAnimation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DAnimation.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DAnimation.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DCore.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DExtras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DInput.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DInput.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DInput.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DLogic.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DLogic.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DLogic.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DRender.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DRender.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qt3DRender.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtAxContainer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtAxContainer.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtAxContainer.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtCharts.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtCharts.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtCharts.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtConcurrent.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtConcurrent.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtConcurrent.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtCore.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtDataVisualization.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtDataVisualization.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtDataVisualization.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtGui.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtGui.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtGui.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtHelp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtHelp.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtHelp.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtLocation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtLocation.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtLocation.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMacExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMacExtras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMacExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMultimedia.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMultimedia.py
deleted file mode 100755
index 1f3f908..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMultimedia.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-
-# Using PySide2 true_properties ("from __feature__ import true_properties") causes a hidden dependency on
-# QtMultimediaWidgets python module:
-# https://github.com/qtproject/pyside-pyside-setup/blob/5.15.2/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py#L577-L586
-hiddenimports += ['PySide2.QtMultimediaWidgets']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMultimediaWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMultimediaWidgets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtMultimediaWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtNetwork.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtNetwork.py
deleted file mode 100755
index 4e62091..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtNetwork.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies, pyside2_library_info
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-binaries += pyside2_library_info.collect_qtnetwork_files()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtOpenGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtOpenGL.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtOpenGL.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtOpenGLFunctions.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtOpenGLFunctions.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtOpenGLFunctions.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtPositioning.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtPositioning.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtPositioning.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtPrintSupport.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtPrintSupport.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtPrintSupport.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQml.py
deleted file mode 100755
index a9f7162..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQml.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies, pyside2_library_info
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-qml_binaries, qml_datas = pyside2_library_info.collect_qtqml_files()
-binaries += qml_binaries
-datas += qml_datas
-
-hiddenimports += ["PySide2.QtGui"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuick.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuick.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuick.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuickControls2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuickControls2.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuickControls2.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuickWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuickWidgets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtQuickWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtRemoteObjects.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtRemoteObjects.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtRemoteObjects.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScript.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScript.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScript.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScriptTools.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScriptTools.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScriptTools.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScxml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScxml.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtScxml.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSensors.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSensors.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSensors.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSerialPort.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSerialPort.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSerialPort.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSql.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSql.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSql.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSvg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSvg.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtSvg.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtTest.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtTest.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtTest.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtTextToSpeech.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtTextToSpeech.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtTextToSpeech.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtUiTools.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtUiTools.py
deleted file mode 100755
index 9f47776..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtUiTools.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-hiddenimports += ['PySide2.QtXml'] # Not inferred from dynamic lib analysis
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebChannel.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebChannel.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebChannel.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngine.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngine.py
deleted file mode 100755
index 7b67e1b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngine.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngineCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngineCore.py
deleted file mode 100755
index afb578e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngineCore.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import \
- add_qt5_dependencies, pyside2_library_info
-
-# Ensure PySide2 is importable before adding info depending on it.
-if pyside2_library_info.version is not None:
- hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
-
- # Include helper process executable, translations, and resources.
- webengine_binaries, webengine_datas = pyside2_library_info.collect_qtwebengine_files()
- binaries += webengine_binaries
- datas += webengine_datas
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngineWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngineWidgets.py
deleted file mode 100755
index 7b67e1b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebEngineWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebKit.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebKit.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebKit.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebKitWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebKitWidgets.py
deleted file mode 100755
index 7b67e1b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebKitWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebSockets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebSockets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWebSockets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWidgets.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWinExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWinExtras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtWinExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtX11Extras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtX11Extras.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtX11Extras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtXml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtXml.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtXml.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtXmlPatterns.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtXmlPatterns.py
deleted file mode 100755
index 51258b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.QtXmlPatterns.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt5_dependencies
-
-hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qwt5.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qwt5.py
deleted file mode 100755
index 57f3c22..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.Qwt5.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import isolated
-
-hiddenimports = ['PySide2.QtCore', 'PySide2.QtWidgets', 'PySide2.QtGui', 'PySide2.QtSvg']
-
-
-@isolated.decorate
-def conditional_imports():
- from PySide2 import Qwt5
-
- out = []
- if hasattr(Qwt5, "toNumpy"):
- out.append("numpy")
- if hasattr(Qwt5, "toNumeric"):
- out.append("numeric")
- if hasattr(Qwt5, "toNumarray"):
- out.append("numarray")
- return out
-
-
-hiddenimports += conditional_imports()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.py
deleted file mode 100755
index aa7a714..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide2.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import pyside2_library_info, ensure_single_qt_bindings_package
-
-# Allow only one Qt bindings package to be collected in frozen application.
-ensure_single_qt_bindings_package("PySide2")
-
-# Only proceed if PySide2 can be imported.
-if pyside2_library_info.version is not None:
- hiddenimports = ['shiboken2', 'inspect']
- if pyside2_library_info.version < [5, 15]:
- # The shiboken2 bootstrap in earlier releases requires __future__ in addition to inspect
- hiddenimports += ['__future__']
-
- # Collect required Qt binaries.
- binaries = pyside2_library_info.collect_extra_binaries()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DAnimation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DAnimation.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DAnimation.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DCore.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DExtras.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DExtras.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DExtras.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DInput.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DInput.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DInput.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DLogic.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DLogic.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DLogic.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DRender.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DRender.py
deleted file mode 100755
index 2bb9b83..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.Qt3DRender.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies, pyside6_library_info
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-# In PySide 6.7.0, Qt3DRender module added a reference to QtOpenGL type system. The hidden import is required on
-# Windows, while on macOS and Linux we seem to pick it up automatically due to the corresponding Qt shared library
-# appearing among binary dependencies. Keep it around on all OSes, though - just in case this ever changes.
-if pyside6_library_info.version is not None and pyside6_library_info.version >= [6, 7]:
- hiddenimports += ['PySide6.QtOpenGL']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtAxContainer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtAxContainer.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtAxContainer.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtBluetooth.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtBluetooth.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtBluetooth.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtCharts.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtCharts.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtCharts.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtConcurrent.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtConcurrent.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtConcurrent.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtCore.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtCore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDBus.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDBus.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDBus.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDataVisualization.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDataVisualization.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDataVisualization.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDesigner.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDesigner.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtDesigner.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGraphs.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGraphs.py
deleted file mode 100755
index 00941c0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGraphs.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGraphsWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGraphsWidgets.py
deleted file mode 100755
index 91ae027..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGraphsWidgets.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-# These dependencies cannot seem to be inferred from linked libraries.
-hiddenimports += ['PySide6.QtQuickWidgets', 'PySide6.QtGraphs']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGui.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGui.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtGui.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtHelp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtHelp.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtHelp.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtHttpServer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtHttpServer.py
deleted file mode 100755
index 790cb11..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtHttpServer.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-# This seems to be necessary on Windows; on other OSes, it is inferred automatically because the extension is linked
-# against the Qt6Concurrent shared library.
-hiddenimports += ['PySide6.QtConcurrent']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtLocation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtLocation.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtLocation.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtMultimedia.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtMultimedia.py
deleted file mode 100755
index 0c2d31b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtMultimedia.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-# Using PySide6 true_properties ("from __feature__ import true_properties") causes a hidden dependency on
-# QtMultimediaWidgets python module:
-# https://github.com/qtproject/pyside-pyside-setup/blob/v6.2.2.1/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/mapping.py#L614-L627
-hiddenimports += ['PySide6.QtMultimediaWidgets']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtMultimediaWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtMultimediaWidgets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtMultimediaWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNetwork.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNetwork.py
deleted file mode 100755
index a216ecd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNetwork.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies, pyside6_library_info
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-binaries += pyside6_library_info.collect_qtnetwork_files()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNetworkAuth.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNetworkAuth.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNetworkAuth.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNfc.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNfc.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtNfc.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtOpenGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtOpenGL.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtOpenGL.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtOpenGLWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtOpenGLWidgets.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtOpenGLWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPdf.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPdf.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPdf.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPdfWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPdfWidgets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPdfWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPositioning.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPositioning.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPositioning.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPrintSupport.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPrintSupport.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtPrintSupport.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQml.py
deleted file mode 100755
index 8b6837d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQml.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies, pyside6_library_info
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-qml_binaries, qml_datas = pyside6_library_info.collect_qtqml_files()
-binaries += qml_binaries
-datas += qml_datas
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuick.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuick.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuick.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuick3D.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuick3D.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuick3D.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuickControls2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuickControls2.py
deleted file mode 100755
index b405fc6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuickControls2.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
-hiddenimports += ['PySide6.QtQuick']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuickWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuickWidgets.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtQuickWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtRemoteObjects.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtRemoteObjects.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtRemoteObjects.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtScxml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtScxml.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtScxml.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSensors.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSensors.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSensors.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSerialBus.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSerialBus.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSerialBus.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSerialPort.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSerialPort.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSerialPort.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSpatialAudio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSpatialAudio.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSpatialAudio.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSql.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSql.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSql.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtStateMachine.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtStateMachine.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtStateMachine.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSvg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSvg.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSvg.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSvgWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSvgWidgets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtSvgWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtTest.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtTest.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtTest.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtTextToSpeech.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtTextToSpeech.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtTextToSpeech.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtUiTools.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtUiTools.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtUiTools.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebChannel.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebChannel.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebChannel.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineCore.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineCore.py
deleted file mode 100755
index 06e05f8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineCore.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import \
- add_qt6_dependencies, pyside6_library_info
-
-# Ensure PySide6 is importable before adding info depending on it.
-if pyside6_library_info.version is not None:
- # Qt6 prior to 6.2.2 contains a bug that makes it incompatible with the way PyInstaller collects
- # QtWebEngine shared libraries and resources. So exit here and now instead of producing a defunct build.
- if pyside6_library_info.version < [6, 2, 2]:
- raise SystemExit("ERROR: PyInstaller's QtWebEngine support requires Qt6 6.2.2 or later!")
-
- hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
-
- # Include helper process executable, translations, and resources.
- webengine_binaries, webengine_datas = pyside6_library_info.collect_qtwebengine_files()
- binaries += webengine_binaries
- datas += webengine_datas
-
- hiddenimports += ['PySide6.QtPrintSupport']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineQuick.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineQuick.py
deleted file mode 100755
index 19083de..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineQuick.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineWidgets.py
deleted file mode 100755
index 19083de..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebEngineWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebSockets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebSockets.py
deleted file mode 100755
index 49d27d6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWebSockets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWidgets.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWidgets.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtWidgets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtXml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtXml.py
deleted file mode 100755
index edd5cd1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.QtXml.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.qt import add_qt6_dependencies
-
-hiddenimports, binaries, datas = add_qt6_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.py
deleted file mode 100755
index 30e2ee6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-PySide6.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import check_requirement
-from PyInstaller.utils.hooks.qt import pyside6_library_info, ensure_single_qt_bindings_package
-
-# Allow only one Qt bindings package to be collected in frozen application.
-ensure_single_qt_bindings_package("PySide6")
-
-# Only proceed if PySide6 can be imported.
-if pyside6_library_info.version is not None:
- hiddenimports = ['shiboken6', 'inspect']
-
- # Starting with PySide6 6.4.0, we need to collect PySide6.support.deprecated for | and & operators to work with
- # Qt key and key modifiers enums. See #7249.
- if check_requirement("PySide6 >= 6.4.0"):
- hiddenimports += ['PySide6.support.deprecated']
-
- # Collect required Qt binaries.
- binaries = pyside6_library_info.collect_extra_binaries()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_ctypes.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_ctypes.py
deleted file mode 100755
index d9ccf8c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_ctypes.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-
-# During python 3.14 development cycle, ctypes struct/union layout logic has been moved from `_ctypes` extension into
-# Python, i.e., `ctypes._layout` module: https://github.com/python/cpython/pull/123352
-# Since this module is referenced only from the `_ctypes` extension, it needs to be added to hidden imports, at least on
-# Windows and macOS.
-if compat.is_py314:
- hiddenimports = ['ctypes._layout']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_osx_support.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_osx_support.py
deleted file mode 100755
index a3a69d5..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_osx_support.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Prevent conditional import of `distutils` in `_osx_support.compiler_fixup()` in python < 3.10 from pulling in
-# `distutils`; this function is called only from `distutils` itself, which ensures that the module is available as
-# needed. Blocking this import prevents `distutils` (and nowadays `setuptools`) from being pulled into even very
-# basic applications when built with python < 3.10.
-#
-# See: https://github.com/python/cpython/blob/f3994ade31a563d49806cf6a681d1b1115fccaa3/Lib/_osx_support.py#L430-L434
-
-excludedimports = ['distutils']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_pyi_rth_utils.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_pyi_rth_utils.py
deleted file mode 100755
index cbd93aa..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_pyi_rth_utils.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-
-# Exclude submodules specific to non-applicable OSes
-excludedimports = []
-if not compat.is_win:
- excludedimports += ['_pyi_rth_utils._win32']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_tkinter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_tkinter.py
deleted file mode 100755
index 7f21b49..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-_tkinter.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.tcl_tk import tcltk_info
-
-
-def hook(hook_api):
- # Add all Tcl/Tk data files, based on the `TclTkInfo.data_files`. If Tcl/Tk is unavailable, the list is empty.
- #
- # NOTE: the list contains 3-element TOC tuples with full destination filenames (because other parts of code,
- # specifically splash-screen writer, currently require this format). Therefore, we need to use
- # `PostGraphAPI.add_datas` (which supports 3-element TOC tuples); if this was 2-element "hook-style" TOC list,
- # we could just assign `datas` global hook variable, without implementing the post-graph `hook()` function.
- hook_api.add_datas(tcltk_info.data_files)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-babel.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-babel.py
deleted file mode 100755
index 5f03a97..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-babel.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Ensure that .dat files from locale-data sub-directory are collected.
-datas = collect_data_files('babel')
-
-# Unpickling of locale-data/root.dat currently (babel v2.16.0) requires classes from following modules, so ensure that
-# they are always collected:
-hiddenimports = [
- "babel.dates",
- "babel.localedata",
- "babel.plural",
- "babel.numbers",
-]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-difflib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-difflib.py
deleted file mode 100755
index 2416758..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-difflib.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# only required when run as `__main__`
-excludedimports = ["doctest"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.command.check.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.command.check.py
deleted file mode 100755
index 50a17d4..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.command.check.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Conditionally imported in this module; should not trigger collection.
-excludedimports = ['docutils']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.py
deleted file mode 100755
index c9cd63b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.setuptools import setuptools_info
-
-hiddenimports = []
-
-# From Python 3.6 and later ``distutils.sysconfig`` takes on the same behaviour as regular ``sysconfig`` of moving the
-# config vars to a module (see hook-sysconfig.py). It doesn't use a nice `get module name` function like ``sysconfig``
-# does to help us locate it but the module is the same file that ``sysconfig`` uses so we can use the
-# ``_get_sysconfigdata_name()`` from regular ``sysconfig``.
-try:
- import sysconfig
- hiddenimports += [sysconfig._get_sysconfigdata_name()]
-except AttributeError:
- # Either sysconfig has no attribute _get_sysconfigdata_name (i.e., the function does not exist), or this is Windows
- # and the _get_sysconfigdata_name() call failed due to missing sys.abiflags attribute.
- pass
-
-# Starting with setuptools 60.0, the vendored distutils overrides the stdlib one (which will be removed in python 3.12
-# anyway), so check if we are using that version. While the distutils override behavior can be controleld via the
-# ``SETUPTOOLS_USE_DISTUTILS`` environment variable, the latter may have a different value during the build and at the
-# runtime, and so we need to ensure that both stdlib and setuptools variant of distutils are collected.
-if setuptools_info.available and setuptools_info.version >= (60, 0):
- hiddenimports += ['setuptools._distutils']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.util.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.util.py
deleted file mode 100755
index 021d459..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-distutils.util.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# distutils.util.run_2to3() imports lib2to3. Exclude it as chances are low that it is used by the frozen package.
-excludedimports = ['lib2to3.refactor']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.contrib.sessions.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.contrib.sessions.py
deleted file mode 100755
index 5d86e6c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.contrib.sessions.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('django.contrib.sessions.backends')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.cache.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.cache.py
deleted file mode 100755
index eb319c7..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.cache.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('django.core.cache.backends')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.mail.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.mail.py
deleted file mode 100755
index 1cee61c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.mail.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-django.core.mail uses part of the email package.
-The problem is: when using runserver with autoreload mode, the thread that checks for changed files triggers further
-imports within the email package, because of the LazyImporter in email (used in 2.5 for backward compatibility).
-We then need to name those modules as hidden imports, otherwise at runtime the autoreload thread will complain
-with a traceback.
-"""
-
-hiddenimports = [
- 'email.mime.message',
- 'email.mime.image',
- 'email.mime.text',
- 'email.mime.multipart',
- 'email.mime.audio',
-]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.management.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.management.py
deleted file mode 100755
index a8566e0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.core.management.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# Module django.core.management.commands.shell imports IPython, but it introduces many other dependencies that are not
-# necessary for a simple django project; ignore the IPython module.
-excludedimports = ['IPython', 'matplotlib', 'tkinter']
-
-# Django requires management modules for the script 'manage.py'.
-hiddenimports = collect_submodules('django.core.management.commands')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.mysql.base.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.mysql.base.py
deleted file mode 100755
index 951899e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.mysql.base.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Compiler module (see class DatabaseOperations)
-hiddenimports = ["django.db.backends.mysql.compiler"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.oracle.base.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.oracle.base.py
deleted file mode 100755
index d50eb97..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.oracle.base.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-hiddenimports = ["django.db.backends.oracle.compiler"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.py
deleted file mode 100755
index e829fe7..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.db.backends.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import glob
-import os
-
-from PyInstaller.utils.hooks import get_module_file_attribute
-
-# Compiler (see class BaseDatabaseOperations)
-hiddenimports = ['django.db.models.sql.compiler']
-
-# Include all available Django backends.
-modpath = os.path.dirname(get_module_file_attribute('django.db.backends'))
-for fn in glob.glob(os.path.join(modpath, '*')):
- if os.path.isdir(fn):
- fn = os.path.basename(fn)
- hiddenimports.append('django.db.backends.' + fn + '.base')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.py
deleted file mode 100755
index 4a8ee04..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.py
+++ /dev/null
@@ -1,92 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Tested with django 2.2
-
-import glob
-import os
-
-from PyInstaller import log as logging
-from PyInstaller.utils import hooks
-from PyInstaller.utils.hooks import django
-
-logger = logging.getLogger(__name__)
-
-# Collect everything. Some submodules of django are not importable without considerable external setup. Ignore the
-# errors they raise.
-datas, binaries, hiddenimports = hooks.collect_all('django', on_error="ignore")
-
-root_dir = django.django_find_root_dir()
-if root_dir:
- logger.info('Django root directory %s', root_dir)
- # Include imports from the mysite.settings.py module.
- settings_py_imports = django.django_dottedstring_imports(root_dir)
- # Include all submodules of all imports detected in mysite.settings.py.
- for submod in settings_py_imports:
- hiddenimports.append(submod)
- hiddenimports += hooks.collect_submodules(submod)
- # Include main django modules - settings.py, urls.py, wsgi.py. Without them the django server won't run.
- package_name = os.path.basename(root_dir)
- default_settings_module = f'{package_name}.settings'
- settings_module = os.environ.get('DJANGO_SETTINGS_MODULE', default_settings_module)
- hiddenimports += [
- # TODO: consider including 'mysite.settings.py' in source code as a data files,
- # since users might need to edit this file.
- settings_module,
- package_name + '.urls',
- package_name + '.wsgi',
- ]
- # Django hiddenimports from the standard Python library.
- hiddenimports += [
- 'http.cookies',
- 'html.parser',
- ]
-
- # Bundle django DB schema migration scripts as data files. They are necessary for some commands.
- logger.info('Collecting Django migration scripts.')
- migration_modules = [
- 'django.conf.app_template.migrations',
- 'django.contrib.admin.migrations',
- 'django.contrib.auth.migrations',
- 'django.contrib.contenttypes.migrations',
- 'django.contrib.flatpages.migrations',
- 'django.contrib.redirects.migrations',
- 'django.contrib.sessions.migrations',
- 'django.contrib.sites.migrations',
- ]
- # Include migration scripts of Django-based apps too.
- installed_apps = hooks.get_module_attribute(settings_module, 'INSTALLED_APPS')
- migration_modules.extend(set(app + '.migrations' for app in installed_apps))
- # Copy migration files.
- for mod in migration_modules:
- mod_name, bundle_name = mod.split('.', 1)
- mod_dir = os.path.dirname(hooks.get_module_file_attribute(mod_name))
- bundle_dir = bundle_name.replace('.', os.sep)
- pattern = os.path.join(mod_dir, bundle_dir, '*.py')
- files = glob.glob(pattern)
- for f in files:
- datas.append((f, os.path.join(mod_name, bundle_dir)))
-
- # Include data files from your Django project found in your django root package.
- datas += hooks.collect_data_files(package_name)
-
- # Include database file if using sqlite. The sqlite database is usually next to the manage.py script.
- root_dir_parent = os.path.dirname(root_dir)
- # TODO Add more patterns if necessary.
- _patterns = ['*.db', 'db.*']
- for p in _patterns:
- files = glob.glob(os.path.join(root_dir_parent, p))
- for f in files:
- # Place those files next to the executable.
- datas.append((f, '.'))
-
-else:
- logger.warning('No django root directory could be found!')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.template.loaders.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.template.loaders.py
deleted file mode 100755
index 18b1374..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-django.template.loaders.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('django.template.loaders')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-encodings.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-encodings.py
deleted file mode 100755
index a4082e1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-encodings.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('encodings')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gevent.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gevent.py
deleted file mode 100755
index 40ad953..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gevent.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_all, copy_metadata
-
-excludedimports = ["gevent.testing", "gevent.tests"]
-
-datas, binaries, hiddenimports = collect_all(
- 'gevent',
- filter_submodules=lambda name: ("gevent.testing" not in name or "gevent.tests" not in name),
- include_py_files=False,
- exclude_datas=["**/tests"]
-)
-
-# Gevent uses ``pkg_resources.require("...")``, which means that all its dependencies must also have their metadata.
-datas += copy_metadata('gevent', recursive=True)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.py
deleted file mode 100755
index 78e3538..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-from packaging.version import Version
-
-pygobject_version = Version(compat.importlib_metadata.version("pygobject")).release
-
-hiddenimports = ['gi._error', 'gi._option']
-
-# PyGObject 3.50.0 added support for `asyncio`, and attempts to import inside the `_gi` extension.
-if pygobject_version >= (3, 50, 0):
- hiddenimports += ['asyncio']
-
-# PyGobject 3.52.0 added `gi._enum`, which needs to be added to hiddenimports due to being imported from the
-# `_gi` extension.
-if pygobject_version >= (3, 52, 0):
- hiddenimports += ['gi._enum']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Adw.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Adw.py
deleted file mode 100755
index 3327e21..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Adw.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('Adw', '1')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.AppIndicator3.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.AppIndicator3.py
deleted file mode 100755
index 4b9c894..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.AppIndicator3.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('AppIndicator3', '0.1')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Atk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Atk.py
deleted file mode 100755
index b57ee3f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Atk.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import get_hook_config
-from PyInstaller.utils.hooks.gi import GiModuleInfo, collect_glib_translations
-
-
-def hook(hook_api):
- module_info = GiModuleInfo('Atk', '1.0')
- if not module_info.available:
- return
-
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
-
- # Collect translations
- lang_list = get_hook_config(hook_api, "gi", "languages")
- datas += collect_glib_translations('atk10', lang_list)
-
- hook_api.add_datas(datas)
- hook_api.add_binaries(binaries)
- hook_api.add_imports(*hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.AyatanaAppIndicator3.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.AyatanaAppIndicator3.py
deleted file mode 100755
index 36b178a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.AyatanaAppIndicator3.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('AyatanaAppIndicator3', '0.1')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Champlain.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Champlain.py
deleted file mode 100755
index d48def3..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Champlain.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('Champlain', '0.12')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Clutter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Clutter.py
deleted file mode 100755
index 9ad56a6..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Clutter.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('Clutter', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.DBus.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.DBus.py
deleted file mode 100755
index 0580fcb..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.DBus.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('DBus', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GIRepository.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GIRepository.py
deleted file mode 100755
index 5c6961a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GIRepository.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GIRepository', '2.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GLib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GLib.py
deleted file mode 100755
index 6aa236c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GLib.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import glob
-import os
-
-from PyInstaller.compat import is_win
-from PyInstaller.utils.hooks import get_hook_config
-from PyInstaller.utils.hooks.gi import GiModuleInfo, collect_glib_share_files, collect_glib_translations
-
-
-def hook(hook_api):
- module_info = GiModuleInfo('GLib', '2.0')
- if not module_info.available:
- return
-
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
-
- # Collect translations
- lang_list = get_hook_config(hook_api, "gi", "languages")
- datas += collect_glib_translations('glib20', lang_list)
-
- # Collect schemas
- datas += collect_glib_share_files('glib-2.0', 'schemas')
-
- # On Windows, glib needs a spawn helper for g_spawn* API
- if is_win:
- pattern = os.path.join(module_info.get_libdir(), 'gspawn-*-helper*.exe')
- for f in glob.glob(pattern):
- binaries.append((f, '.'))
-
- hook_api.add_datas(datas)
- hook_api.add_binaries(binaries)
- hook_api.add_imports(*hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GModule.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GModule.py
deleted file mode 100755
index 0ccaaaf..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GModule.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GModule', '2.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GObject.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GObject.py
deleted file mode 100755
index 2171165..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GObject.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-from PyInstaller.utils.hooks import check_requirement
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GObject', '2.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
- # gi._gobject removed from PyGObject in version 3.25.1
- if check_requirement('PyGObject < 3.25.1'):
- hiddenimports += ['gi._gobject']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gdk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gdk.py
deleted file mode 100755
index 99fbd08..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gdk.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-from PyInstaller.utils.hooks import get_hook_config
-
-
-def hook(hook_api):
- # Use the Gdk version from hook config, if available. If not, try using Gtk version from hook config, so that we
- # collect Gdk and Gtk of the same version.
- module_versions = get_hook_config(hook_api, 'gi', 'module-versions')
- if module_versions:
- version = module_versions.get('Gdk')
- if not version:
- version = module_versions.get('Gtk', '3.0')
- else:
- version = '3.0'
-
- module_info = GiModuleInfo('Gdk', version)
- if not module_info.available:
- return
-
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
- hiddenimports += ['gi._gi_cairo', 'gi.repository.cairo']
-
- hook_api.add_datas(datas)
- hook_api.add_binaries(binaries)
- hook_api.add_imports(*hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GdkPixbuf.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GdkPixbuf.py
deleted file mode 100755
index 8126328..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GdkPixbuf.py
+++ /dev/null
@@ -1,150 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import glob
-import os
-import shutil
-import subprocess
-
-from PyInstaller import compat
-from PyInstaller.config import CONF # workpath
-from PyInstaller.utils.hooks import get_hook_config, logger
-from PyInstaller.utils.hooks.gi import GiModuleInfo, collect_glib_translations
-
-LOADERS_PATH = os.path.join('gdk-pixbuf-2.0', '2.10.0', 'loaders')
-LOADER_MODULE_DEST_PATH = "lib/gdk-pixbuf/loaders"
-LOADER_CACHE_DEST_PATH = "lib/gdk-pixbuf" # NOTE: some search & replace code depends on / being used on all platforms.
-
-
-def _find_gdk_pixbuf_query_loaders_executable(libdir):
- # Distributions either package gdk-pixbuf-query-loaders in the GI libs directory (not on the path), or on the path
- # with or without a -x64 suffix, depending on the architecture.
- cmds = [
- os.path.join(libdir, 'gdk-pixbuf-2.0', 'gdk-pixbuf-query-loaders'),
- 'gdk-pixbuf-query-loaders-64',
- 'gdk-pixbuf-query-loaders',
- ]
-
- for cmd in cmds:
- cmd_fullpath = shutil.which(cmd)
- if cmd_fullpath is not None:
- return cmd_fullpath
-
- return None
-
-
-def _collect_loaders(libdir):
- # Assume loader plugins have .so library suffix on all non-Windows platforms
- lib_ext = "*.dll" if compat.is_win else "*.so"
-
- # Find all loaders
- loader_libs = []
- pattern = os.path.join(libdir, LOADERS_PATH, lib_ext)
- for f in glob.glob(pattern):
- loader_libs.append(f)
-
- # Sometimes the loaders are stored in a different directory from the library (msys2)
- if not loader_libs:
- pattern = os.path.abspath(os.path.join(libdir, '..', 'lib', LOADERS_PATH, lib_ext))
- for f in glob.glob(pattern):
- loader_libs.append(f)
-
- return loader_libs
-
-
-def _generate_loader_cache(gdk_pixbuf_query_loaders, libdir, loader_libs):
- # Run the "gdk-pixbuf-query-loaders" command and capture its standard output providing an updated loader
- # cache; then write this output to the loader cache bundled with this frozen application. On all platforms,
- # we also move the package structure to point to lib/gdk-pixbuf instead of lib/gdk-pixbuf-2.0/2.10.0 in
- # order to make compatible with macOS .app bundle signing.
- #
- # On macOS we use @executable_path to specify a path relative to the generated bundle. However, on
- # non-Windows, we need to rewrite the loader cache because it is not relocatable by default. See
- # https://bugzilla.gnome.org/show_bug.cgi?id=737523
- #
- # To make it easier to rewrite, we just always write @executable_path, since its significantly easier to
- # find/replace at runtime. :)
- #
- # To permit string munging, decode the encoded bytes output by this command (i.e., enable the
- # "universal_newlines" option).
- #
- # On Fedora, the default loaders cache is /usr/lib64, but the libdir is actually /lib64. To get around this,
- # we pass the path to the loader command, and it will create a cache with the right path.
- #
- # On Windows, the loaders lib directory is relative, starts with 'lib', and uses \\ as path separators
- # (escaped \).
- cachedata = subprocess.run([gdk_pixbuf_query_loaders, *loader_libs],
- check=True,
- stdout=subprocess.PIPE,
- encoding='utf-8').stdout
-
- output_lines = []
- prefix = '"' + os.path.join(libdir, 'gdk-pixbuf-2.0', '2.10.0')
- plen = len(prefix)
-
- win_prefix = '"' + '\\\\'.join(['lib', 'gdk-pixbuf-2.0', '2.10.0'])
- win_plen = len(win_prefix)
-
- msys2_prefix = '"' + os.path.abspath(os.path.join(libdir, '..', 'lib', 'gdk-pixbuf-2.0', '2.10.0'))
- msys2_plen = len(msys2_prefix)
-
- # For each line in the updated loader cache...
- for line in cachedata.splitlines():
- if line.startswith('#'):
- continue
- if line.startswith(prefix):
- line = '"@executable_path/' + LOADER_CACHE_DEST_PATH + line[plen:]
- elif line.startswith(win_prefix):
- line = '"' + LOADER_CACHE_DEST_PATH.replace('/', '\\\\') + line[win_plen:]
- elif line.startswith(msys2_prefix):
- line = ('"' + LOADER_CACHE_DEST_PATH + line[msys2_plen:]).replace('/', '\\\\')
- output_lines.append(line)
-
- return '\n'.join(output_lines)
-
-
-def hook(hook_api):
- module_info = GiModuleInfo('GdkPixbuf', '2.0')
- if not module_info.available:
- return
-
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
-
- libdir = module_info.get_libdir()
-
- # Collect GdkPixbuf loaders and generate loader cache file
- gdk_pixbuf_query_loaders = _find_gdk_pixbuf_query_loaders_executable(libdir)
- logger.debug("gdk-pixbuf-query-loaders executable: %s", gdk_pixbuf_query_loaders)
- if not gdk_pixbuf_query_loaders:
- logger.warning("gdk-pixbuf-query-loaders executable not found in GI library directory or in PATH!")
- else:
- # Find all GdkPixbuf loader modules
- loader_libs = _collect_loaders(libdir)
-
- # Collect discovered loaders
- for lib in loader_libs:
- binaries.append((lib, LOADER_MODULE_DEST_PATH))
-
- # Generate loader cache; we need to store it to CONF['workpath'] so we can collect it as a data file.
- cachedata = _generate_loader_cache(gdk_pixbuf_query_loaders, libdir, loader_libs)
- cachefile = os.path.join(CONF['workpath'], 'loaders.cache')
- with open(cachefile, 'w', encoding='utf-8') as fp:
- fp.write(cachedata)
- datas.append((cachefile, LOADER_CACHE_DEST_PATH))
-
- # Collect translations
- lang_list = get_hook_config(hook_api, "gi", "languages")
- if gdk_pixbuf_query_loaders:
- datas += collect_glib_translations('gdk-pixbuf', lang_list)
-
- hook_api.add_datas(datas)
- hook_api.add_binaries(binaries)
- hook_api.add_imports(*hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gio.py
deleted file mode 100755
index fe34446..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gio.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import glob
-import os
-
-from PyInstaller import compat
-import PyInstaller.log as logging
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-logger = logging.getLogger(__name__)
-
-module_info = GiModuleInfo('Gio', '2.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
-
- # Find Gio modules
- libdir = module_info.get_libdir()
- modules_pattern = None
- gio_libdir = os.path.join(libdir, 'gio', 'modules')
- runtime_path = 'gio_modules'
-
- lib_ext = '*.so'
- if compat.is_win:
- lib_ext = '*.dll'
-
- if not os.path.exists(gio_libdir):
- # homebrew/MSYS2 may install the files elsewhere...
- gio_libdir = os.path.join(os.path.commonprefix([compat.base_prefix, gio_libdir]), 'lib', 'gio', 'modules')
-
- if os.path.exists(gio_libdir):
- modules_pattern = os.path.join(gio_libdir, lib_ext)
- else:
- logger.warning('Could not determine Gio modules path!')
-
- if modules_pattern:
- for f in glob.glob(modules_pattern):
- binaries.append((f, runtime_path))
- cache_file = os.path.join(gio_libdir, 'giomodule.cache')
- if os.path.isfile(cache_file):
- datas.append((cache_file, runtime_path))
- else:
- # To add a new platform add a new elif above with the proper is_ and proper pattern for finding the
- # Gio modules on your platform.
- logger.warning('Bundling Gio modules is not supported on your platform.')
-
- # Bundle the mime cache -- might not be needed on Windows
- # -> this is used for content type detection (also used by GdkPixbuf)
- # -> gio/xdgmime/xdgmime.c looks for mime/mime.cache in the users home directory, followed by XDG_DATA_DIRS if
- # specified in the environment, otherwise it searches /usr/local/share/ and /usr/share/
- if not compat.is_win:
- _mime_searchdirs = ['/usr/local/share', '/usr/share']
- if 'XDG_DATA_DIRS' in os.environ:
- _mime_searchdirs.insert(0, os.environ['XDG_DATA_DIRS'])
-
- for sd in _mime_searchdirs:
- spath = os.path.join(sd, 'mime', 'mime.cache')
- if os.path.exists(spath):
- datas.append((spath, 'share/mime'))
- break
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Graphene.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Graphene.py
deleted file mode 100755
index bfa4d30..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Graphene.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('Graphene', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gsk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gsk.py
deleted file mode 100755
index 9229252..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gsk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('Gsk', '4.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gst.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gst.py
deleted file mode 100755
index 939a37b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gst.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# GStreamer contains a lot of plugins. We need to collect them and bundle them with the exe file. We also need to
-# resolve binary dependencies of these GStreamer plugins.
-
-import pathlib
-
-from PyInstaller.utils.hooks import get_hook_config, include_or_exclude_file
-import PyInstaller.log as logging
-from PyInstaller import isolated
-from PyInstaller.utils.hooks.gi import GiModuleInfo, collect_glib_share_files, collect_glib_translations
-
-logger = logging.getLogger(__name__)
-
-
-@isolated.decorate
-def _get_gst_plugin_path():
- import os
- import gi
- gi.require_version('Gst', '1.0')
- from gi.repository import Gst
- Gst.init(None)
- reg = Gst.Registry.get()
- plug = reg.find_plugin('coreelements')
- path = plug.get_filename()
- return os.path.dirname(path)
-
-
-def _format_plugin_pattern(plugin_name):
- return f"**/*gst{plugin_name}.*"
-
-
-def hook(hook_api):
- module_info = GiModuleInfo('Gst', '1.0')
- if not module_info.available:
- return
-
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
- hiddenimports += ["gi.repository.Gio"]
-
- # Collect data files
- datas += collect_glib_share_files('gstreamer-1.0')
-
- # Translations
- lang_list = get_hook_config(hook_api, "gi", "languages")
- for prog in [
- 'gst-plugins-bad-1.0',
- 'gst-plugins-base-1.0',
- 'gst-plugins-good-1.0',
- 'gst-plugins-ugly-1.0',
- 'gstreamer-1.0',
- ]:
- datas += collect_glib_translations(prog, lang_list)
-
- # Plugins
- try:
- plugin_path = _get_gst_plugin_path()
- except Exception as e:
- logger.warning("Failed to determine gstreamer plugin path: %s", e)
- plugin_path = None
-
- if plugin_path:
- plugin_path = pathlib.Path(plugin_path)
-
- # Obtain optional include/exclude list from hook config
- include_list = get_hook_config(hook_api, "gstreamer", "include_plugins")
- exclude_list = get_hook_config(hook_api, "gstreamer", "exclude_plugins")
-
- # Format plugin basenames into filename patterns for matching
- if include_list is not None:
- include_list = [_format_plugin_pattern(name) for name in include_list]
- if exclude_list is not None:
- exclude_list = [_format_plugin_pattern(name) for name in exclude_list]
-
- # The names of GStreamer plugins typically start with libgst (or just gst, depending on the toolchain). We also
- # need to account for different extensions that might be used on a particular OS (for example, on macOS, the
- # extension may be either .so or .dylib).
- for lib_pattern in ['*gst*.dll', '*gst*.dylib', '*gst*.so']:
- binaries += [(str(filename), 'gst_plugins') for filename in plugin_path.glob(lib_pattern)
- if include_or_exclude_file(filename, include_list, exclude_list)]
-
- hook_api.add_datas(datas)
- hook_api.add_binaries(binaries)
- hook_api.add_imports(*hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstAllocators.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstAllocators.py
deleted file mode 100755
index 119401a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstAllocators.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstAllocators', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstApp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstApp.py
deleted file mode 100755
index 7c25a44..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstApp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstApp', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstAudio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstAudio.py
deleted file mode 100755
index cf18078..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstAudio.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstAudio', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstBadAudio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstBadAudio.py
deleted file mode 100755
index 0f345b9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstBadAudio.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstBadAudio', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstBase.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstBase.py
deleted file mode 100755
index ea6187b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstBase.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstBase', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstCheck.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstCheck.py
deleted file mode 100755
index e631995..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstCheck.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstCheck', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstCodecs.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstCodecs.py
deleted file mode 100755
index ffa643e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstCodecs.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstCodecs', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstController.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstController.py
deleted file mode 100755
index c928843..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstController.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstController', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGL.py
deleted file mode 100755
index 0075eb0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGL.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstGL', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLEGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLEGL.py
deleted file mode 100755
index a3f557d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLEGL.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstGLEGL', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLWayland.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLWayland.py
deleted file mode 100755
index 6ef146d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLWayland.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstGLWayland', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLX11.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLX11.py
deleted file mode 100755
index dd68570..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstGLX11.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstGLX11', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstInsertBin.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstInsertBin.py
deleted file mode 100755
index c7980bc..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstInsertBin.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstInsertBin', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstMpegts.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstMpegts.py
deleted file mode 100755
index b690192..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstMpegts.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstMpegts', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstNet.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstNet.py
deleted file mode 100755
index 0c268af..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstNet.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstNet', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPbutils.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPbutils.py
deleted file mode 100755
index 173b695..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPbutils.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstPbutils', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPlay.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPlay.py
deleted file mode 100755
index edb6020..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPlay.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstPlay', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPlayer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPlayer.py
deleted file mode 100755
index 80cb93f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstPlayer.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstPlayer', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtp.py
deleted file mode 100755
index d18e58d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstRtp', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtsp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtsp.py
deleted file mode 100755
index 09382dd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtsp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstRtsp', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtspServer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtspServer.py
deleted file mode 100755
index d023c3f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstRtspServer.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstRtspServer', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstSdp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstSdp.py
deleted file mode 100755
index 2a78e2b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstSdp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstSdp', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstTag.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstTag.py
deleted file mode 100755
index dbac756..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstTag.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstTag', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstTranscoder.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstTranscoder.py
deleted file mode 100755
index 3cc1dcf..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstTranscoder.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstTranscoder', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVideo.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVideo.py
deleted file mode 100755
index 398b503..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVideo.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstVideo', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkan.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkan.py
deleted file mode 100755
index 588c073..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkan.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstVulkan', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkanWayland.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkanWayland.py
deleted file mode 100755
index aaef939..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkanWayland.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstVulkanWayland', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkanXCB.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkanXCB.py
deleted file mode 100755
index 2351a13..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstVulkanXCB.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstVulkanXCB', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstWebRTC.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstWebRTC.py
deleted file mode 100755
index 9fcac06..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GstWebRTC.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GstWebRTC', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gtk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gtk.py
deleted file mode 100755
index 2495b1d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Gtk.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import os
-import os.path
-
-from PyInstaller.compat import is_win
-from PyInstaller.utils.hooks import get_hook_config
-from PyInstaller.utils.hooks.gi import GiModuleInfo, collect_glib_etc_files, collect_glib_share_files, \
- collect_glib_translations
-
-
-def hook(hook_api):
- module_info = GiModuleInfo('Gtk', '3.0', hook_api=hook_api) # Pass hook_api to read version from hook config
- if not module_info.available:
- return
-
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
-
- # Collect fontconfig data
- datas += collect_glib_share_files('fontconfig')
-
- # Icons, themes, translations
- icon_list = get_hook_config(hook_api, "gi", "icons")
- if icon_list is not None:
- for icon in icon_list:
- datas += collect_glib_share_files(os.path.join('icons', icon))
- else:
- datas += collect_glib_share_files('icons')
-
- # Themes
- theme_list = get_hook_config(hook_api, "gi", "themes")
- if theme_list is not None:
- for theme in theme_list:
- datas += collect_glib_share_files(os.path.join('themes', theme))
- else:
- datas += collect_glib_share_files('themes')
-
- # Translations
- lang_list = get_hook_config(hook_api, "gi", "languages")
- datas += collect_glib_translations(f'gtk{module_info.version[0]}0', lang_list)
-
- # These only seem to be required on Windows
- if is_win:
- datas += collect_glib_etc_files('fonts')
- datas += collect_glib_etc_files('pango')
- datas += collect_glib_share_files('fonts')
-
- hook_api.add_datas(datas)
- hook_api.add_binaries(binaries)
- hook_api.add_imports(*hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkChamplain.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkChamplain.py
deleted file mode 100755
index 777b620..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkChamplain.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GtkChamplain', '0.12')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkClutter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkClutter.py
deleted file mode 100755
index cc4fcd7..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkClutter.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('GtkClutter', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkSource.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkSource.py
deleted file mode 100755
index 5e7efa7..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkSource.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo, collect_glib_share_files
-
-
-def hook(hook_api):
- module_info = GiModuleInfo('GtkSource', '3.0', hook_api=hook_api) # Pass hook_api to read version from hook config
- if not module_info.available:
- return
-
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
-
- # Collect data files
- # The data directory name contains verbatim version, e.g.:
- # * GtkSourceView-3.0 -> /usr/share/gtksourceview-3.0
- # * GtkSourceView-4 -> /usr/share/gtksourceview-4
- # * GtkSourceView-5 -> /usr/share/gtksourceview-5
- datas += collect_glib_share_files(f'gtksourceview-{module_info.version}')
-
- hook_api.add_datas(datas)
- hook_api.add_binaries(binaries)
- hook_api.add_imports(*hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkosxApplication.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkosxApplication.py
deleted file mode 100755
index 3437edf..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.GtkosxApplication.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.compat import is_darwin
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-if is_darwin:
- module_info = GiModuleInfo('GtkosxApplication', '1.0')
- if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.HarfBuzz.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.HarfBuzz.py
deleted file mode 100755
index 41cef14..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.HarfBuzz.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('HarfBuzz', '0.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.OsmGpsMap.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.OsmGpsMap.py
deleted file mode 100755
index 477f0c0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.OsmGpsMap.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo("OsmGpsMap", "1.0")
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Pango.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Pango.py
deleted file mode 100755
index 3d8b865..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Pango.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('Pango', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.PangoCairo.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.PangoCairo.py
deleted file mode 100755
index 7c058fd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.PangoCairo.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('PangoCairo', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Rsvg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Rsvg.py
deleted file mode 100755
index e3ad6d2..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.Rsvg.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('Rsvg', '2.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.cairo.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.cairo.py
deleted file mode 100755
index 71fed30..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.cairo.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('cairo', '1.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.freetype2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.freetype2.py
deleted file mode 100755
index ffea7a1..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.freetype2.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('freetype2', '2.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.xlib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.xlib.py
deleted file mode 100755
index 1c2bde3..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-gi.repository.xlib.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks.gi import GiModuleInfo
-
-module_info = GiModuleInfo('xlib', '2.0')
-if module_info.available:
- binaries, datas, hiddenimports = module_info.collect_typelib_data()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-heapq.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-heapq.py
deleted file mode 100755
index 373025f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-heapq.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Only required when run as `__main__`.
-excludedimports = ["doctest"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-idlelib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-idlelib.py
deleted file mode 100755
index 505378d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-idlelib.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('idlelib')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-importlib_metadata.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-importlib_metadata.py
deleted file mode 100755
index 7abf511..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-importlib_metadata.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2019-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-importlib_metadata is a library to access the metadata for a Python package. This functionality intends to replace most
-uses of pkg_resources entry point API and metadata API.
-"""
-
-from PyInstaller.utils.hooks import copy_metadata
-
-# Normally, we should never need to use copy_metadata() in a hook since metadata requirements detection is now
-# automatic. However, that detection first uses `PyiModuleGraph.get_code_using("importlib_metadata")` to find
-# files which `import importlib_metadata` and `get_code_using()` intentionally excludes internal imports. This
-# means that importlib_metadata is not scanned for usages of importlib_metadata and therefore when
-# importlib_metadata uses its own API to get its version, this goes undetected. Therefore, we must collect its
-# metadata manually.
-datas = copy_metadata('importlib_metadata')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-importlib_resources.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-importlib_resources.py
deleted file mode 100755
index b43b19b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-importlib_resources.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2019-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-`importlib_resources` is a backport of the 3.9+ module `importlib.resources`
-"""
-
-from PyInstaller.utils.hooks import check_requirement, collect_data_files
-
-# Prior to v1.2.0, a `version.txt` file is used to set __version__. Later versions use `importlib.metadata`.
-if check_requirement("importlib_resources < 1.2.0"):
- datas = collect_data_files("importlib_resources", includes=["version.txt"])
-
-if check_requirement("importlib_resources >= 1.3.1"):
- hiddenimports = ['importlib_resources.trees']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-keyring.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-keyring.py
deleted file mode 100755
index acbd5ff..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-keyring.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, copy_metadata
-
-# Collect backends
-hiddenimports = collect_submodules('keyring.backends')
-
-# Keyring performs backend plugin discovery using setuptools entry points, which are listed in the metadata. Therefore,
-# we need to copy the metadata, otherwise no backends will be found at run-time.
-datas = copy_metadata('keyring')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-kivy.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-kivy.py
deleted file mode 100755
index fd01f06..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-kivy.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import log as logging
-from PyInstaller.utils.hooks import check_requirement
-
-if check_requirement('kivy >= 1.9.1'):
- from kivy.tools.packaging.pyinstaller_hooks import (add_dep_paths, get_deps_all, get_factory_modules, kivy_modules)
- from kivy.tools.packaging.pyinstaller_hooks import excludedimports, datas # noqa: F401
-
- add_dep_paths()
-
- hiddenimports = get_deps_all()['hiddenimports']
- hiddenimports = list(set(get_factory_modules() + kivy_modules + hiddenimports))
-else:
- logger = logging.getLogger(__name__)
- logger.warning('Hook disabled because of Kivy version < 1.9.1')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-lib2to3.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-lib2to3.py
deleted file mode 100755
index 83b0f08..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-lib2to3.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This is needed to bundle lib2to3 Grammars files
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('lib2to3')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backend_bases.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backend_bases.py
deleted file mode 100755
index f65344c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backend_bases.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-excludedimports = ['IPython']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.backend_qtagg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.backend_qtagg.py
deleted file mode 100755
index b3067db..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.backend_qtagg.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This module conditionally imports PyQt6:
-# https://github.com/matplotlib/matplotlib/blob/9e18a343fb58a2978a8e27df03190ed21c61c343/lib/matplotlib/backends/backend_qtagg.py#L52-L53
-# Suppress this import to prevent PyQt6 from being accidentally pulled in; the actually relevant Qt bindings are
-# determined by our hook for `matplotlib.backends.qt_compat` module.
-excludedimports = ['PyQt6']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.backend_qtcairo.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.backend_qtcairo.py
deleted file mode 100755
index 0b9174b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.backend_qtcairo.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This module conditionally imports PyQt6:
-# https://github.com/matplotlib/matplotlib/blob/9e18a343fb58a2978a8e27df03190ed21c61c343/lib/matplotlib/backends/backend_qtcairo.py#L24-L25
-# Suppress this import to prevent PyQt6 from being accidentally pulled in; the actually relevant Qt bindings are
-# determined by our hook for `matplotlib.backends.qt_compat` module.
-excludedimports = ['PyQt6']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.py
deleted file mode 100755
index 935ca80..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.compat import is_darwin
-from PyInstaller.utils.hooks import logger, get_hook_config
-from PyInstaller import isolated
-
-
-@isolated.decorate
-def _get_configured_default_backend():
- """
- Return the configured default matplotlib backend name, if available as matplotlib.rcParams['backend'] (or overridden
- by MPLBACKEND environment variable. If the value of matplotlib.rcParams['backend'] corresponds to the auto-sentinel
- object, returns None
- """
- import matplotlib
- # matplotlib.rcParams overrides the __getitem__ implementation and attempts to determine and load the default
- # backend using pyplot.switch_backend(). Therefore, use dict.__getitem__().
- val = dict.__getitem__(matplotlib.rcParams, 'backend')
- if isinstance(val, str):
- return val
- return None
-
-
-@isolated.decorate
-def _list_available_mpl_backends():
- """
- Returns the names of all available matplotlib backends.
- """
- import matplotlib
- return matplotlib.rcsetup.all_backends
-
-
-@isolated.decorate
-def _check_mpl_backend_importable(module_name):
- """
- Attempts to import the given module name (matplotlib backend module).
-
- Exceptions are propagated to caller.
- """
- __import__(module_name)
-
-
-# Bytecode scanning
-def _recursive_scan_code_objects_for_mpl_use(co):
- """
- Recursively scan the bytecode for occurrences of matplotlib.use() or mpl.use() calls with const arguments, and
- collect those arguments into list of used matplotlib backend names.
- """
-
- from PyInstaller.depend.bytecode import any_alias, recursive_function_calls
-
- mpl_use_names = {
- *any_alias("matplotlib.use"),
- *any_alias("mpl.use"), # matplotlib is commonly aliased as mpl
- }
-
- backends = []
- for calls in recursive_function_calls(co).values():
- for name, args in calls:
- # matplotlib.use(backend) or matplotlib.use(backend, force)
- # We support only literal arguments. Similarly, kwargs are
- # not supported.
- if len(args) not in {1, 2} or not isinstance(args[0], str):
- continue
- if name in mpl_use_names:
- backends.append(args[0])
-
- return backends
-
-
-def _backend_module_name(name):
- """
- Converts matplotlib backend name to its corresponding module name.
-
- Equivalent to matplotlib.cbook._backend_module_name().
- """
- if name.startswith("module://"):
- return name[9:]
- return f"matplotlib.backends.backend_{name.lower()}"
-
-
-def _autodetect_used_backends(hook_api):
- """
- Returns a list of automatically-discovered matplotlib backends in use, or the name of the default matplotlib
- backend. Implements the 'auto' backend selection method.
- """
- # Scan the code for matplotlib.use()
- modulegraph = hook_api.analysis.graph
- mpl_code_objs = modulegraph.get_code_using("matplotlib")
- used_backends = []
- for name, co in mpl_code_objs.items():
- co_backends = _recursive_scan_code_objects_for_mpl_use(co)
- if co_backends:
- logger.info(
- "Discovered Matplotlib backend(s) via `matplotlib.use()` call in module %r: %r", name, co_backends
- )
- used_backends += co_backends
-
- # Deduplicate and sort the list of used backends before displaying it.
- used_backends = sorted(set(used_backends))
-
- if used_backends:
- HOOK_CONFIG_DOCS = 'https://pyinstaller.org/en/stable/hooks-config.html#matplotlib-hooks'
- logger.info(
- "The following Matplotlib backends were discovered by scanning for `matplotlib.use()` calls: %r. If your "
- "backend of choice is not in this list, either add a `matplotlib.use()` call to your code, or configure "
- "the backend collection via hook options (see: %s).", used_backends, HOOK_CONFIG_DOCS
- )
- return used_backends
-
- # Determine the default matplotlib backend.
- #
- # Ideally, this would be done by calling ``matplotlib.get_backend()``. However, that function tries to switch to the
- # default backend (calling ``matplotlib.pyplot.switch_backend()``), which seems to occasionally fail on our linux CI
- # with an error and, on other occasions, returns the headless Agg backend instead of the GUI one (even with display
- # server running). Furthermore, using ``matplotlib.get_backend()`` returns headless 'Agg' when display server is
- # unavailable, which is not ideal for automated builds.
- #
- # Therefore, we try to emulate ``matplotlib.get_backend()`` ourselves. First, we try to obtain the configured
- # default backend from settings (rcparams and/or MPLBACKEND environment variable). If that is unavailable, we try to
- # find the first importable GUI-based backend, using the same list as matplotlib.pyplot.switch_backend() uses for
- # automatic backend selection. The difference is that we only test whether the backend module is importable, without
- # trying to switch to it.
- default_backend = _get_configured_default_backend() # isolated sub-process
- if default_backend:
- logger.info("Found configured default matplotlib backend: %s", default_backend)
- return [default_backend]
-
- # `QtAgg` supersedes `Qt5Agg`; however, we keep `Qt5Agg` in the candidate list to support older versions of
- # matplotlib that do not have `QtAgg`.
- candidates = ["QtAgg", "Qt5Agg", "Gtk4Agg", "Gtk3Agg", "TkAgg", "WxAgg"]
- if is_darwin:
- candidates = ["MacOSX"] + candidates
- logger.info("Trying determine the default backend as first importable candidate from the list: %r", candidates)
-
- for candidate in candidates:
- try:
- module_name = _backend_module_name(candidate)
- _check_mpl_backend_importable(module_name) # NOTE: uses an isolated sub-process.
- except Exception:
- continue
- return [candidate]
-
- # Fall back to headless Agg backend
- logger.info("None of the backend candidates could be imported; falling back to headless Agg!")
- return ['Agg']
-
-
-def _collect_all_importable_backends(hook_api):
- """
- Returns a list of all importable matplotlib backends. Implements the 'all' backend selection method.
- """
- # List of the human-readable names of all available backends.
- backend_names = _list_available_mpl_backends() # NOTE: retrieved in an isolated sub-process.
- logger.info("All available matplotlib backends: %r", backend_names)
-
- # Try to import the module(s).
- importable_backends = []
-
- # List of backends to exclude; Qt4 is not supported by PyInstaller anymore.
- exclude_backends = {'Qt4Agg', 'Qt4Cairo'}
-
- # Ignore "CocoaAgg" on OSes other than macOS; attempting to import it on other OSes halts the current
- # (sub)process without printing output or raising exceptions, preventing reliable detection. Apply the
- # same logic for the (newer) "MacOSX" backend.
- if not is_darwin:
- exclude_backends |= {'CocoaAgg', 'MacOSX'}
-
- # For safety, attempt to import each backend in an isolated sub-process.
- for backend_name in backend_names:
- if backend_name in exclude_backends:
- logger.info(' Matplotlib backend %r: excluded', backend_name)
- continue
-
- try:
- module_name = _backend_module_name(backend_name)
- _check_mpl_backend_importable(module_name) # NOTE: uses an isolated sub-process.
- except Exception:
- # Backend is not importable, for whatever reason.
- logger.info(' Matplotlib backend %r: ignored due to import error', backend_name)
- continue
-
- logger.info(' Matplotlib backend %r: added', backend_name)
- importable_backends.append(backend_name)
-
- return importable_backends
-
-
-def hook(hook_api):
- # Backend collection setting
- backends_method = get_hook_config(hook_api, 'matplotlib', 'backends')
- if backends_method is None:
- backends_method = 'auto' # default method
-
- # Select backend(s)
- if backends_method == 'auto':
- logger.info("Matplotlib backend selection method: automatic discovery of used backends")
- backend_names = _autodetect_used_backends(hook_api)
- elif backends_method == 'all':
- logger.info("Matplotlib backend selection method: collection of all importable backends")
- backend_names = _collect_all_importable_backends(hook_api)
- else:
- logger.info("Matplotlib backend selection method: user-provided name(s)")
- if isinstance(backends_method, str):
- backend_names = [backends_method]
- else:
- assert isinstance(backends_method, list), "User-provided backend name(s) must be either a string or a list!"
- backend_names = backends_method
-
- # Deduplicate and sort the list of selected backends before displaying it.
- backend_names = sorted(set(backend_names))
-
- logger.info("Selected matplotlib backends: %r", backend_names)
-
- # Set module names as hiddenimports
- module_names = [_backend_module_name(backend) for backend in backend_names] # backend name -> module name
- hook_api.add_imports(*module_names)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.qt_compat.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.qt_compat.py
deleted file mode 100755
index 4e12fff..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.backends.qt_compat.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import qt as qtutils
-
-# This module conditionally imports all Qt bindings. Prevent all available bindings from being pulled in by trying to
-# select the most applicable one.
-#
-# The preference order for this module appears to be: PyQt6, PySide6, PyQt5, PySide2 (or just PyQt5, PySide2 if Qt5
-# bindings are forced). See:
-# https://github.com/matplotlib/matplotlib/blob/9e18a343fb58a2978a8e27df03190ed21c61c343/lib/matplotlib/backends/qt_compat.py#L113-L125
-#
-# We, however, use the default preference order of the helper function, in order to keep it consistent across multiple
-# hooks that use the same helper.
-excludedimports = qtutils.exclude_extraneous_qt_bindings(
- hook_name="hook-matplotlib.backends.qt_compat",
- qt_bindings_order=None,
-)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.numerix.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.numerix.py
deleted file mode 100755
index 924b400..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.numerix.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-The matplotlib.numerix package sneaks these imports in under the radar.
-"""
-
-hiddenimports = [
- 'fft',
- 'linear_algebra',
- 'random_array',
- 'ma',
- 'mlab',
-]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.py
deleted file mode 100755
index e628e9b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import isolated
-from PyInstaller import compat
-from PyInstaller.utils import hooks as hookutils
-
-
-@isolated.decorate
-def mpl_data_dir():
- import matplotlib
- return matplotlib.get_data_path()
-
-
-datas = [
- (mpl_data_dir(), "matplotlib/mpl-data"),
-]
-
-binaries = []
-
-# Windows PyPI wheels for `matplotlib` >= 3.7.0 use `delvewheel`.
-# In addition to DLLs from `matplotlib.libs` directory, which should be picked up automatically by dependency analysis
-# in contemporary PyInstaller versions, we also need to collect the load-order file. This used to be required for
-# python <= 3.7 (that lacked `os.add_dll_directory`), but is also needed for Anaconda python 3.8 and 3.9, where
-# `delvewheel` falls back to load-order file codepath due to Anaconda breaking `os.add_dll_directory` implementation.
-if compat.is_win and hookutils.check_requirement('matplotlib >= 3.7.0'):
- delvewheel_datas, delvewheel_binaries = hookutils.collect_delvewheel_libs_directory('matplotlib')
-
- datas += delvewheel_datas
- binaries += delvewheel_binaries
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.pyplot.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.pyplot.py
deleted file mode 100755
index 2f78597..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-matplotlib.pyplot.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-excludedimports = ['IPython', "IPython.core.pylabtools"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-multiprocessing.util.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-multiprocessing.util.py
deleted file mode 100755
index b9363ba..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-multiprocessing.util.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# In Python 3.8 mutliprocess.utils has _cleanup_tests() to cleanup multiprocessing resources when multiprocessing tests
-# completed. This function import `tests` which is the complete Python test-suite, pulling in many more dependencies,
-# e.g., tkinter.
-
-excludedimports = ['test']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-numpy.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-numpy.py
deleted file mode 100755
index d2a49d0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-numpy.py
+++ /dev/null
@@ -1,129 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader. Additional
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# --- Copyright Disclaimer ---
-#
-# An earlier copy of this hook has been submitted to the NumPy project, where it was integrated in v1.23.0rc1
-# (https://github.com/numpy/numpy/pull/20745), under terms and conditions outlined in their repository [1].
-#
-# A special provision is hereby granted to the NumPy project that allows the NumPy copy of the hook to incorporate the
-# changes made to this (PyInstaller's) copy of the hook, subject to their licensing terms as opposed to PyInstaller's
-# (stricter) licensing terms.
-#
-# .. refs:
-#
-# [1] NumPy's license: https://github.com/numpy/numpy/blob/master/LICENSE.txt
-
-# NOTE: when comparing the contents of this hook and the NumPy version of the hook (for example, to port changes), keep
-# in mind that this copy is PyInstaller-centric - it caters to the version of PyInstaller it is bundled with, but needs
-# to account for different behavior of different NumPy versions. In contrast, the NumPy copy of the hook caters to the
-# version of NumPy it is bundled with, but should account for behavior differences in different PyInstaller versions.
-
-# Override the default hook priority so that our copy of hook is used instead of NumPy's one (which has priority 0,
-# the default for upstream hooks).
-# $PyInstaller-Hook-Priority: 1
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks import (
- get_installer,
- collect_dynamic_libs,
-)
-
-from packaging.version import Version
-
-numpy_version = Version(compat.importlib_metadata.version("numpy")).release
-numpy_installer = get_installer('numpy')
-
-hiddenimports = []
-datas = []
-binaries = []
-
-# Collect shared libraries that are bundled inside the numpy's package directory. With PyInstaller 6.x, the directory
-# layout of collected shared libraries should be preserved (to match behavior of the binary dependency analysis). In
-# earlier versions of PyInstaller, it was necessary to collect the shared libraries into application's top-level
-# directory (because that was also what binary dependency analysis in PyInstaller < 6.0 did).
-binaries += collect_dynamic_libs("numpy")
-
-# Check if we are using Anaconda-packaged numpy
-if numpy_installer == 'conda':
- # Collect DLLs for NumPy and its dependencies (MKL, OpenBlas, OpenMP, etc.) from the communal Conda bin directory.
- from PyInstaller.utils.hooks import conda_support
- datas += conda_support.collect_dynamic_libs("numpy", dependencies=True)
-
-# NumPy 1.26 started using `delvewheel` for its Windows PyPI wheels. While contemporary PyInstaller versions
-# automatically pick up DLLs from external `numpy.libs` directory, this does not work on Anaconda python 3.8 and 3.9
-# due to defunct `os.add_dll_directory`, which forces `delvewheel` to use the old load-order file approach. So we need
-# to explicitly ensure that load-order file as well as DLLs are collected.
-#
-# Under contemporary python versions, we might still need to explicitly collect the DLLs from `numpy.libs` directory
-# to accommodate the cases when some other package's `.lib` directory (for example, `pandas.libs`) contains a DLL
-# with the same name, and binary dependency analysis ends up resolving that one.
-#
-# The installer check compares against 'conda', because PyPI wheels might be installed by installers other than 'pip'
-# (for example, 'uv' - see #9360).
-if compat.is_win and numpy_version >= (1, 26) and numpy_installer != 'conda':
- from PyInstaller.utils.hooks import collect_delvewheel_libs_directory
- datas, binaries = collect_delvewheel_libs_directory("numpy", datas=datas, binaries=binaries)
-
-# Submodules PyInstaller cannot detect (probably because they are only imported by extension modules, which PyInstaller
-# cannot read).
-if numpy_version >= (2, 0):
- # In v2.0.0, `numpy.core` was renamed to `numpy._core`.
- # See https://github.com/numpy/numpy/commit/47b70cbffd672849a5d3b9b6fa6e515700460fd0
- hiddenimports += ['numpy._core._dtype_ctypes', 'numpy._core._multiarray_tests']
-else:
- hiddenimports += ['numpy.core._dtype_ctypes']
-
- # See https://github.com/numpy/numpy/commit/99104bd2d0557078d7ea9a590129c87dd63df623
- if numpy_version >= (1, 25):
- hiddenimports += ['numpy.core._multiarray_tests']
-
-# Starting with v2.3.0, we need to add `numpy._core._exceptions` to hiddenimports; in previous versions, this module
-# was picked up due to explicit import in `numpy._core._methods`, which was removed as part of cleanup in
-# https://github.com/numpy/numpy/commit/a51a4f5c10aa9b7962ff1e7e9b5f9b7d91c51489
-if numpy_version >= (2, 3, 0):
- hiddenimports += ['numpy._core._exceptions']
-
-# This hidden import was removed from NumPy hook in v1.25.0 (https://github.com/numpy/numpy/pull/22666). According to
-# comment in the linked PR, it should have been unnecessary since v1.19.
-if compat.is_conda and numpy_version < (1, 19):
- hiddenimports += ["six"]
-
-# Remove testing and building code and packages that are referenced throughout NumPy but are not really dependencies.
-excludedimports = [
- "scipy",
- "pytest",
- "nose",
- "f2py",
- "setuptools",
-]
-
-# As of v1.22.0, numpy.testing (imported for example by some scipy modules) requires numpy.distutils and distutils.
-# This was due to numpy.testing adding import of numpy.testing._private.extbuild, which in turn imported numpy.distutils
-# and distutils. These imports were moved into functions that require them in v1.22.2 and v.1.23.0.
-# See: https://github.com/numpy/numpy/pull/20831 and https://github.com/numpy/numpy/pull/20906
-# So we can exclude them for all numpy versions except for v1.22.0 and v1.22.1 - the main motivation is to avoid pulling
-# in `setuptools` (which nowadays provides its vendored version of `distutils`).
-if numpy_version < (1, 22, 0) or numpy_version > (1, 22, 1):
- excludedimports += [
- "distutils",
- "numpy.distutils",
- ]
-
-# In numpy v2.0.0, numpy.f2py submodule has been added to numpy's `__all__` attribute. Therefore, using
-# `from numpy import *` leads to an error if `numpy.f2py` is excluded (seen in scipy 1.14). The exclusion in earlier
-# releases was not reported to cause any issues, so keep it around. Although it should be noted that it does break an
-# explicit import (i.e., `import numpy.f2py`) from user's code as well, because it prevents collection of other
-# submodules from `numpy.f2py`.
-if numpy_version < (2, 0):
- excludedimports += [
- "numpy.f2py",
- ]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.io.clipboard.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.io.clipboard.py
deleted file mode 100755
index 2395920..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.io.clipboard.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This module conditionally imports PyQt5:
-# https://github.com/pandas-dev/pandas/blob/95308514e1221200e4526dfaf248283f3d7ade06/pandas/io/clipboard/__init__.py#L578-L597
-# Suppress this import to prevent PyQt5 from being accidentally pulled in; the actually relevant Qt bindings are
-# determined by our hook for `qtpy` module, which contemporary versions of pandas mandate as part of `clipboard` and
-# `all` extras:
-# https://github.com/pandas-dev/pandas/blob/95308514e1221200e4526dfaf248283f3d7ade06/pyproject.toml#L86
-# https://github.com/pandas-dev/pandas/blob/95308514e1221200e4526dfaf248283f3d7ade06/pyproject.toml#L115
-excludedimports = ['PyQt5']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.io.formats.style.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.io.formats.style.py
deleted file mode 100755
index 2a56828..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.io.formats.style.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# This module indirectly imports jinja2
-hiddenimports = ['jinja2']
-
-# It also requires template file stored in pandas/io/formats/templates
-datas = collect_data_files('pandas.io.formats')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.plotting.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.plotting.py
deleted file mode 100755
index 948dd88..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.plotting.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import check_requirement
-
-# Starting with pandas 1.3.0, pandas.plotting._matplotlib is imported via importlib.import_module() and needs to be
-# added to hidden imports. But do this only if matplotlib is available in the first place (as it is soft dependency
-# of pandas).
-if check_requirement('pandas >= 1.3.0') and check_requirement('matplotlib'):
- hiddenimports = ['pandas.plotting._matplotlib']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.py
deleted file mode 100755
index 3b0612a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pandas.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2017-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks import collect_submodules, get_installer
-
-from packaging.version import Version
-
-pandas_version = Version(compat.importlib_metadata.version("pandas")).release
-pandas_installer = get_installer('pandas')
-
-datas = []
-binaries = []
-
-# Pandas keeps Python extensions loaded with dynamic imports here.
-hiddenimports = collect_submodules('pandas._libs')
-
-# Pandas 1.2.0 and later require cmath hidden import on linux and macOS. On Windows, this is not strictly required, but
-# we add it anyway to keep things simple (and future-proof).
-if pandas_version >= (1, 2, 0):
- hiddenimports += ['cmath']
-
-# Pandas 2.1.0 started using `delvewheel` for its Windows PyPI wheels. Ensure that DLLs from `pandas.libs` directory are
-# collected regardless of whether binary dependency analysis manages to pick them up or not. See a similar block in the
-# `numpy` hook for additional explanation.
-if compat.is_win and pandas_version >= (2, 1, 0) and pandas_installer != 'conda':
- from PyInstaller.utils.hooks import collect_delvewheel_libs_directory
- datas, binaries = collect_delvewheel_libs_directory("pandas", datas=datas, binaries=binaries)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pickle.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pickle.py
deleted file mode 100755
index 8d023bb..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pickle.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Only required when run as `__main__`
-excludedimports = ["argparse", "doctest"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pkg_resources.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pkg_resources.py
deleted file mode 100755
index 286671f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pkg_resources.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, can_import_module
-from PyInstaller.utils.hooks.setuptools import setuptools_info
-
-hiddenimports = []
-excludedimports = ['__main__']
-
-# pkg_resources keeps vendored modules in its _vendor subpackage, and does sys.meta_path based import magic to expose
-# them as pkg_resources.extern.*
-#
-# With setuptools >= 71.0, pkg_resources ceased to vendor packages, because vendoring is now done at the setuptools
-# level.
-if setuptools_info.available and setuptools_info.version < (71, 0, 0):
- # The `railroad` package is an optional requirement for `pyparsing`. `pyparsing.diagrams` depends on `railroad`, so
- # filter it out when `railroad` is not available.
- if can_import_module('railroad'):
- hiddenimports += collect_submodules('pkg_resources._vendor')
- else:
- hiddenimports += collect_submodules(
- 'pkg_resources._vendor', filter=lambda name: 'pkg_resources._vendor.pyparsing.diagram' not in name
- )
-
- # pkg_resources v45.0 dropped support for Python 2 and added this module printing a warning. We could save some
- # bytes if we would replace this by a fake module.
- if setuptools_info.version >= (45, 0, 0) and setuptools_info.version < (49, 1, 1):
- hiddenimports += ['pkg_resources.py2_warn']
-
- # As of v60.7, setuptools vendored jaraco and has pkg_resources use it. Currently, the pkg_resources._vendor.jaraco
- # namespace package cannot be automatically scanned due to limited support for pure namespace packages in our hook
- # utilities.
- #
- # In setuptools 60.7.0, the vendored jaraco.text package included "Lorem Ipsum.txt" data file, which also has to be
- # collected. However, the presence of the data file (and the resulting directory hierarchy) confuses the importer's
- # redirection logic; instead of trying to work-around that, tell user to upgrade or downgrade their setuptools.
- if setuptools_info.version == (60, 7, 0):
- raise SystemExit(
- "ERROR: Setuptools 60.7.0 is incompatible with PyInstaller. "
- "Downgrade to an earlier version or upgrade to a later version."
- )
- # In setuptools 60.7.1, the "Lorem Ipsum.txt" data file was dropped from the vendored jaraco.text package, so we can
- # accommodate it with couple of hidden imports.
- elif setuptools_info.version >= (60, 7, 1):
- hiddenimports += [
- 'pkg_resources._vendor.jaraco.functools',
- 'pkg_resources._vendor.jaraco.context',
- 'pkg_resources._vendor.jaraco.text',
- ]
-
- # As of setuptools 70.0.0, we need pkg_resources.extern added to hidden imports.
- if setuptools_info.version >= (70, 0, 0):
- hiddenimports += [
- 'pkg_resources.extern',
- ]
-
-# Some more hidden imports. See:
-# https://github.com/pyinstaller/pyinstaller-hooks-contrib/issues/15#issuecomment-663699288 `packaging` can either be
-# its own package, or embedded in `pkg_resources._vendor.packaging`, or both.
-hiddenimports += collect_submodules('packaging')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-platform.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-platform.py
deleted file mode 100755
index 66aca00..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-platform.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-import sys
-
-excludedimports = []
-
-# see https://github.com/python/cpython/blob/3.9/Lib/platform.py#L411
-# This will exclude `plistlib` for sys.platform != 'darwin'
-if sys.platform != 'darwin':
- excludedimports += ["plistlib"]
-
-# Avoid collecting `_ios_support`, which in turn triggers unnecessary collection of `libobjc` shared library if the
-# latter happens to be available on the build system.
-# See https://github.com/pyinstaller/pyinstaller/issues/9333, as well as
-# https://github.com/python/cpython/blob/v3.13.0/Lib/platform.py#L508-L521
-# and
-# https://github.com/python/cpython/blob/v3.13.0/Lib/_ios_support.py#L13
-if sys.platform != 'ios':
- excludedimports += ["_ios_support"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pygments.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pygments.py
deleted file mode 100755
index 529d82b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pygments.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-PyInstaller hook file for Pygments. Tested with version 2.0.2.
-"""
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# The following applies to pygments version 2.0.2, as reported by ``pip show pygments``.
-#
-# From pygments.formatters, line 37::
-#
-# def _load_formatters(module_name):
-# """Load a formatter (and all others in the module too)."""
-# mod = __import__(module_name, None, None, ['__all__'])
-#
-# Therefore, we need all the modules in ``pygments.formatters``.
-
-hiddenimports = collect_submodules('pygments.formatters')
-hiddenimports.extend(collect_submodules('pygments.lexers'))
-hiddenimports.extend(collect_submodules('pygments.styles'))
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pytz.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pytz.py
deleted file mode 100755
index a44d29a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pytz.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# On Linux pytz installed from distribution repository uses zoneinfo from /usr/share/zoneinfo/ and no data files might
-# be collected.
-datas = collect_data_files('pytz')
-
-# pytz references pkg_resources in a fall-back codepath that should normally not be reached; add an exclude to prevent
-# (now deprecated) pkg_resources from being pulled in the frozen application.
-excludedimports = ['pkg_resources']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pytzdata.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pytzdata.py
deleted file mode 100755
index e45626c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-pytzdata.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("pytzdata")
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-qtawesome.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-qtawesome.py
deleted file mode 100755
index 9829a03..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-qtawesome.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2017-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Hook for QtAwesome (https://github.com/spyder-ide/qtawesome).
-Font files and charmaps need to be included with module.
-Tested with QtAwesome 0.4.4 and Python 3.6 on macOS 10.12.4.
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('qtawesome')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-qtpy.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-qtpy.py
deleted file mode 100755
index a6ce00c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-qtpy.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import qt as qtutils
-
-# This module conditionally imports all Qt bindings. Prevent all available bindings from being pulled in by trying to
-# select the most applicable one.
-#
-# The preference order for this module appears to be: PyQt5, PySide2, PyQt6, PySide6. See:
-# https://github.com/spyder-ide/qtpy/blob/3238de7a3e038daeb585c1a76fd9a0c4baf22f11/qtpy/__init__.py#L199-L289
-#
-# We, however, use the default preference order of the helper function, in order to keep it consistent across multiple
-# hooks that use the same helper.
-excludedimports = qtutils.exclude_extraneous_qt_bindings(
- hook_name="hook-qtpy",
- qt_bindings_order=None,
-)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scapy.layers.all.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scapy.layers.all.py
deleted file mode 100755
index fdcc779..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scapy.layers.all.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# The layers to load can be configured using scapy's conf.load_layers.
-# from scapy.config import conf; print(conf.load_layers)
-# I decided not to use this, but to include all layer modules. The reason is: When building the package, load_layers may
-# not include all the layer modules the program will use later.
-
-hiddenimports = collect_submodules('scapy.layers')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.io.matlab.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.io.matlab.py
deleted file mode 100755
index c69c767..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.io.matlab.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Module scipy.io.matlab allows to parse matlab files. The hidden import is necessary for SciPy 0.11+.
-hiddenimports = ['scipy.io.matlab.streams']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.linalg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.linalg.py
deleted file mode 100755
index b1a68b8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.linalg.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# The hidden import is necessary for SciPy 0.16+.
-hiddenimports = ['scipy.linalg.cython_blas', 'scipy.linalg.cython_lapack']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.py
deleted file mode 100755
index b454cca..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# -----------------------------------------------------------------------------
-
-import glob
-import os
-import sysconfig
-
-from PyInstaller.compat import is_win, is_linux
-from PyInstaller.utils.hooks import (
- get_module_file_attribute,
- check_requirement,
- collect_delvewheel_libs_directory,
- collect_submodules,
-)
-
-binaries = []
-datas = []
-
-# Package the DLL bundle that official scipy wheels for Windows ship The DLL bundle will either be in extra-dll on
-# windows proper and in .libs if installed on a virtualenv created from MinGW (Git-Bash for example)
-if is_win:
- extra_dll_locations = ['extra-dll', '.libs']
- for location in extra_dll_locations:
- dll_glob = os.path.join(os.path.dirname(get_module_file_attribute('scipy')), location, "*.dll")
- if glob.glob(dll_glob):
- binaries.append((dll_glob, "."))
-
-# Handle delvewheel-enabled win32 wheels, which have external scipy.libs directory (scipy >= 0.9.2)
-if check_requirement("scipy >= 1.9.2") and is_win:
- datas, binaries = collect_delvewheel_libs_directory('scipy', datas=datas, binaries=binaries)
-
-# collect library-wide utility extension modules
-hiddenimports = ['scipy._lib.%s' % m for m in ['messagestream', "_ccallback_c", "_fpumode"]]
-
-# In scipy 1.14.0, `scipy._lib.array_api_compat.numpy` added a programmatic import of its `.fft` submodule, which needs
-# to be added to hiddenimports.
-if check_requirement("scipy >= 1.14.0"):
- hiddenimports += ['scipy._lib.array_api_compat.numpy.fft']
-
-# If scipy is provided by Debian's python3-scipy, its scipy.__config__ submodule is renamed to a dynamically imported
-# scipy.__config__${SOABI}__
-# https://salsa.debian.org/python-team/packages/scipy/-/blob/1255922cf7c52b05aa44fb733449953cd9adb815/debian/patches/scipy_config_SOABI.patch
-if is_linux and "dist-packages" in get_module_file_attribute("scipy"):
- hiddenimports.append('scipy.__config__' + sysconfig.get_config_var('SOABI') + '__')
-
-# The `scipy._lib.array_api_compat.numpy` module performs a `from numpy import *`; in numpy 2.0.0, `numpy.f2py` was
-# added to `numpy.__all__` attribute, but at the same time, the upstream numpy hook adds `numpy.f2py` to
-# `excludedimports`. Therefore, the `numpy.f2py` sub-package ends up missing. Due to the way exclusion mechanism works,
-# we need to add both `numpy.f2py` and all its submodules to hiddenimports here.
-if check_requirement("numpy >= 2.0.0"):
- hiddenimports += collect_submodules('numpy.f2py', filter=lambda name: name != 'numpy.f2py.tests')
-
-# Starting with scipy 1.17.0, the `scipy._cyutility` extension is imported when top-level `scipy` package is imported
-# (via import of another extension, `scipy._lib`).
-if check_requirement("scipy >= 1.17.0"):
- hiddenimports += ['scipy._cyutility']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.sparse.csgraph.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.sparse.csgraph.py
deleted file mode 100755
index 9cabdbd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.sparse.csgraph.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# The hidden import is necessary for SciPy 0.11+.
-hiddenimports = ['scipy.sparse.csgraph._validation']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.spatial._ckdtree.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.spatial._ckdtree.py
deleted file mode 100755
index 00d1a87..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.spatial._ckdtree.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# As of SciPy 1.16.0, `scipy.spatial._ckdtree` extension started to depend on newly-introduced `scipy._cyutility`.
-if is_module_satisfies('scipy >= 1.16.0'):
- hiddenimports = ['scipy._cyutility']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.spatial.transform.rotation.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.spatial.transform.rotation.py
deleted file mode 100755
index 4840cf2..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.spatial.transform.rotation.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import check_requirement
-
-# As of scipy 1.6.0, scipy.spatial.transform.rotation is cython-compiled, so we fail to automatically pick up its
-# imports.
-if check_requirement("scipy >= 1.6.0"):
- hiddenimports = ['scipy.spatial.transform._rotation_groups']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.special._ellip_harm_2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.special._ellip_harm_2.py
deleted file mode 100755
index 5115b02..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.special._ellip_harm_2.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Module hook for the `scipy.special._ellip_harm_2` C extension first introduced by SciPy >= 0.15.0.
-
-See Also
-----------
-https://github.com/scipy/scipy/blob/master/scipy/special/_ellip_harm_2.pyx
- This C extension's Cython-based implementation.
-"""
-
-# In SciPy >= 0.15.0:
-#
-# 1. The "scipy.special.__init__" module imports...
-# 2. The "scipy.special._ellip_harm" module imports...
-# 3. The "scipy.special._ellip_harm_2" C extension imports...
-# 4. The "scipy.integrate" package.
-#
-# The third import is undetectable by PyInstaller and hence explicitly listed. Since "_ellip_harm" and "_ellip_harm_2"
-# were first introduced by SciPy 0.15.0, the following hidden import will only be applied for versions of SciPy
-# guaranteed to provide these modules and C extensions.
-hiddenimports = ['scipy.integrate']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.special._ufuncs.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.special._ufuncs.py
deleted file mode 100755
index f94b22e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.special._ufuncs.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# Module scipy.io._ufunc depends on some other C/C++ extensions. The hidden import is necessary for SciPy 0.13+.
-# Thanks to dyadkin; see issue #826.
-hiddenimports = ['scipy.special._ufuncs_cxx']
-
-# SciPy 1.13.0 cythonized cdflib; this introduced new `scipy.special._cdflib` extension that is imported from the
-# `scipy.special._ufuncs` extension, and thus we need a hidden import here.
-if is_module_satisfies('scipy >= 1.13.0'):
- hiddenimports += ['scipy.special._cdflib']
-
-# SciPy 1.14.0 introduced `scipy.special._special_ufuncs`, which is imported from `scipy.special._ufuncs` extension.
-if is_module_satisfies('scipy >= 1.14.0'):
- hiddenimports += ['scipy.special._special_ufuncs']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.stats._stats.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.stats._stats.py
deleted file mode 100755
index e5f72a0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scipy.stats._stats.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import check_requirement
-
-if check_requirement("scipy >= 1.5.0"):
- hiddenimports = ['scipy.special.cython_special']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scrapy.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scrapy.py
deleted file mode 100755
index f110bb0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-scrapy.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Hook for https://pypi.org/project/Scrapy/
-# https://stackoverflow.com/questions/49085970/no-such-file-or-directory-error-using-pyinstaller-and-scrapy
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-datas = collect_data_files('scrapy')
-hiddenimports = collect_submodules('scrapy')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools._vendor.importlib_metadata.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools._vendor.importlib_metadata.py
deleted file mode 100755
index e7c92d0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools._vendor.importlib_metadata.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import fnmatch
-from PyInstaller.utils.hooks.setuptools import setuptools_info
-
-# Collect metadata for setuptools-vendored copy of importlib-metadata, to match the behavior of hook for
-# stand-alone version of the package (i.e., `hook-importlib_metadata.py`).
-
-# Use cached data files list from setuptools_info, and extract relevant bits (to avoid having to call another
-# `collect_data_files` and import `setuptools` in isolated process).
-datas = [(src_name, dest_name) for src_name, dest_name in setuptools_info.vendored_data
- if fnmatch.fnmatch(src_name, "**/setuptools/_vendor/importlib_metadata-*.dist-info/*")]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools._vendor.jaraco.text.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools._vendor.jaraco.text.py
deleted file mode 100755
index 47e65da..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools._vendor.jaraco.text.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import fnmatch
-from PyInstaller.utils.hooks.setuptools import setuptools_info
-
-# Use cached data files list from setuptools_info, and extract relevant bits (to avoid having to call another
-# `collect_data_files` and import `setuptools` in isolated process).
-datas = [(src_name, dest_name) for src_name, dest_name in setuptools_info.vendored_data
- if fnmatch.fnmatch(src_name, "**/setuptools/_vendor/jaraco/text/*")]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools.py
deleted file mode 100755
index 6c2c1bb..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-setuptools.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks.setuptools import setuptools_info
-
-datas = []
-
-hiddenimports = [
- # Test case import/test_zipimport2 fails during importing pkg_resources or setuptools when module not present.
- 'distutils.command.build_ext',
- 'setuptools.msvc',
-]
-
-# Necessary for setuptools on Mac/Unix
-if compat.is_unix or compat.is_darwin:
- hiddenimports.append('syslog')
-
-# Prevent the following modules from being collected solely due to reference from anywhere within setuptools (or
-# its vendored dependencies).
-excludedimports = [
- 'pytest',
- 'numpy', # originally from hook-setuptools.msvc
- 'docutils', # originally from hool-setuptools._distutils.command.check
-]
-
-# setuptools >= 39.0.0 is "vendoring" its own direct dependencies from "_vendor" to "extern". This also requires
-# 'pre_safe_import_module/hook-setuptools.extern.six.moves.py' to make the moves defined in 'setuptools._vendor.six'
-# importable under 'setuptools.extern.six'.
-#
-# With setuptools 71.0.0, the vendored packages are exposed to the outside world by `setuptools._vendor` location being
-# appended to `sys.path`, and the `VendorImporter` is gone (i.e., no more mapping to `setuptools.extern`). Since the
-# vendored dependencies are now exposed as top-level modules (provided upstream versions are not available, as they
-# would take precedence due to `sys.path` ordering), we need pre-safe-import-module hooks that detect when only vendored
-# version is available, and add aliases to prevent duplicated collection. For list of vendored packages for which we
-# need such pre-safe-import-module hooks, see the code in `PyInstaller.utils.hooks.setuptools`.
-#
-# The list of submodules from `setuptools._vendor` is now available in `setuptools_info.vendored_modules` (and covers
-# all setuptools versions).
-#
-# NOTE: with setuptools >= 71.0, we do not need to add modules from `setuptools._vendored` to hidden imports anymore,
-# because the aliases we set up should ensure that the necessary parts get collected. We still need them for earlier
-# versions of setuptools, though.
-if setuptools_info.version < (71, 0):
- hiddenimports += setuptools_info.vendored_modules
-
-# The situation with vendored distutils (from `setuptools._distutils`) is a bit more complicated; python >= 3.12 does
-# not provide stdlib version of `distutils` anymore, so our corresponding pre-safe-import-module hook sets up aliases.
-# In earlier python versions, stdlib version is available as well, and at run-time, we might need both versions present,
-# so that whichever is applicable can be used. Therefore, for python < 3.12, we need to add the vendored distuils
-# modules to hidden imports.
-if setuptools_info.distutils_vendored and not compat.is_py312:
- hiddenimports += setuptools_info.distutils_modules
-
-# With setuptools >= 71.0.0, the vendored packages also have metadata, and might also contain data files that need to
-# be collected. The list of corresponding data files is kept cached in `setuptools_info.vendored_data` (to minimize the
-# number of times we need to call collect_data_files()).
-#
-# While it might be tempting to simply collect all data files and be done with it, we actually need to match the
-# collection behavior for the stand-alone versions of these packages; i.e., we should collect metadata (and/or data
-# files) for the vendored package only if the same data is also collected for stand-alone version. Otherwise, we risk
-# inconsistent behavior and potential mismatches; for example, if we collected metadata for vendored package A here,
-# but end up collecting stand-alone A, for which we normally do not collect the metadata, then at run-time, we will end
-# up with stand-alone copy of A and vendored copy of its metadata being discoverable.
-#
-# Therefore, if metadata and/or metadata needs to be collected, do it in corresponding sub-package hook (for an example,
-# see `hook-setuptools._vendor.jaraco.text.py`).
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-shelve.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-shelve.py
deleted file mode 100755
index 1df601a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-shelve.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Tested on Windows 7 x64 With Python 3.5
-
-hiddenimports = ["dbm.ndbm", "dbm.dumb", "dbm.gnu"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-shiboken6.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-shiboken6.py
deleted file mode 100755
index 17cf0c3..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-shiboken6.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-
-# Up until python 3.12, `xxsubtype` was built-in on all OSes. Now it is an extension on non-Windows, and without it,
-# shiboken6 initialization segfaults.
-if compat.is_py312 and not compat.is_win:
- hiddenimports = ['xxsubtype']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sphinx.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sphinx.py
deleted file mode 100755
index f5a13ac..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sphinx.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules, eval_statement
-
-# Sphinx consists of several extensions that are lazily loaded. So collect all submodules to ensure we do not miss
-# any of them.
-hiddenimports = collect_submodules('sphinx')
-
-# For each extension in sphinx.application.builtin_extensions that does not come from the sphinx package, do a
-# collect_submodules(). We need to do this explicitly because collect_submodules() does not seem to work with
-# namespace packages, which precludes us from simply doing hiddenimports += collect_submodules('sphinxcontrib')
-builtin_extensions = list(
- eval_statement(
- """
- from sphinx.application import builtin_extensions
- print(builtin_extensions)
- """
- )
-)
-for extension in builtin_extensions:
- if extension.startswith('sphinx.'):
- continue # Already collected
- hiddenimports += collect_submodules(extension)
-
-# This is inherited from an earlier version of the hook, and seems to have been required in Sphinx v.1.3.1 era due to
-# https://github.com/sphinx-doc/sphinx/blob/b87ce32e7dc09773f9e71305e66e8d6aead53dd1/sphinx/cmdline.py#L173.
-# It does not hurt to keep it around, just in case.
-hiddenimports += ['locale']
-
-# Collect all data files: *.html and *.conf files in ``sphinx.themes``, translation files in ``sphinx.locale``, etc.
-# Also collect all data files for the alabaster theme.
-datas = collect_data_files('sphinx') + collect_data_files('alabaster')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sqlalchemy.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sqlalchemy.py
deleted file mode 100755
index 3aafc50..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sqlalchemy.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import re
-import importlib.util
-
-from PyInstaller import isolated
-from PyInstaller.lib.modulegraph.modulegraph import SourceModule
-from PyInstaller.utils.hooks import check_requirement, collect_entry_point, logger
-
-datas = []
-
-# 'sqlalchemy.testing' causes bundling a lot of unnecessary modules.
-excludedimports = ['sqlalchemy.testing']
-
-# Include most common database bindings some database bindings are detected and include some are not. We should
-# explicitly include database backends.
-hiddenimports = ['pysqlite2', 'MySQLdb', 'psycopg2', 'sqlalchemy.ext.baked']
-
-if check_requirement('sqlalchemy >= 1.4'):
- hiddenimports.append("sqlalchemy.sql.default_comparator")
-
-
-@isolated.decorate
-def _get_dialect_modules(module_name):
- import importlib
- module = importlib.import_module(module_name)
- return [f"{module_name}.{submodule_name}" for submodule_name in module.__all__]
-
-
-# In SQLAlchemy >= 0.6, the "sqlalchemy.dialects" package provides dialects.
-# In SQLAlchemy <= 0.5, the "sqlalchemy.databases" package provides dialects.
-if check_requirement('sqlalchemy >= 0.6'):
- hiddenimports += _get_dialect_modules("sqlalchemy.dialects")
-else:
- hiddenimports += _get_dialect_modules("sqlalchemy.databases")
-
-# Collect additional dialects and plugins that are registered via entry-points, under assumption that they are available
-# in the build environment for a reason (i.e., they are used).
-for entry_point_name in ('sqlalchemy.dialects', 'sqlalchemy.plugins'):
- ep_datas, ep_hiddenimports = collect_entry_point(entry_point_name)
- datas += ep_datas
- hiddenimports += ep_hiddenimports
-
-
-def hook(hook_api):
- """
- SQLAlchemy 0.9 introduced the decorator 'util.dependencies'. This decorator does imports. E.g.:
-
- @util.dependencies("sqlalchemy.sql.schema")
-
- This hook scans for included SQLAlchemy modules and then scans those modules for any util.dependencies and marks
- those modules as hidden imports.
- """
-
- if not check_requirement('sqlalchemy >= 0.9'):
- return
-
- # this parser is very simplistic but seems to catch all cases as of V1.1
- depend_regex = re.compile(r'@util.dependencies\([\'"](.*?)[\'"]\)')
-
- hidden_imports_set = set()
- known_imports = set()
- for node in hook_api.module_graph.iter_graph(start=hook_api.module):
- if isinstance(node, SourceModule) and node.identifier.startswith('sqlalchemy.'):
- known_imports.add(node.identifier)
-
- # Read the source...
- with open(node.filename, 'rb') as f:
- source_code = f.read()
- source_code = importlib.util.decode_source(source_code)
-
- # ... and scan it
- for match in depend_regex.findall(source_code):
- hidden_imports_set.add(match)
-
- hidden_imports_set -= known_imports
- if len(hidden_imports_set):
- logger.info(" Found %d sqlalchemy hidden imports", len(hidden_imports_set))
- hook_api.add_imports(*list(hidden_imports_set))
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sqlite3.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sqlite3.py
deleted file mode 100755
index 805bf8f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sqlite3.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = []
-
-# On Windows in Python 3.4 'sqlite3' package might contain tests that are not required in frozen application.
-for mod in collect_submodules('sqlite3'):
- if not mod.startswith('sqlite3.test'):
- hiddenimports.append(mod)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sysconfig.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sysconfig.py
deleted file mode 100755
index d4331cf..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-sysconfig.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-import sys
-
-# see https://github.com/python/cpython/blob/3.9/Lib/sysconfig.py#L593
-# This will exclude `_osx_support`, `distutils`, `distutils.log` for sys.platform != 'darwin'
-if sys.platform != 'darwin':
- excludedimports = ["_osx_support"]
-
-# Python 3.6 uses additional modules like `_sysconfigdata_m_linux_x86_64-linux-gnu`, see
-# https://github.com/python/cpython/blob/3.6/Lib/sysconfig.py#L417
-# Note: Some versions of Anaconda backport this feature to before 3.6. See issue #3105.
-# Note: on Windows, python.org and Anaconda python provide _get_sysconfigdata_name, but calling it fails due to sys
-# module lacking abiflags attribute. It does work on MSYS2/MINGW python, where we need to collect corresponding file.
-try:
- import sysconfig
- hiddenimports = [sysconfig._get_sysconfigdata_name()]
-except AttributeError:
- # Either sysconfig has no attribute _get_sysconfigdata_name (i.e., the function does not exist), or this is Windows
- # and the _get_sysconfigdata_name() call failed due to missing sys.abiflags attribute.
- pass
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-wcwidth.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-wcwidth.py
deleted file mode 100755
index dc7c2dd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-wcwidth.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2017-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('wcwidth')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-win32ctypes.core.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-win32ctypes.core.py
deleted file mode 100755
index 6971473..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-win32ctypes.core.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2020-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# TODO: remove this hook during PyInstaller 4.5 release cycle!
-
-from PyInstaller.utils.hooks import can_import_module, collect_submodules
-
-# We need to collect submodules from win32ctypes.core.cffi or win32ctypes.core.ctypes for win32ctypes.core to work.
-# Always collect the `ctypes` backend, and add the `cffi` one if `cffi` is available. Having the `ctypes` backend always
-# available helps in situations when `cffi` is available in the build environment, but is disabled at run-time or not
-# collected (e.g., due to `--exclude cffi`).
-hiddenimports = collect_submodules('win32ctypes.core.ctypes')
-if can_import_module('cffi'):
- hiddenimports += collect_submodules('win32ctypes.core.cffi')
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.dom.domreg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.dom.domreg.py
deleted file mode 100755
index eb7161a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.dom.domreg.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# xml.dom.domreg line 54
-hiddenimports = ['xml.dom.minidom']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.etree.cElementTree.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.etree.cElementTree.py
deleted file mode 100755
index 95dc702..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.etree.cElementTree.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# cElementTree has a hidden import (Python >=2.5 stdlib version)
-hiddenimports = ['xml.etree.ElementTree']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.py
deleted file mode 100755
index d7776a0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-xml.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-hiddenimports = ['xml.sax.xmlreader', 'xml.sax.expatreader']
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-zope.interface.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-zope.interface.py
deleted file mode 100755
index b43d023..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/hook-zope.interface.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-excludedimports = ["unittest"]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 87836a4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-PyQt5.uic.port_v2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-PyQt5.uic.port_v2.cpython-312.pyc
deleted file mode 100644
index c9cd313..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-PyQt5.uic.port_v2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-_pyi_rth_utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-_pyi_rth_utils.cpython-312.pyc
deleted file mode 100644
index 26edc32..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-_pyi_rth_utils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-distutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-distutils.cpython-312.pyc
deleted file mode 100644
index ba43af6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-distutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-pyi_splash.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-pyi_splash.cpython-312.pyc
deleted file mode 100644
index 73326b8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-pyi_splash.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-tkinter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-tkinter.cpython-312.pyc
deleted file mode 100644
index 0608bf8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/__pycache__/hook-tkinter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-PyQt5.uic.port_v2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-PyQt5.uic.port_v2.py
deleted file mode 100755
index 014c9e2..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-PyQt5.uic.port_v2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_find_module_path(hook_api):
- # Forbid imports in the port_v2 directory under Python 3 The code wouldn't import and would crash the build process.
- hook_api.search_dirs = []
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-_pyi_rth_utils.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-_pyi_rth_utils.py
deleted file mode 100755
index d035df0..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-_pyi_rth_utils.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# -----------------------------------------------------------------------------
-"""
-This hook allows discovery and collection of PyInstaller's internal _pyi_rth_utils module that provides utility
-functions for run-time hooks.
-
-The module is implemented in 'PyInstaller/fake-modules/_pyi_rth_utils.py'.
-"""
-
-import os
-
-from PyInstaller import PACKAGEPATH
-
-
-def pre_find_module_path(api):
- module_dir = os.path.join(PACKAGEPATH, 'fake-modules')
- api.search_dirs = [module_dir]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-distutils.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-distutils.py
deleted file mode 100755
index 0e7e646..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-distutils.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# -----------------------------------------------------------------------------
-"""
-`distutils`-specific pre-find module path hook.
-
-When run from within a virtual environment, this hook changes the `__path__` of the `distutils` package to
-that of the system-wide rather than virtual-environment-specific `distutils` package. While the former is suitable for
-freezing, the latter is intended for use _only_ from within virtual environments.
-
-NOTE: this behavior seems to be specific to virtual environments created by (an old?) version of `virtualenv`; it is not
-applicable to virtual environments created by the `venv`.
-"""
-
-import pathlib
-
-from PyInstaller.utils.hooks import logger, get_module_file_attribute
-
-
-def pre_find_module_path(api):
- # Absolute path of the system-wide "distutils" package when run from within a venv or None otherwise.
-
- # opcode is not a virtualenv module, so we can use it to find the stdlib. Technique taken from virtualenv's
- # "distutils" package detection at
- # https://github.com/pypa/virtualenv/blob/16.3.0/virtualenv_embedded/distutils-init.py#L5
- # As opcode is a module, stdlib path corresponds to the parent directory of its ``__file__`` attribute.
- stdlib_path = pathlib.Path(get_module_file_attribute('opcode')).parent.resolve()
- # As distutils is a package, we need to consider the grandparent directory of its ``__file__`` attribute.
- distutils_path = pathlib.Path(get_module_file_attribute('distutils')).parent.parent.resolve()
-
- if distutils_path.name == 'setuptools':
- logger.debug("distutils: provided by setuptools")
- elif distutils_path == stdlib_path:
- logger.debug("distutils: provided by stdlib")
- else:
- # Find this package in stdlib.
- stdlib_path = str(stdlib_path)
- logger.debug("distutils: virtualenv shim - retargeting to stdlib dir %r", stdlib_path)
- api.search_dirs = [stdlib_path]
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-pyi_splash.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-pyi_splash.py
deleted file mode 100755
index 15f8009..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-pyi_splash.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# -----------------------------------------------------------------------------
-"""
-This hook does not move a module that can be installed by a package manager, but points to a PyInstaller internal
-module that can be imported into the users python instance.
-
-The module is implemented in 'PyInstaller/fake-modules/pyi_splash.py'.
-"""
-
-import os
-
-from PyInstaller import PACKAGEPATH
-from PyInstaller.utils.hooks import logger
-
-
-def pre_find_module_path(api):
- try:
- # Test if a module named 'pyi_splash' is locally installed. This prevents that a potentially required dependency
- # is not packed
- import pyi_splash # noqa: F401
- except ImportError:
- module_dir = os.path.join(PACKAGEPATH, 'fake-modules')
-
- api.search_dirs = [module_dir]
- logger.info('Adding pyi_splash module to application dependencies.')
- else:
- logger.info('A local module named "pyi_splash" is installed. Use the installed one instead.')
- return
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-tkinter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-tkinter.py
deleted file mode 100755
index 1cc5a78..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_find_module_path/hook-tkinter.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import log as logging
-from PyInstaller.utils.hooks import tcl_tk
-
-logger = logging.getLogger(__name__)
-
-
-def pre_find_module_path(hook_api):
- if not tcl_tk.tcltk_info.available:
- logger.warning("tkinter installation is broken. It will be excluded from the application")
- hook_api.search_dirs = []
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 53a7cbb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-autocommand.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-autocommand.cpython-312.pyc
deleted file mode 100644
index 06ae5ad..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-autocommand.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-backports.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-backports.cpython-312.pyc
deleted file mode 100644
index 5afb6cd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-backports.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-backports.tarfile.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-backports.tarfile.cpython-312.pyc
deleted file mode 100644
index f9522ef..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-backports.tarfile.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-distutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-distutils.cpython-312.pyc
deleted file mode 100644
index 5c348ed..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-distutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.cpython-312.pyc
deleted file mode 100644
index b0b9eb3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.overrides.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.overrides.cpython-312.pyc
deleted file mode 100644
index 2942d15..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.overrides.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Adw.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Adw.cpython-312.pyc
deleted file mode 100644
index f814832..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Adw.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.AppIndicator3.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.AppIndicator3.cpython-312.pyc
deleted file mode 100644
index bafd7e4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.AppIndicator3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Atk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Atk.cpython-312.pyc
deleted file mode 100644
index bfe10b0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Atk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.AyatanaAppIndicator3.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.AyatanaAppIndicator3.cpython-312.pyc
deleted file mode 100644
index 4128ec7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.AyatanaAppIndicator3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Champlain.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Champlain.cpython-312.pyc
deleted file mode 100644
index 9e452bb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Champlain.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Clutter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Clutter.cpython-312.pyc
deleted file mode 100644
index 536fbf7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Clutter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.DBus.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.DBus.cpython-312.pyc
deleted file mode 100644
index ce03d7d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.DBus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GIRepository.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GIRepository.cpython-312.pyc
deleted file mode 100644
index 57a470d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GIRepository.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GLib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GLib.cpython-312.pyc
deleted file mode 100644
index 73cfc25..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GLib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GModule.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GModule.cpython-312.pyc
deleted file mode 100644
index 84852d6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GModule.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GObject.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GObject.cpython-312.pyc
deleted file mode 100644
index a1f3ca9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GObject.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gdk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gdk.cpython-312.pyc
deleted file mode 100644
index d73d970..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gdk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GdkPixbuf.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GdkPixbuf.cpython-312.pyc
deleted file mode 100644
index a06d17d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GdkPixbuf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gio.cpython-312.pyc
deleted file mode 100644
index c78a778..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Graphene.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Graphene.cpython-312.pyc
deleted file mode 100644
index 0786b5d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Graphene.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gsk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gsk.cpython-312.pyc
deleted file mode 100644
index 607c3c7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gsk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gst.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gst.cpython-312.pyc
deleted file mode 100644
index 17a1a71..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gst.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAllocators.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAllocators.cpython-312.pyc
deleted file mode 100644
index b90e02a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAllocators.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstApp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstApp.cpython-312.pyc
deleted file mode 100644
index 4717195..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstApp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAudio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAudio.cpython-312.pyc
deleted file mode 100644
index ff4aa33..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstAudio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBadAudio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBadAudio.cpython-312.pyc
deleted file mode 100644
index 52426aa..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBadAudio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBase.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBase.cpython-312.pyc
deleted file mode 100644
index 0c3edd1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstBase.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstCheck.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstCheck.cpython-312.pyc
deleted file mode 100644
index 2d97c2f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstCheck.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstCodecs.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstCodecs.cpython-312.pyc
deleted file mode 100644
index 7b242ce..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstCodecs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstController.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstController.cpython-312.pyc
deleted file mode 100644
index e3e580d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstController.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGL.cpython-312.pyc
deleted file mode 100644
index bf4e1a6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLEGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLEGL.cpython-312.pyc
deleted file mode 100644
index c9b63cc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLEGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLWayland.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLWayland.cpython-312.pyc
deleted file mode 100644
index ffbe3b9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLWayland.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLX11.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLX11.cpython-312.pyc
deleted file mode 100644
index 706f071..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstGLX11.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstInsertBin.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstInsertBin.cpython-312.pyc
deleted file mode 100644
index 23a5366..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstInsertBin.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstMpegts.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstMpegts.cpython-312.pyc
deleted file mode 100644
index 5b1fe01..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstMpegts.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstNet.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstNet.cpython-312.pyc
deleted file mode 100644
index 91fe5b0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstNet.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPbutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPbutils.cpython-312.pyc
deleted file mode 100644
index 38f4b43..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPbutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPlay.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPlay.cpython-312.pyc
deleted file mode 100644
index 7cf83af..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPlay.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPlayer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPlayer.cpython-312.pyc
deleted file mode 100644
index 887ca38..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstPlayer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtp.cpython-312.pyc
deleted file mode 100644
index 7b0fa04..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtsp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtsp.cpython-312.pyc
deleted file mode 100644
index 20ed74c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtsp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtspServer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtspServer.cpython-312.pyc
deleted file mode 100644
index bdc7145..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstRtspServer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstSdp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstSdp.cpython-312.pyc
deleted file mode 100644
index 46c36f2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstSdp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTag.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTag.cpython-312.pyc
deleted file mode 100644
index 9d3ac06..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTag.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTranscoder.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTranscoder.cpython-312.pyc
deleted file mode 100644
index 09c347c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstTranscoder.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVideo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVideo.cpython-312.pyc
deleted file mode 100644
index 3f027d7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVideo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkan.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkan.cpython-312.pyc
deleted file mode 100644
index 4a07510..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkan.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkanWayland.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkanWayland.cpython-312.pyc
deleted file mode 100644
index 28cca00..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkanWayland.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkanXCB.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkanXCB.cpython-312.pyc
deleted file mode 100644
index 9ee7155..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstVulkanXCB.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstWebRTC.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstWebRTC.cpython-312.pyc
deleted file mode 100644
index b46fa15..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GstWebRTC.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gtk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gtk.cpython-312.pyc
deleted file mode 100644
index 7bfa29e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Gtk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkChamplain.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkChamplain.cpython-312.pyc
deleted file mode 100644
index 067de72..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkChamplain.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkClutter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkClutter.cpython-312.pyc
deleted file mode 100644
index c4c1076..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkClutter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkSource.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkSource.cpython-312.pyc
deleted file mode 100644
index 38eb4b6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkSource.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkosxApplication.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkosxApplication.cpython-312.pyc
deleted file mode 100644
index 67bd7e3..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.GtkosxApplication.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.HarfBuzz.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.HarfBuzz.cpython-312.pyc
deleted file mode 100644
index dc8a52a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.HarfBuzz.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.OsmGpsMap.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.OsmGpsMap.cpython-312.pyc
deleted file mode 100644
index e90eb4c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.OsmGpsMap.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Pango.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Pango.cpython-312.pyc
deleted file mode 100644
index 9e067e7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Pango.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.PangoCairo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.PangoCairo.cpython-312.pyc
deleted file mode 100644
index 22c1e21..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.PangoCairo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Rsvg.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Rsvg.cpython-312.pyc
deleted file mode 100644
index 65d2b84..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.Rsvg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.cairo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.cairo.cpython-312.pyc
deleted file mode 100644
index 5680ad8..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.cairo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.freetype2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.freetype2.cpython-312.pyc
deleted file mode 100644
index 4c5e548..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.freetype2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.xlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.xlib.cpython-312.pyc
deleted file mode 100644
index 42a53fd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-gi.repository.xlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-importlib_metadata.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-importlib_metadata.cpython-312.pyc
deleted file mode 100644
index f016c68..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-importlib_metadata.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-importlib_resources.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-importlib_resources.cpython-312.pyc
deleted file mode 100644
index a7022f9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-importlib_resources.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-inflect.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-inflect.cpython-312.pyc
deleted file mode 100644
index 0a81ba9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-inflect.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.context.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.context.cpython-312.pyc
deleted file mode 100644
index e233a6b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.context.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.cpython-312.pyc
deleted file mode 100644
index 5f1caa4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.functools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.functools.cpython-312.pyc
deleted file mode 100644
index f202db2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.functools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.text.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.text.cpython-312.pyc
deleted file mode 100644
index 650c2c9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-jaraco.text.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-more_itertools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-more_itertools.cpython-312.pyc
deleted file mode 100644
index de3af71..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-more_itertools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-ordered_set.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-ordered_set.cpython-312.pyc
deleted file mode 100644
index 81b2b37..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-ordered_set.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-packaging.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-packaging.cpython-312.pyc
deleted file mode 100644
index 9a165cd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-packaging.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-platformdirs.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-platformdirs.cpython-312.pyc
deleted file mode 100644
index 75739ab..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-platformdirs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-setuptools.extern.six.moves.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-setuptools.extern.six.moves.cpython-312.pyc
deleted file mode 100644
index 062420d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-setuptools.extern.six.moves.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-six.moves.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-six.moves.cpython-312.pyc
deleted file mode 100644
index b0b33ea..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-six.moves.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-tomli.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-tomli.cpython-312.pyc
deleted file mode 100644
index b23f982..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-tomli.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-typeguard.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-typeguard.cpython-312.pyc
deleted file mode 100644
index fee5649..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-typeguard.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-typing_extensions.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-typing_extensions.cpython-312.pyc
deleted file mode 100644
index f32b4c9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-typing_extensions.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-urllib3.packages.six.moves.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-urllib3.packages.six.moves.cpython-312.pyc
deleted file mode 100644
index f9dd7b9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-urllib3.packages.six.moves.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-wheel.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-wheel.cpython-312.pyc
deleted file mode 100644
index d8584bc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-wheel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-zipp.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-zipp.cpython-312.pyc
deleted file mode 100644
index a8c0aeb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/__pycache__/hook-zipp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-autocommand.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-autocommand.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-autocommand.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-backports.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-backports.py
deleted file mode 100755
index 3b6a8fc..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-backports.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This top-level namespace package might be provided by setuptools >= 71.0.0, which makes its vendored dependencies
-# public by appending path to its `setuptools._vendored` directory to `sys.path`. The following shared
-# pre-safe-import-module hook implementation checks whether this is the case, and, depending on situation, either
-# sets up aliases to prevent duplicate collection, or extends the search paths.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module_for_top_level_namespace_packages \
- as pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-backports.tarfile.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-backports.tarfile.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-backports.tarfile.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-distutils.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-distutils.py
deleted file mode 100755
index 7f88845..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-distutils.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks.setuptools import setuptools_info
-
-
-def pre_safe_import_module(api):
- # `distutils` was removed from from stdlib in python 3.12; if it is available, it is provided by `setuptools`.
- # Therefore, we need to create package/module alias entries, which prevent the setuptools._distutils` and its
- # submodules from being collected as top-level modules (as `distutils` and its submodules) in addition to being
- # collected as their "true" names.
- if compat.is_py312 and setuptools_info.distutils_vendored:
- for aliased_name, real_vendored_name in setuptools_info.get_distutils_aliases():
- api.add_alias_module(real_vendored_name, aliased_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.overrides.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.overrides.py
deleted file mode 100755
index c98573a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.overrides.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-from PyInstaller.utils import hooks as hookutils
-
-
-def pre_safe_import_module(api):
- if compat.is_linux:
- # See comment in the adjacent `hook-gi.py`.
- try:
- paths = hookutils.get_module_attribute(api.module_name, "__path__")
- except Exception:
- # Most likely `gi.overrides` cannot be imported.
- paths = []
-
- for path in paths:
- api.append_package_path(path)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.py
deleted file mode 100755
index 409007c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2022-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import compat
-from PyInstaller.utils import hooks as hookutils
-
-
-def pre_safe_import_module(api):
- if compat.is_linux:
- # RHEL/Fedora RPM package for GObject introspection is known to split the `gi` package into two locations:
- # - /usr/lib64/python3.x/site-packages/gi
- # - /usr/lib/python3.x/site-packages/gi
- # The `__init__.py` is located in the first directory, while `repository` and `overrides` are located in
- # the second, and `__init__.py` dynamically extends the `__path__` during package import, using
- # `__path__ = pkgutil.extend_path(__path__, __name__)`.
- # The modulegraph has no way of knowing this, so we need extend the package path in this hook. Otherwise,
- # only the first location is scanned, and the `gi.repository` ends up missing.
- #
- # ADDENDUM: it looks like the `gi.overrides` can also be split across both locations, so we need a similar
- # hook for `gi.overrides` as well.
- #
- # NOTE: the `get_package_paths`/`get_package_all_paths` helpers read the paths from package's spec without
- # importing the (top-level) package, so they do not catch run-time path modifications. Instead, we use
- # `get_module_attribute` to import the package in isolated process and query its `__path__` attribute.
- try:
- paths = hookutils.get_module_attribute(api.module_name, "__path__")
- except Exception:
- # Most likely `gi` cannot be imported.
- paths = []
-
- for path in paths:
- api.append_package_path(path)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Adw.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Adw.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Adw.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.AppIndicator3.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.AppIndicator3.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.AppIndicator3.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Atk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Atk.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Atk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.AyatanaAppIndicator3.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.AyatanaAppIndicator3.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.AyatanaAppIndicator3.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Champlain.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Champlain.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Champlain.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Clutter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Clutter.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Clutter.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.DBus.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.DBus.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.DBus.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GIRepository.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GIRepository.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GIRepository.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GLib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GLib.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GLib.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GModule.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GModule.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GModule.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GObject.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GObject.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GObject.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gdk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gdk.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gdk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GdkPixbuf.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GdkPixbuf.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GdkPixbuf.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gio.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gio.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Graphene.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Graphene.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Graphene.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gsk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gsk.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gsk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gst.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gst.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gst.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAllocators.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAllocators.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAllocators.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstApp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstApp.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstApp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAudio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAudio.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstAudio.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBadAudio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBadAudio.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBadAudio.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBase.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBase.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstBase.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstCheck.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstCheck.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstCheck.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstCodecs.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstCodecs.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstCodecs.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstController.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstController.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstController.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGL.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGL.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLEGL.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLEGL.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLEGL.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLWayland.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLWayland.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLWayland.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLX11.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLX11.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstGLX11.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstInsertBin.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstInsertBin.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstInsertBin.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstMpegts.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstMpegts.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstMpegts.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstNet.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstNet.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstNet.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPbutils.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPbutils.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPbutils.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPlay.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPlay.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPlay.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPlayer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPlayer.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstPlayer.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtp.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtsp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtsp.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtsp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtspServer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtspServer.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstRtspServer.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstSdp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstSdp.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstSdp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTag.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTag.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTag.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTranscoder.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTranscoder.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstTranscoder.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVideo.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVideo.py
deleted file mode 100755
index e75bfee..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVideo.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert
- # them to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkan.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkan.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkan.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkanWayland.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkanWayland.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkanWayland.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkanXCB.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkanXCB.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstVulkanXCB.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstWebRTC.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstWebRTC.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GstWebRTC.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gtk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gtk.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Gtk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkChamplain.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkChamplain.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkChamplain.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkClutter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkClutter.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkClutter.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkSource.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkSource.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkSource.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkosxApplication.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkosxApplication.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.GtkosxApplication.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.HarfBuzz.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.HarfBuzz.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.HarfBuzz.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.OsmGpsMap.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.OsmGpsMap.py
deleted file mode 100755
index cb80208..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.OsmGpsMap.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Pango.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Pango.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Pango.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.PangoCairo.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.PangoCairo.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.PangoCairo.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Rsvg.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Rsvg.py
deleted file mode 100755
index a9978ab..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.Rsvg.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.cairo.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.cairo.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.cairo.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.freetype2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.freetype2.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.freetype2.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.xlib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.xlib.py
deleted file mode 100755
index 131ce95..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-gi.repository.xlib.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-
-def pre_safe_import_module(api):
- # PyGObject modules loaded through the gi repository are marked as MissingModules by modulegraph, so we convert them
- # to RuntimeModules in order for their hooks to be loaded and executed.
- api.add_runtime_module(api.module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-importlib_metadata.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-importlib_metadata.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-importlib_metadata.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-importlib_resources.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-importlib_resources.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-importlib_resources.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-inflect.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-inflect.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-inflect.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.context.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.context.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.context.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.functools.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.functools.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.functools.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.py
deleted file mode 100755
index 3b6a8fc..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This top-level namespace package might be provided by setuptools >= 71.0.0, which makes its vendored dependencies
-# public by appending path to its `setuptools._vendored` directory to `sys.path`. The following shared
-# pre-safe-import-module hook implementation checks whether this is the case, and, depending on situation, either
-# sets up aliases to prevent duplicate collection, or extends the search paths.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module_for_top_level_namespace_packages \
- as pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.text.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.text.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-jaraco.text.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-more_itertools.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-more_itertools.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-more_itertools.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-ordered_set.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-ordered_set.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-ordered_set.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-packaging.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-packaging.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-packaging.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-platformdirs.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-platformdirs.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-platformdirs.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-setuptools.extern.six.moves.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-setuptools.extern.six.moves.py
deleted file mode 100755
index 5a09a89..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-setuptools.extern.six.moves.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import isolated
-
-# This is basically a copy of pre_safe_import_module/hook-six.moves.py adopted to setuptools.extern.six resp.
-# setuptools._vendor.six. Please see pre_safe_import_module/hook-six.moves.py for documentation.
-
-# Note that the moves are defined in 'setuptools._vendor.six' but are imported under 'setuptools.extern.six'.
-
-
-def pre_safe_import_module(api):
- @isolated.call
- def real_to_six_module_name():
- try:
- import setuptools._vendor.six as six
- except ImportError:
- try:
- import setuptools.extern.six as six
- except ImportError:
- return None # unavailable
-
- return {
- moved.mod: 'setuptools.extern.six.moves.' + moved.name
- for moved in six._moved_attributes if isinstance(moved, (six.MovedModule, six.MovedAttribute))
- }
-
- if real_to_six_module_name is not None:
- api.add_runtime_package(api.module_name)
- for real_module_name, six_module_name in real_to_six_module_name.items():
- api.add_alias_module(real_module_name, six_module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py
deleted file mode 100755
index 1c86669..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import isolated
-
-
-def pre_safe_import_module(api):
- """
- Add the `six.moves` module as a dynamically defined runtime module node and all modules mapped by
- `six._SixMetaPathImporter` as aliased module nodes to the passed graph.
-
- The `six.moves` module is dynamically defined at runtime by the `six` module and hence cannot be imported in the
- standard way. Instead, this hook adds a placeholder node for the `six.moves` module to the graph,
- which implicitly adds an edge from that node to the node for its parent `six` module. This ensures that the `six`
- module will be frozen into the executable. (Phew!)
-
- `six._SixMetaPathImporter` is a PEP 302-compliant module importer converting imports independent of the current
- Python version into imports specific to that version (e.g., under Python 3, from `from six.moves import
- tkinter_tix` to `import tkinter.tix`). For each such mapping, this hook adds a corresponding module alias to the
- graph allowing PyInstaller to translate the former to the latter.
- """
- @isolated.call
- def real_to_six_module_name():
- """
- Generate a dictionary from conventional module names to "six.moves" attribute names (e.g., from `tkinter.tix` to
- `six.moves.tkinter_tix`).
- """
- try:
- import six
- except ImportError:
- return None # unavailable
-
- # Iterate over the "six._moved_attributes" list rather than the "six._importer.known_modules" dictionary, as
- # "urllib"-specific moved modules are overwritten in the latter with unhelpful "LazyModule" objects. If this is
- # a moved module or attribute, map the corresponding module. In the case of moved attributes, the attribute's
- # module is mapped while the attribute itself is mapped at runtime and hence ignored here.
- return {
- moved.mod: 'six.moves.' + moved.name
- for moved in six._moved_attributes if isinstance(moved, (six.MovedModule, six.MovedAttribute))
- }
-
- # Add "six.moves" as a runtime package rather than module. Modules cannot physically contain submodules; only
- # packages can. In "from"-style import statements (e.g., "from six.moves import queue"), this implies that:
- # * Attributes imported from customary modules are guaranteed *NOT* to be submodules. Hence, ModuleGraph justifiably
- # ignores these attributes. While some attributes declared by "six.moves" are ignorable non-modules (e.g.,
- # functions, classes), others are non-ignorable submodules that must be imported. Adding "six.moves" as a runtime
- # module causes ModuleGraph to ignore these submodules, which defeats the entire point.
- # * Attributes imported from packages could be submodules. To disambiguate non-ignorable submodules from ignorable
- # non-submodules (e.g., classes, variables), ModuleGraph first attempts to import these attributes as submodules.
- # This is exactly what we want.
- if real_to_six_module_name is not None:
- api.add_runtime_package(api.module_name)
- for real_module_name, six_module_name in real_to_six_module_name.items():
- api.add_alias_module(real_module_name, six_module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-tomli.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-tomli.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-tomli.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-typeguard.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-typeguard.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-typeguard.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-typing_extensions.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-typing_extensions.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-typing_extensions.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-urllib3.packages.six.moves.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-urllib3.packages.six.moves.py
deleted file mode 100755
index d257f83..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-urllib3.packages.six.moves.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from PyInstaller import isolated
-
-# This basically is a copy of pre_safe_import_module/hook-six.moves.py adopted to urllib3.packages.six. Please see
-# pre_safe_import_module/hook-six.moves.py for documentation.
-
-
-def pre_safe_import_module(api):
- @isolated.call
- def real_to_six_module_name():
- try:
- import urllib3.packages.six as six
- except ImportError:
- return None # unavailable
-
- return {
- moved.mod: 'urllib3.packages.six.moves.' + moved.name
- for moved in six._moved_attributes if isinstance(moved, (six.MovedModule, six.MovedAttribute))
- }
-
- if real_to_six_module_name is not None:
- api.add_runtime_package(api.module_name)
- for real_module_name, six_module_name in real_to_six_module_name.items():
- api.add_alias_module(real_module_name, six_module_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-wheel.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-wheel.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-wheel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-zipp.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-zipp.py
deleted file mode 100755
index 83c7249..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-zipp.py
+++ /dev/null
@@ -1,15 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# This package/module might be provided by setuptools >= 71.0.0, which makes its vendored dependencies public by
-# appending path to its `setuptools._vendored` directory to `sys.path`. The following shared pre-safe-import-module
-# hook implementation checks whether this is the case, and sets up aliases to prevent duplicate collection.
-from PyInstaller.utils.hooks.setuptools import pre_safe_import_module # noqa: F401
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks.dat b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks.dat
deleted file mode 100755
index c024452..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks.dat
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- 'django': ['pyi_rth_django.py'],
- 'gi': ['pyi_rth_gi.py'],
- 'gi.repository.Gio': ['pyi_rth_gio.py'],
- 'gi.repository.GLib': ['pyi_rth_glib.py'],
- 'gi.repository.GdkPixbuf': ['pyi_rth_gdkpixbuf.py'],
- 'gi.repository.Gtk': ['pyi_rth_gtk.py'],
- 'gi.repository.Gst': ['pyi_rth_gstreamer.py'],
- 'gst': ['pyi_rth_gstreamer.py'],
- 'inspect': ['pyi_rth_inspect.py'],
- 'kivy': ['pyi_rth_kivy.py'],
- 'kivy.lib.gstplayer': ['pyi_rth_gstreamer.py'],
- 'matplotlib': ['pyi_rth_mplconfig.py'],
- 'pkgutil': ['pyi_rth_pkgutil.py'],
- 'pkg_resources': ['pyi_rth_pkgres.py'],
- 'PyQt5': ['pyi_rth_pyqt5.py'],
- 'PyQt6': ['pyi_rth_pyqt6.py'],
- 'PySide2': ['pyi_rth_pyside2.py'],
- 'PySide6': ['pyi_rth_pyside6.py'],
- '_tkinter': ['pyi_rth__tkinter.py'],
- 'multiprocessing': ['pyi_rth_multiprocessing.py'],
- 'setuptools': ['pyi_rth_setuptools.py'],
-}
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index bd5ccca..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth__tkinter.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth__tkinter.cpython-312.pyc
deleted file mode 100644
index 3a450b1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth__tkinter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_django.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_django.cpython-312.pyc
deleted file mode 100644
index da6a8e2..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_django.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gdkpixbuf.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gdkpixbuf.cpython-312.pyc
deleted file mode 100644
index d35835a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gdkpixbuf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gi.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gi.cpython-312.pyc
deleted file mode 100644
index b63328e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gio.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gio.cpython-312.pyc
deleted file mode 100644
index b349d50..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_glib.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_glib.cpython-312.pyc
deleted file mode 100644
index c0a2219..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_glib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gstreamer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gstreamer.cpython-312.pyc
deleted file mode 100644
index fcb6efa..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gstreamer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gtk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gtk.cpython-312.pyc
deleted file mode 100644
index a9e5d9d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_gtk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_inspect.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_inspect.cpython-312.pyc
deleted file mode 100644
index f77e8bf..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_inspect.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_kivy.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_kivy.cpython-312.pyc
deleted file mode 100644
index 685998e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_kivy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_mplconfig.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_mplconfig.cpython-312.pyc
deleted file mode 100644
index 0c29d05..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_mplconfig.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_multiprocessing.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_multiprocessing.cpython-312.pyc
deleted file mode 100644
index 874e936..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_multiprocessing.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgres.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgres.cpython-312.pyc
deleted file mode 100644
index fb229f4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgres.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgutil.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgutil.cpython-312.pyc
deleted file mode 100644
index 20bd4bd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pkgutil.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt5.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt5.cpython-312.pyc
deleted file mode 100644
index 1b72984..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt5.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt6.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt6.cpython-312.pyc
deleted file mode 100644
index 3938334..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyqt6.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside2.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside2.cpython-312.pyc
deleted file mode 100644
index 9f98ccc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside6.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside6.cpython-312.pyc
deleted file mode 100644
index 8eea662..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_pyside6.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_setuptools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_setuptools.cpython-312.pyc
deleted file mode 100644
index 2d09d53..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/__pycache__/pyi_rth_setuptools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py
deleted file mode 100755
index ae154f8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import os
- import sys
-
- # The directory names must match TCL_ROOTNAME and TK_ROOTNAME constants defined in `PyInstaller.utils.hooks.tcl_tk`.
- tcldir = os.path.join(sys._MEIPASS, '_tcl_data')
- tkdir = os.path.join(sys._MEIPASS, '_tk_data')
-
- # Notify "tkinter" of data directories. On macOS, we do not collect data directories if system Tcl/Tk framework is
- # used. On other OSes, we always collect them, so their absence is considered an error.
- is_darwin = sys.platform == 'darwin'
-
- if os.path.isdir(tcldir):
- os.environ["TCL_LIBRARY"] = tcldir
- elif not is_darwin:
- raise FileNotFoundError('Tcl data directory "%s" not found.' % tcldir)
-
- if os.path.isdir(tkdir):
- os.environ["TK_LIBRARY"] = tkdir
- elif not is_darwin:
- raise FileNotFoundError('Tk data directory "%s" not found.' % tkdir)
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_django.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_django.py
deleted file mode 100755
index 81243bd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_django.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# This Django rthook was tested with Django 1.8.3.
-
-
-def _pyi_rthook():
- import django.utils.autoreload
-
- _old_restart_with_reloader = django.utils.autoreload.restart_with_reloader
-
- def _restart_with_reloader(*args):
- import sys
- a0 = sys.argv.pop(0)
- try:
- return _old_restart_with_reloader(*args)
- finally:
- sys.argv.insert(0, a0)
-
- # Override restart_with_reloader() function, otherwise the app might complain that some commands do not exist;
- # e.g., runserver.
- django.utils.autoreload.restart_with_reloader = _restart_with_reloader
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gdkpixbuf.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gdkpixbuf.py
deleted file mode 100755
index de8223f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gdkpixbuf.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import atexit
- import os
- import sys
- import tempfile
-
- pixbuf_file = os.path.join(sys._MEIPASS, 'lib', 'gdk-pixbuf', 'loaders.cache')
-
- # If we are not on Windows, we need to rewrite the cache -> we rewrite on macOS to support --onefile mode
- if os.path.exists(pixbuf_file) and sys.platform != 'win32':
- with open(pixbuf_file, 'rb') as fp:
- contents = fp.read()
-
- # Create a temporary file with the cache and cleverly replace the prefix we injected with the actual path.
- fd, pixbuf_file = tempfile.mkstemp()
- with os.fdopen(fd, 'wb') as fp:
- libpath = os.path.join(sys._MEIPASS, 'lib').encode('utf-8')
- fp.write(contents.replace(b'@executable_path/lib', libpath))
-
- try:
- atexit.register(os.unlink, pixbuf_file)
- except OSError:
- pass
-
- os.environ['GDK_PIXBUF_MODULE_FILE'] = pixbuf_file
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gi.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gi.py
deleted file mode 100755
index 3c3b382..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gi.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import os
- import sys
-
- os.environ['GI_TYPELIB_PATH'] = os.path.join(sys._MEIPASS, 'gi_typelibs')
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gio.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gio.py
deleted file mode 100755
index f9fc307..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gio.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import os
- import sys
-
- os.environ['GIO_MODULE_DIR'] = os.path.join(sys._MEIPASS, 'gio_modules')
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_glib.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_glib.py
deleted file mode 100755
index 35bd7f8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_glib.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import os
- import sys
-
- # Prepend the frozen application's data dir to XDG_DATA_DIRS. We need to avoid overwriting the existing paths in
- # order to allow the frozen application to run system-installed applications (for example, launch a web browser via
- # the webbrowser module on Linux). Should the user desire complete isolation of the frozen application from the
- # system, they need to clean up XDG_DATA_DIRS at the start of their program (i.e., remove all entries but first).
- pyi_data_dir = os.path.join(sys._MEIPASS, 'share')
-
- xdg_data_dirs = os.environ.get('XDG_DATA_DIRS', None)
- if xdg_data_dirs:
- if pyi_data_dir not in xdg_data_dirs:
- xdg_data_dirs = pyi_data_dir + os.pathsep + xdg_data_dirs
- else:
- xdg_data_dirs = pyi_data_dir
- os.environ['XDG_DATA_DIRS'] = xdg_data_dirs
-
- # Cleanup aux variables
- del xdg_data_dirs
- del pyi_data_dir
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gstreamer.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gstreamer.py
deleted file mode 100755
index 5663229..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gstreamer.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import os
- import sys
-
- # Without this environment variable set to 'no' importing 'gst' causes 100% CPU load. (Tested on macOS.)
- os.environ['GST_REGISTRY_FORK'] = 'no'
-
- gst_plugin_paths = [sys._MEIPASS, os.path.join(sys._MEIPASS, 'gst-plugins')]
- os.environ['GST_PLUGIN_PATH'] = os.pathsep.join(gst_plugin_paths)
-
- # Prevent permission issues on Windows
- os.environ['GST_REGISTRY'] = os.path.join(sys._MEIPASS, 'registry.bin')
-
- # Only use packaged plugins to prevent GStreamer from crashing when it finds plugins from another version which are
- # installed system wide.
- os.environ['GST_PLUGIN_SYSTEM_PATH'] = ''
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gtk.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gtk.py
deleted file mode 100755
index d6ae21c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_gtk.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import os
- import sys
-
- os.environ['GTK_DATA_PREFIX'] = sys._MEIPASS
- os.environ['GTK_EXE_PREFIX'] = sys._MEIPASS
- os.environ['GTK_PATH'] = sys._MEIPASS
-
- # Include these here, as GTK will import pango automatically.
- os.environ['PANGO_LIBDIR'] = sys._MEIPASS
- os.environ['PANGO_SYSCONFDIR'] = os.path.join(sys._MEIPASS, 'etc') # TODO?
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py
deleted file mode 100755
index 2575997..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import inspect
- import os
- import sys
- import zipfile
-
- # Use sys._MEIPASS with normalized path component separator. This is necessary on some platforms (i.e., msys2/mingw
- # python on Windows), because we use string comparisons on the paths.
- SYS_PREFIX = os.path.normpath(sys._MEIPASS)
- BASE_LIBRARY = os.path.join(SYS_PREFIX, "base_library.zip")
-
- # Obtain the list of modules in base_library.zip, so we can use it in our `_pyi_getsourcefile` implementation.
- def _get_base_library_files(filename):
- # base_library.zip might not exit
- if not os.path.isfile(filename):
- return set()
-
- with zipfile.ZipFile(filename, 'r') as zf:
- namelist = zf.namelist()
-
- return set(os.path.normpath(entry) for entry in namelist)
-
- base_library_files = _get_base_library_files(BASE_LIBRARY)
-
- # Provide custom implementation of inspect.getsourcefile() for frozen applications that properly resolves relative
- # filenames obtained from object (e.g., inspect stack-frames). See #5963.
- #
- # Although we are overriding `inspect.getsourcefile` function, we are NOT trying to resolve source file here!
- # The main purpose of this implementation is to properly resolve relative file names obtained from `co_filename`
- # attribute of code objects (which are, in turn, obtained from in turn are obtained from `frame` and `traceback`
- # objects). PyInstaller strips absolute paths from `co_filename` when collecting modules, as the original absolute
- # paths are not portable/relocatable anyway. The `inspect` module tries to look up the module that corresponds to
- # the code object by comparing modules' `__file__` attribute to the value of `co_filename`. Therefore, our override
- # needs to resolve the relative file names (usually having a .py suffix) into absolute module names (which, in the
- # frozen application, usually have .pyc suffix).
- #
- # The `inspect` module retrieves the actual source code using `linecache.getlines()`. If the passed source filename
- # does not exist, the underlying implementation end up resolving the module, and obtains the source via loader's
- # `get_source` method. So for modules in the PYZ archive, it ends up calling `get_source` implementation on our
- # `PyiFrozenLoader`. For modules in `base_library.zip`, it ends up calling `get_source` on python's own
- # `zipimport.zipimporter`; to properly handle out-of-zip source files, we therefore need to monkey-patch
- # `get_source` with our own override that translates the in-zip .pyc filename into out-of-zip .py file location
- # and loads the source (this override is done in `pyimod02_importers` module).
- #
- # The above-described fallback takes place if the .pyc file does not exist on filesystem - if this ever becomes
- # a problem, we could consider monkey-patching `linecache.updatecache` (and possibly `checkcache`) to translate
- # .pyc paths in `sys._MEIPASS` and `base_library.zip` into .py paths in `sys._MEIPASS` before calling the original
- # implementation.
- _orig_inspect_getsourcefile = inspect.getsourcefile
-
- def _pyi_getsourcefile(object):
- filename = inspect.getfile(object)
- filename = os.path.normpath(filename) # Ensure path component separators are normalized.
- if not os.path.isabs(filename):
- # Check if given filename matches the basename of __main__'s __file__.
- main_file = getattr(sys.modules['__main__'], '__file__', None)
- if main_file and filename == os.path.basename(main_file):
- return main_file
-
- # If the relative filename does not correspond to the frozen entry-point script, convert it to the absolute
- # path in either `sys._MEIPASS/base_library.zip` or `sys._MEIPASS`, whichever applicable.
- #
- # The modules in `sys._MEIPASS/base_library.zip` are handled by python's `zipimport.zipimporter`, and have
- # their __file__ attribute point to the .pyc file in the archive. So we match the behavior, in order to
- # facilitate matching via __file__ attribute and use of loader's `get_source`, as per the earlier comment
- # block.
- #
- # The modules in PYZ archive are handled by our `PyFrozenLoader`, which now sets the module's __file__
- # attribute to point to where .py files would be. Therefore, we can directly merge SYS_PREFIX and filename
- # (and if the source .py file exists, it will be loaded directly from filename, without the intermediate
- # loader look-up).
- pyc_filename = filename + 'c'
- if pyc_filename in base_library_files:
- return os.path.normpath(os.path.join(BASE_LIBRARY, pyc_filename))
- return os.path.normpath(os.path.join(SYS_PREFIX, filename))
- elif filename.startswith(SYS_PREFIX):
- # If filename is already an absolute file path pointing into application's top-level directory, return it
- # as-is and prevent any further processing.
- return filename
- # Use original implementation as a fallback.
- return _orig_inspect_getsourcefile(object)
-
- inspect.getsourcefile = _pyi_getsourcefile
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_kivy.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_kivy.py
deleted file mode 100755
index 0846401..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_kivy.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import os
- import sys
-
- root = os.path.join(sys._MEIPASS, 'kivy_install')
-
- os.environ['KIVY_DATA_DIR'] = os.path.join(root, 'data')
- os.environ['KIVY_MODULES_DIR'] = os.path.join(root, 'modules')
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_mplconfig.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_mplconfig.py
deleted file mode 100755
index 93fec80..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_mplconfig.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# matplotlib will create $HOME/.matplotlib folder in user's home directory. In this directory there is fontList.cache
-# file which lists paths to matplotlib fonts.
-#
-# When you run your onefile exe for the first time it's extracted to for example "_MEIxxxxx" temp directory and
-# fontList.cache file is created with fonts paths pointing to this directory.
-#
-# Second time you run your exe new directory is created "_MEIyyyyy" but fontList.cache file still points to previous
-# directory which was deleted. And then you will get error like:
-#
-# RuntimeError: Could not open facefile
-#
-# We need to force matplotlib to recreate config directory every time you run your app.
-
-
-def _pyi_rthook():
- import atexit
- import os
- import shutil
-
- import _pyi_rth_utils.tempfile # PyInstaller's run-time hook utilities module
-
- # Isolate matplotlib's config dir into temporary directory.
- # Use our replacement for `tempfile.mkdtemp` function that properly restricts access to directory on all platforms.
- configdir = _pyi_rth_utils.tempfile.secure_mkdtemp()
- os.environ['MPLCONFIGDIR'] = configdir
-
- try:
- # Remove temp directory at application exit and ignore any errors.
- atexit.register(shutil.rmtree, configdir, ignore_errors=True)
- except OSError:
- pass
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py
deleted file mode 100755
index f596d93..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2017-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-def _pyi_rthook():
- import sys
-
- import multiprocessing
- import multiprocessing.spawn
-
- from subprocess import _args_from_interpreter_flags
-
- # Prevent `spawn` from trying to read `__main__` in from the main script
- multiprocessing.process.ORIGINAL_DIR = None
-
- def _freeze_support():
- # We want to catch the two processes that are spawned by the multiprocessing code:
- # - the semaphore tracker, which cleans up named semaphores in the `spawn` multiprocessing mode
- # - the fork server, which keeps track of worker processes in the `forkserver` mode.
- # Both of these processes are started by spawning a new copy of the running executable, passing it the flags
- # from `_args_from_interpreter_flags` and then "-c" and an import statement.
- # Look for those flags and the import statement, then `exec()` the code ourselves.
-
- if (
- len(sys.argv) >= 2 and sys.argv[-2] == '-c' and sys.argv[-1].startswith(
- ('from multiprocessing.resource_tracker import main', 'from multiprocessing.forkserver import main')
- ) and set(sys.argv[1:-2]) == set(_args_from_interpreter_flags())
- ):
- exec(sys.argv[-1])
- sys.exit()
-
- if multiprocessing.spawn.is_forking(sys.argv):
- kwds = {}
- for arg in sys.argv[2:]:
- name, value = arg.split('=')
- if value == 'None':
- kwds[name] = None
- else:
- kwds[name] = int(value)
- multiprocessing.spawn.spawn_main(**kwds)
- sys.exit()
-
- multiprocessing.freeze_support = multiprocessing.spawn.freeze_support = _freeze_support
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgres.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgres.py
deleted file mode 100755
index fe59194..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgres.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# To make pkg_resources work with frozen modules, we need to set the 'Provider' class for PyiFrozenLoader.
-# This class decides where to look for resources and other stuff.
-#
-# 'pkg_resources.NullProvider' is dedicated to abitrary PEP302 loaders, such as our PyiFrozenLoader. It uses method
-# __loader__.get_data() in methods pkg_resources.resource_string() and pkg_resources.resource_stream().
-#
-# We provide PyiFrozenProvider, which subclasses the NullProvider and implements _has(), _isdir(), and _listdir()
-# methods, which are needed for pkg_resources.resource_exists(), resource_isdir(), and resource_listdir() to work. We
-# cannot use the DefaultProvider, because it provides filesystem-only implementations (and overrides _get() with a
-# filesystem-only one), whereas our provider needs to also support embedded resources.
-#
-# The PyiFrozenProvider allows querying/listing both PYZ-embedded and on-filesystem resources in a frozen package. The
-# results are typically combined for both types of resources (e.g., when listing a directory or checking whether a
-# resource exists). When the order of precedence matters, the PYZ-embedded resources take precedence over the
-# on-filesystem ones, to keep the behavior consistent with the actual file content retrieval via _get() method (which in
-# turn uses PyiFrozenLoader's get_data() method). For example, when checking whether a resource is a directory via
-# _isdir(), a PYZ-embedded file will take precedence over a potential on-filesystem directory. Also, in contrast to
-# unfrozen packages, the frozen ones do not contain source .py files, which are therefore absent from content listings.
-
-
-def _pyi_rthook():
- import os
- import pathlib
- import sys
- import warnings
-
- with warnings.catch_warnings():
- warnings.filterwarnings(
- "ignore",
- category=UserWarning,
- message="pkg_resources is deprecated",
- )
- import pkg_resources
-
- import pyimod02_importers # PyInstaller's bootstrap module
-
- SYS_PREFIX = pathlib.PurePath(sys._MEIPASS)
-
- class _TocFilesystem:
- """
- A prefix tree implementation for embedded filesystem reconstruction.
-
- NOTE: as of PyInstaller 6.0, the embedded PYZ archive cannot contain data files anymore. Instead, it contains
- only .pyc modules - which are by design not returned by `PyiFrozenProvider`. So this implementation has been
- reduced to supporting only directories implied by collected packages.
- """
- def __init__(self, tree_node):
- self._tree = tree_node
-
- def _get_tree_node(self, path):
- path = pathlib.PurePath(path)
- current = self._tree
- for component in path.parts:
- if component not in current:
- return None
- current = current[component]
- return current
-
- def path_exists(self, path):
- node = self._get_tree_node(path)
- return isinstance(node, dict) # Directory only
-
- def path_isdir(self, path):
- node = self._get_tree_node(path)
- return isinstance(node, dict) # Directory only
-
- def path_listdir(self, path):
- node = self._get_tree_node(path)
- if not isinstance(node, dict):
- return [] # Non-existent or file
- # Return only sub-directories
- return [entry_name for entry_name, entry_data in node.items() if isinstance(entry_data, dict)]
-
- class PyiFrozenProvider(pkg_resources.NullProvider):
- """
- Custom pkg_resources provider for PyiFrozenLoader.
- """
- def __init__(self, module):
- super().__init__(module)
-
- # Get top-level path; if "module" corresponds to a package, we need the path to the package itself.
- # If "module" is a submodule in a package, we need the path to the parent package.
- #
- # This is equivalent to `pkg_resources.NullProvider.module_path`, except we construct a `pathlib.PurePath`
- # for easier manipulation.
- #
- # NOTE: the path is NOT resolved for symbolic links, as neither are paths that are passed by `pkg_resources`
- # to `_has`, `_isdir`, `_listdir` (they are all anchored to `module_path`, which in turn is just
- # `os.path.dirname(module.__file__)`. As `__file__` returned by `PyiFrozenLoader` is always anchored to
- # `sys._MEIPASS`, we do not have to worry about cross-linked directories in macOS .app bundles, where the
- # resolved `__file__` could be either in the `Contents/Frameworks` directory (the "true" `sys._MEIPASS`), or
- # in the `Contents/Resources` directory due to cross-linking.
- self._pkg_path = pathlib.PurePath(module.__file__).parent
-
- # Construct _TocFilesystem on top of pre-computed prefix tree provided by pyimod02_importers.
- self.embedded_tree = _TocFilesystem(pyimod02_importers.get_pyz_toc_tree())
-
- def _normalize_path(self, path):
- # Avoid using `Path.resolve`, because it resolves symlinks. This is undesirable, because the pure path in
- # `self._pkg_path` does not have symlinks resolved, so comparison between the two would be faulty. Instead,
- # use `os.path.normpath` to normalize the path and get rid of any '..' elements (the path itself should
- # already be absolute).
- return pathlib.Path(os.path.normpath(path))
-
- def _is_relative_to_package(self, path):
- return path == self._pkg_path or self._pkg_path in path.parents
-
- def _has(self, path):
- # Prevent access outside the package.
- path = self._normalize_path(path)
- if not self._is_relative_to_package(path):
- return False
-
- # Check the filesystem first to avoid unnecessarily computing the relative path...
- if path.exists():
- return True
- rel_path = path.relative_to(SYS_PREFIX)
- return self.embedded_tree.path_exists(rel_path)
-
- def _isdir(self, path):
- # Prevent access outside the package.
- path = self._normalize_path(path)
- if not self._is_relative_to_package(path):
- return False
-
- # Embedded resources have precedence over filesystem...
- rel_path = path.relative_to(SYS_PREFIX)
- node = self.embedded_tree._get_tree_node(rel_path)
- if node is None:
- return path.is_dir() # No match found; try the filesystem.
- else:
- # str = file, dict = directory
- return not isinstance(node, str)
-
- def _listdir(self, path):
- # Prevent access outside the package.
- path = self._normalize_path(path)
- if not self._is_relative_to_package(path):
- return []
-
- # Relative path for searching embedded resources.
- rel_path = path.relative_to(SYS_PREFIX)
- # List content from embedded filesystem...
- content = self.embedded_tree.path_listdir(rel_path)
- # ... as well as the actual one.
- if path.is_dir():
- # Use os.listdir() to avoid having to convert Path objects to strings... Also make sure to de-duplicate
- # the results.
- path = str(path) # not is_py36
- content = list(set(content + os.listdir(path)))
- return content
-
- pkg_resources.register_loader_type(pyimod02_importers.PyiFrozenLoader, PyiFrozenProvider)
-
- # With our PyiFrozenFinder now being a path entry finder, it effectively replaces python's FileFinder. So we need
- # to register it with `pkg_resources.find_on_path` to allow metadata to be found on filesystem.
- pkg_resources.register_finder(pyimod02_importers.PyiFrozenFinder, pkg_resources.find_on_path)
-
- # For the above change to fully take effect, we need to re-initialize pkg_resources's master working set (since the
- # original one was built with assumption that sys.path entries are handled by python's FileFinder).
- # See https://github.com/pypa/setuptools/issues/373
- if hasattr(pkg_resources, '_initialize_master_working_set'):
- pkg_resources._initialize_master_working_set()
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py
deleted file mode 100755
index e619d54..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-#
-# The run-time hook provides a custom module iteration function for our PyiFrozenFinder, which allows
-# `pkgutil.iter_modules()` to return entries for modules that are embedded in the PYZ archive. The non-embedded modules
-# (binary extensions, modules collected as only source .py files, etc.) are enumerated using the `fallback_finder`
-# provided by `PyiFrozenFinder` (which typically would be the python's `FileFinder`).
-def _pyi_rthook():
- import pkgutil
-
- import pyimod02_importers # PyInstaller's bootstrap module
-
- # This could, in fact, be implemented as `iter_modules()` method of the `PyiFrozenFinder`. However, we want to
- # avoid importing `pkgutil` in that bootstrap module (i.e., for the `pkgutil.iter_importer_modules()` call on the
- # fallback finder).
- def _iter_pyi_frozen_finder_modules(finder, prefix=''):
- # Fetch PYZ TOC tree from pyimod02_importers
- pyz_toc_tree = pyimod02_importers.get_pyz_toc_tree()
-
- # Finder has already pre-computed the package prefix implied by the search path. Use it to find the starting
- # node in the prefix tree.
- if finder._pyz_entry_prefix:
- pkg_name_parts = finder._pyz_entry_prefix.split('.')
- else:
- pkg_name_parts = []
-
- tree_node = pyz_toc_tree
- for pkg_name_part in pkg_name_parts:
- tree_node = tree_node.get(pkg_name_part)
- if not isinstance(tree_node, dict):
- # This check handles two cases:
- # a) path does not exist (`tree_node` is `None`)
- # b) path corresponds to a module instead of a package (`tree_node` is a leaf node (`str`)).
- tree_node = {}
- break
-
- # Dump the contents of the tree node.
- for entry_name, entry_data in tree_node.items():
- is_pkg = isinstance(entry_data, dict)
- yield prefix + entry_name, is_pkg
-
- # If our finder has a fall-back finder available, iterate its modules as well. By using the public
- # `fallback_finder` attribute, we force creation of the fallback finder as necessary.
- # NOTE: we do not care about potential duplicates here, because `pkgutil.iter_modules()` itself
- # keeps track of yielded names for purposes of de-duplication.
- if finder.fallback_finder is not None:
- yield from pkgutil.iter_importer_modules(finder.fallback_finder, prefix)
-
- pkgutil.iter_importer_modules.register(
- pyimod02_importers.PyiFrozenFinder,
- _iter_pyi_frozen_finder_modules,
- )
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyqt5.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyqt5.py
deleted file mode 100755
index fa388e8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyqt5.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# The path to Qt's components may not default to the wheel layout for self-compiled PyQt5 installations. Mandate the
-# wheel layout. See ``utils/hooks/qt.py`` for more details.
-
-
-def _pyi_rthook():
- import os
- import sys
-
- from _pyi_rth_utils import is_macos_app_bundle, prepend_path_to_environment_variable
- from _pyi_rth_utils import qt as qt_rth_utils
-
- # Ensure this is the only Qt bindings package in the application.
- qt_rth_utils.ensure_single_qt_bindings_package("PyQt5")
-
- # Try PyQt5 5.15.4-style path first...
- pyqt_path = os.path.join(sys._MEIPASS, 'PyQt5', 'Qt5')
- if not os.path.isdir(pyqt_path):
- # ... and fall back to the older version
- pyqt_path = os.path.join(sys._MEIPASS, 'PyQt5', 'Qt')
-
- os.environ['QT_PLUGIN_PATH'] = os.path.join(pyqt_path, 'plugins')
-
- if is_macos_app_bundle:
- # Special handling for macOS .app bundles. To satisfy codesign requirements, we are forced to split `qml`
- # directory into two parts; one that keeps only binaries (rooted in `Contents/Frameworks`) and one that keeps
- # only data files (rooted in `Contents/Resources), with files from one directory tree being symlinked to the
- # other to maintain illusion of a single mixed-content directory. As Qt seems to compute the identifier of its
- # QML components based on location of the `qmldir` file w.r.t. the registered QML import paths, we need to
- # register both paths, because the `qmldir` file for a component could be reached via either directory tree.
- pyqt_path_res = os.path.normpath(
- os.path.join(sys._MEIPASS, '..', 'Resources', os.path.relpath(pyqt_path, sys._MEIPASS))
- )
- os.environ['QML2_IMPORT_PATH'] = os.pathsep.join([
- os.path.join(pyqt_path_res, 'qml'),
- os.path.join(pyqt_path, 'qml'),
- ])
- else:
- os.environ['QML2_IMPORT_PATH'] = os.path.join(pyqt_path, 'qml')
-
- # Back in the day, this was required because PyQt5 5.12.3 explicitly checked that `Qt5Core.dll` was in `PATH`
- # (see #4293), and contemporary PyInstaller versions collected that DLL to `sys._MEIPASS`.
- #
- # Nowadays, we add `sys._MEIPASS` to `PATH` in order to ensure that `QtNetwork` can discover OpenSSL DLLs that might
- # have been collected there (i.e., when they were not shipped with the package, and were collected from an external
- # location).
- if sys.platform.startswith('win'):
- prepend_path_to_environment_variable(sys._MEIPASS, 'PATH')
-
- # Qt bindings package installed via PyPI wheels typically ensures that its bundled Qt is relocatable, by creating
- # embedded `qt.conf` file during its initialization. This run-time generated qt.conf dynamically sets the Qt prefix
- # path to the package's Qt directory. For bindings packages that do not create embedded `qt.conf` during their
- # initialization (for example, conda-installed packages), try to perform this step ourselves.
- qt_rth_utils.create_embedded_qt_conf("PyQt5", pyqt_path)
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyqt6.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyqt6.py
deleted file mode 100755
index d3ed0cd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyqt6.py
+++ /dev/null
@@ -1,70 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# The path to Qt's components may not default to the wheel layout for self-compiled PyQt6 installations. Mandate the
-# wheel layout. See ``utils/hooks/qt.py`` for more details.
-
-
-def _pyi_rthook():
- import os
- import sys
-
- from _pyi_rth_utils import is_macos_app_bundle, prepend_path_to_environment_variable
- from _pyi_rth_utils import qt as qt_rth_utils
-
- # Ensure this is the only Qt bindings package in the application.
- qt_rth_utils.ensure_single_qt_bindings_package("PyQt6")
-
- # Try PyQt6 6.0.3-style path first...
- pyqt_path = os.path.join(sys._MEIPASS, 'PyQt6', 'Qt6')
- if not os.path.isdir(pyqt_path):
- # ... and fall back to the older version.
- pyqt_path = os.path.join(sys._MEIPASS, 'PyQt6', 'Qt')
-
- os.environ['QT_PLUGIN_PATH'] = os.path.join(pyqt_path, 'plugins')
-
- if is_macos_app_bundle:
- # Special handling for macOS .app bundles. To satisfy codesign requirements, we are forced to split `qml`
- # directory into two parts; one that keeps only binaries (rooted in `Contents/Frameworks`) and one that keeps
- # only data files (rooted in `Contents/Resources), with files from one directory tree being symlinked to the
- # other to maintain illusion of a single mixed-content directory. As Qt seems to compute the identifier of its
- # QML components based on location of the `qmldir` file w.r.t. the registered QML import paths, we need to
- # register both paths, because the `qmldir` file for a component could be reached via either directory tree.
- pyqt_path_res = os.path.normpath(
- os.path.join(sys._MEIPASS, '..', 'Resources', os.path.relpath(pyqt_path, sys._MEIPASS))
- )
- os.environ['QML2_IMPORT_PATH'] = os.pathsep.join([
- os.path.join(pyqt_path_res, 'qml'),
- os.path.join(pyqt_path, 'qml'),
- ])
- else:
- os.environ['QML2_IMPORT_PATH'] = os.path.join(pyqt_path, 'qml')
-
- # Add `sys._MEIPASS` to `PATH` in order to ensure that `QtNetwork` can discover OpenSSL DLLs that might have been
- # collected there (i.e., when they were not shipped with the package, and were collected from an external location).
- if sys.platform.startswith('win'):
- prepend_path_to_environment_variable(sys._MEIPASS, 'PATH')
-
- # For macOS POSIX builds, we need to add `sys._MEIPASS` to `DYLD_LIBRARY_PATH` so that QtNetwork can discover
- # OpenSSL dynamic libraries for its `openssl` TLS backend. This also prevents fallback to external locations, such
- # as Homebrew. For .app bundles, this is unnecessary because `QtNetwork` explicitly searches `Contents/Frameworks`.
- if sys.platform == 'darwin' and not is_macos_app_bundle:
- prepend_path_to_environment_variable(sys._MEIPASS, 'DYLD_LIBRARY_PATH')
-
- # Qt bindings package installed via PyPI wheels typically ensures that its bundled Qt is relocatable, by creating
- # embedded `qt.conf` file during its initialization. This run-time generated qt.conf dynamically sets the Qt prefix
- # path to the package's Qt directory. For bindings packages that do not create embedded `qt.conf` during their
- # initialization (for example, conda-installed packages), try to perform this step ourselves.
- qt_rth_utils.create_embedded_qt_conf("PyQt6", pyqt_path)
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyside2.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyside2.py
deleted file mode 100755
index 3aca93b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyside2.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# The path to Qt's components may not default to the wheel layout for self-compiled PySide2 installations. Mandate the
-# wheel layout. See ``utils/hooks/qt.py`` for more details.
-
-
-def _pyi_rthook():
- import os
- import sys
-
- from _pyi_rth_utils import is_macos_app_bundle, prepend_path_to_environment_variable
- from _pyi_rth_utils import qt as qt_rth_utils
-
- # Ensure this is the only Qt bindings package in the application.
- qt_rth_utils.ensure_single_qt_bindings_package("PySide2")
-
- if sys.platform.startswith('win'):
- pyqt_path = os.path.join(sys._MEIPASS, 'PySide2')
- else:
- pyqt_path = os.path.join(sys._MEIPASS, 'PySide2', 'Qt')
-
- os.environ['QT_PLUGIN_PATH'] = os.path.join(pyqt_path, 'plugins')
-
- if is_macos_app_bundle:
- # Special handling for macOS .app bundles. To satisfy codesign requirements, we are forced to split `qml`
- # directory into two parts; one that keeps only binaries (rooted in `Contents/Frameworks`) and one that keeps
- # only data files (rooted in `Contents/Resources), with files from one directory tree being symlinked to the
- # other to maintain illusion of a single mixed-content directory. As Qt seems to compute the identifier of its
- # QML components based on location of the `qmldir` file w.r.t. the registered QML import paths, we need to
- # register both paths, because the `qmldir` file for a component could be reached via either directory tree.
- pyqt_path_res = os.path.normpath(
- os.path.join(sys._MEIPASS, '..', 'Resources', os.path.relpath(pyqt_path, sys._MEIPASS))
- )
- os.environ['QML2_IMPORT_PATH'] = os.pathsep.join([
- os.path.join(pyqt_path_res, 'qml'),
- os.path.join(pyqt_path, 'qml'),
- ])
- else:
- os.environ['QML2_IMPORT_PATH'] = os.path.join(pyqt_path, 'qml')
-
- # Add `sys._MEIPASS` to `PATH` in order to ensure that `QtNetwork` can discover OpenSSL DLLs that might have been
- # collected there (i.e., when they were not shipped with the package, and were collected from an external location).
- if sys.platform.startswith('win'):
- prepend_path_to_environment_variable(sys._MEIPASS, 'PATH')
-
- # Qt bindings package installed via PyPI wheels typically ensures that its bundled Qt is relocatable, by creating
- # embedded `qt.conf` file during its initialization. This run-time generated qt.conf dynamically sets the Qt prefix
- # path to the package's Qt directory. For bindings packages that do not create embedded `qt.conf` during their
- # initialization (for example, conda-installed packages), try to perform this step ourselves.
- qt_rth_utils.create_embedded_qt_conf("PySide2", pyqt_path)
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyside6.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyside6.py
deleted file mode 100755
index 73db137..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pyside6.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# The path to Qt's components may not default to the wheel layout for self-compiled PySide6 installations. Mandate the
-# wheel layout. See ``utils/hooks/qt.py`` for more details.
-
-
-def _pyi_rthook():
- import os
- import sys
-
- from _pyi_rth_utils import is_macos_app_bundle, prepend_path_to_environment_variable
- from _pyi_rth_utils import qt as qt_rth_utils
-
- # Ensure this is the only Qt bindings package in the application.
- qt_rth_utils.ensure_single_qt_bindings_package("PySide6")
-
- if sys.platform.startswith('win'):
- pyqt_path = os.path.join(sys._MEIPASS, 'PySide6')
- else:
- pyqt_path = os.path.join(sys._MEIPASS, 'PySide6', 'Qt')
-
- os.environ['QT_PLUGIN_PATH'] = os.path.join(pyqt_path, 'plugins')
-
- if is_macos_app_bundle:
- # Special handling for macOS .app bundles. To satisfy codesign requirements, we are forced to split `qml`
- # directory into two parts; one that keeps only binaries (rooted in `Contents/Frameworks`) and one that keeps
- # only data files (rooted in `Contents/Resources), with files from one directory tree being symlinked to the
- # other to maintain illusion of a single mixed-content directory. As Qt seems to compute the identifier of its
- # QML components based on location of the `qmldir` file w.r.t. the registered QML import paths, we need to
- # register both paths, because the `qmldir` file for a component could be reached via either directory tree.
- pyqt_path_res = os.path.normpath(
- os.path.join(sys._MEIPASS, '..', 'Resources', os.path.relpath(pyqt_path, sys._MEIPASS))
- )
- os.environ['QML2_IMPORT_PATH'] = os.pathsep.join([
- os.path.join(pyqt_path_res, 'qml'),
- os.path.join(pyqt_path, 'qml'),
- ])
- else:
- os.environ['QML2_IMPORT_PATH'] = os.path.join(pyqt_path, 'qml')
-
- # Add `sys._MEIPASS` to `PATH` in order to ensure that `QtNetwork` can discover OpenSSL DLLs that might have been
- # collected there (i.e., when they were not shipped with the package, and were collected from an external location).
- if sys.platform.startswith('win'):
- prepend_path_to_environment_variable(sys._MEIPASS, 'PATH')
-
- # For macOS POSIX builds, we need to add `sys._MEIPASS` to `DYLD_LIBRARY_PATH` so that QtNetwork can discover
- # OpenSSL dynamic libraries for its `openssl` TLS backend. This also prevents fallback to external locations, such
- # as Homebrew. For .app bundles, this is unnecessary because `QtNetwork` explicitly searches `Contents/Frameworks`.
- if sys.platform == 'darwin' and not is_macos_app_bundle:
- prepend_path_to_environment_variable(sys._MEIPASS, 'DYLD_LIBRARY_PATH')
-
- # Qt bindings package installed via PyPI wheels typically ensures that its bundled Qt is relocatable, by creating
- # embedded `qt.conf` file during its initialization. This run-time generated qt.conf dynamically sets the Qt prefix
- # path to the package's Qt directory. For bindings packages that do not create embedded `qt.conf` during their
- # initialization (for example, conda-installed packages), try to perform this step ourselves.
- qt_rth_utils.create_embedded_qt_conf("PySide6", pyqt_path)
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_setuptools.py b/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_setuptools.py
deleted file mode 100755
index 0a3ffb8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_setuptools.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2022-2023, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# This runtime hook performs the equivalent of the distutils-precedence.pth from the setuptools package;
-# it registers a special meta finder that diverts import of distutils to setuptools._distutils, if available.
-
-
-def _pyi_rthook():
- def _install_setuptools_distutils_hack():
- import os
- import setuptools
-
- # We need to query setuptools version at runtime, because the default value for SETUPTOOLS_USE_DISTUTILS
- # has changed at version 60.0 from "stdlib" to "local", and we want to mimic that behavior.
- setuptools_major = int(setuptools.__version__.split('.')[0])
- default_value = "stdlib" if setuptools_major < 60 else "local"
-
- if os.environ.get("SETUPTOOLS_USE_DISTUTILS", default_value) == "local":
- import _distutils_hack
- _distutils_hack.add_shim()
-
- try:
- _install_setuptools_distutils_hack()
- except Exception:
- pass
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/isolated/__init__.py
deleted file mode 100755
index 3016e7d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__init__.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) or, at the user's discretion, the MIT License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception OR MIT)
-# -----------------------------------------------------------------------------
-"""
-PyInstaller hooks typically will need to import the package which they are written for but doing so may manipulate
-globals such as :data:`sys.path` or :data:`os.environ` in ways that affect the build. For example, on Windows,
-Qt's binaries are added to then loaded via ``PATH`` in such a way that if you import multiple Qt variants in one
-session then there is no guarantee which variant's binaries each variant will get!
-
-To get around this, PyInstaller does any such tasks in an isolated Python subprocess and ships a
-:mod:`PyInstaller.isolated` submodule to do so in hooks. ::
-
- from PyInstaller import isolated
-
-This submodule provides:
-
-* :func:`isolated.call() ` to evaluate functions in isolation.
-* :func:`@isolated.decorate ` to mark a function as always called in isolation.
-* :class:`isolated.Python() ` to efficiently call many functions in a single child instance of Python.
-
-"""
-
-# flake8: noqa
-from ._parent import Python, call, decorate, SubprocessDiedError
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 5dfc2de..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/_child.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/_child.cpython-312.pyc
deleted file mode 100644
index f62fe68..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/_child.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/_parent.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/_parent.cpython-312.pyc
deleted file mode 100644
index f1ef11c..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/isolated/__pycache__/_parent.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/isolated/_child.py b/venv/lib/python3.12/site-packages/PyInstaller/isolated/_child.py
deleted file mode 100755
index 0709b68..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/isolated/_child.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) or, at the user's discretion, the MIT License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception OR MIT)
-# -----------------------------------------------------------------------------
-"""
-The child process to be invoked by IsolatedPython().
-
-This file is to be run directly with pipe handles for reading from and writing to the parent process as command line
-arguments.
-
-"""
-
-import sys
-import os
-import types
-from marshal import loads, dumps
-from base64 import b64encode, b64decode
-from traceback import format_exception
-
-if os.name == "nt":
- from msvcrt import open_osfhandle
-
- def _open(osf_handle, mode):
- # Convert system file handles to file descriptors before opening them.
- return open(open_osfhandle(osf_handle, 0), mode)
-else:
- _open = open
-
-
-def run_next_command(read_fh, write_fh):
- """
- Listen to **read_fh** for the next function to run. Write the result to **write_fh**.
- """
-
- # Check the first line of input. Receiving an empty line is the signal that there are no more tasks to be ran.
- first_line = read_fh.readline()
- if first_line == b"\n":
- # It's time to end this child process
- return False
-
- # There are 5 lines to read: The function's code, its default args, its default kwargs, its args, and its kwargs.
- code = loads(b64decode(first_line.strip()))
- _defaults = loads(b64decode(read_fh.readline().strip()))
- _kwdefaults = loads(b64decode(read_fh.readline().strip()))
- args = loads(b64decode(read_fh.readline().strip()))
- kwargs = loads(b64decode(read_fh.readline().strip()))
-
- try:
- # Define the global namespace available to the function.
- GLOBALS = {"__builtins__": __builtins__, "__isolated__": True}
- # Reconstruct the function.
- function = types.FunctionType(code, GLOBALS)
- function.__defaults__ = _defaults
- function.__kwdefaults__ = _kwdefaults
-
- # Run it.
- output = function(*args, **kwargs)
-
- # Verify that the output is serialise-able (i.e. no custom types or module or function references) here so that
- # it's caught if it fails.
- marshalled = dumps((True, output))
-
- except BaseException as ex:
- # An exception happened whilst either running the function or serialising its output. Send back a string
- # version of the traceback (unfortunately raw traceback objects are not marshal-able) and a boolean to say
- # that it failed.
- tb_lines = format_exception(type(ex), ex, ex.__traceback__)
- if tb_lines[0] == "Traceback (most recent call last):\n":
- # This particular line is distracting. Get rid of it.
- tb_lines = tb_lines[1:]
- marshalled = dumps((False, "".join(tb_lines).rstrip()))
-
- # Send the output (return value or traceback) back to the parent.
- write_fh.write(b64encode(marshalled))
- write_fh.write(b"\n")
- write_fh.flush()
-
- # Signal that an instruction was ran (successfully or otherwise).
- return True
-
-
-if __name__ == '__main__':
- # Mark this process as PyInstaller's isolated subprocess; this makes attempts at spawning further isolated
- # subprocesses via `PyInstaller.isolated` from this process no-op.
- sys._pyi_isolated_subprocess = True
-
- read_from_parent, write_to_parent = map(int, sys.argv[1:])
-
- with _open(read_from_parent, "rb") as read_fh:
- with _open(write_to_parent, "wb") as write_fh:
- sys.path = loads(b64decode(read_fh.readline()))
-
- # Keep receiving and running instructions until the parent sends the signal to stop.
- while run_next_command(read_fh, write_fh):
- pass
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/isolated/_parent.py b/venv/lib/python3.12/site-packages/PyInstaller/isolated/_parent.py
deleted file mode 100755
index 0998e93..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/isolated/_parent.py
+++ /dev/null
@@ -1,437 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2021-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) or, at the user's discretion, the MIT License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception OR MIT)
-# -----------------------------------------------------------------------------
-
-import os
-from pathlib import Path
-from marshal import loads, dumps
-from base64 import b64encode, b64decode
-import functools
-import subprocess
-import sys
-
-from PyInstaller import compat
-from PyInstaller import log as logging
-
-logger = logging.getLogger(__name__)
-
-# WinAPI bindings for Windows-specific codepath
-if os.name == "nt":
- import msvcrt
- import ctypes
- import ctypes.wintypes
-
- # CreatePipe
- class SECURITY_ATTRIBUTES(ctypes.Structure):
- _fields_ = [
- ("nLength", ctypes.wintypes.DWORD),
- ("lpSecurityDescriptor", ctypes.wintypes.LPVOID),
- ("bInheritHandle", ctypes.wintypes.BOOL),
- ]
-
- HANDLE_FLAG_INHERIT = 0x0001
-
- LPSECURITY_ATTRIBUTES = ctypes.POINTER(SECURITY_ATTRIBUTES)
-
- CreatePipe = ctypes.windll.kernel32.CreatePipe
- CreatePipe.argtypes = [
- ctypes.POINTER(ctypes.wintypes.HANDLE),
- ctypes.POINTER(ctypes.wintypes.HANDLE),
- LPSECURITY_ATTRIBUTES,
- ctypes.wintypes.DWORD,
- ]
- CreatePipe.restype = ctypes.wintypes.BOOL
-
- # CloseHandle
- CloseHandle = ctypes.windll.kernel32.CloseHandle
- CloseHandle.argtypes = [ctypes.wintypes.HANDLE]
- CloseHandle.restype = ctypes.wintypes.BOOL
-
-CHILD_PY = Path(__file__).with_name("_child.py")
-
-
-def create_pipe(read_handle_inheritable, write_handle_inheritable):
- """
- Create a one-way pipe for sending data to child processes.
-
- Args:
- read_handle_inheritable:
- A boolean flag indicating whether the handle corresponding to the read end-point of the pipe should be
- marked as inheritable by subprocesses.
- write_handle_inheritable:
- A boolean flag indicating whether the handle corresponding to the write end-point of the pipe should be
- marked as inheritable by subprocesses.
-
- Returns:
- A read/write pair of file descriptors (which are just integers) on posix or system file handles on Windows.
-
- The pipe may be used either by this process or subprocesses of this process but not globally.
- """
- return _create_pipe_impl(read_handle_inheritable, write_handle_inheritable)
-
-
-def close_pipe_endpoint(pipe_handle):
- """
- Close the file descriptor (posix) or handle (Windows) belonging to a pipe.
- """
- return _close_pipe_endpoint_impl(pipe_handle)
-
-
-if os.name == "nt":
-
- def _create_pipe_impl(read_handle_inheritable, write_handle_inheritable):
- # Use WinAPI CreatePipe function to create the pipe. Python's os.pipe() does the same, but wraps the resulting
- # handles into inheritable file descriptors (https://github.com/python/cpython/issues/77046). Instead, we want
- # just handles, and will set the inheritable flag on corresponding handle ourselves.
- read_handle = ctypes.wintypes.HANDLE()
- write_handle = ctypes.wintypes.HANDLE()
-
- # SECURITY_ATTRIBUTES with inherit handle set to True
- security_attributes = SECURITY_ATTRIBUTES()
- security_attributes.nLength = ctypes.sizeof(security_attributes)
- security_attributes.bInheritHandle = True
- security_attributes.lpSecurityDescriptor = None
-
- # CreatePipe()
- succeeded = CreatePipe(
- ctypes.byref(read_handle), # hReadPipe
- ctypes.byref(write_handle), # hWritePipe
- ctypes.byref(security_attributes), # lpPipeAttributes
- 0, # nSize
- )
- if not succeeded:
- raise ctypes.WinError()
-
- # Set inheritable flags. Instead of binding and using SetHandleInformation WinAPI function, we can use
- # os.set_handle_inheritable().
- os.set_handle_inheritable(read_handle.value, read_handle_inheritable)
- os.set_handle_inheritable(write_handle.value, write_handle_inheritable)
-
- return read_handle.value, write_handle.value
-
- def _close_pipe_endpoint_impl(pipe_handle):
- succeeded = CloseHandle(pipe_handle)
- if not succeeded:
- raise ctypes.WinError()
-else:
-
- def _create_pipe_impl(read_fd_inheritable, write_fd_inheritable):
- # Create pipe, using os.pipe()
- read_fd, write_fd = os.pipe()
-
- # The default behaviour of pipes is that they are process specific. I.e., they can only be used by this
- # process to talk to itself. Setting inheritable flags means that child processes may also use these pipes.
- os.set_inheritable(read_fd, read_fd_inheritable)
- os.set_inheritable(write_fd, write_fd_inheritable)
-
- return read_fd, write_fd
-
- def _close_pipe_endpoint_impl(pipe_fd):
- os.close(pipe_fd)
-
-
-def child(read_from_parent: int, write_to_parent: int):
- """
- Spawn a Python subprocess sending it the two file descriptors it needs to talk back to this parent process.
- """
- if os.name != 'nt':
- # Explicitly disabling close_fds is a requirement for making file descriptors inheritable by child processes.
- extra_kwargs = {
- "env": _subprocess_env(),
- "close_fds": False,
- }
- else:
- # On Windows, we can use subprocess.STARTUPINFO to explicitly pass the list of file handles to be inherited,
- # so we can avoid disabling close_fds
- extra_kwargs = {
- "env": _subprocess_env(),
- "close_fds": True,
- "startupinfo": subprocess.STARTUPINFO(lpAttributeList={"handle_list": [read_from_parent, write_to_parent]})
- }
-
- # Run the _child.py script directly passing it the two file descriptors it needs to talk back to the parent.
- cmd, options = compat.__wrap_python([str(CHILD_PY), str(read_from_parent), str(write_to_parent)], extra_kwargs)
-
- # I'm intentionally leaving stdout and stderr alone so that print() can still be used for emergency debugging and
- # unhandled errors in the child are still visible.
- return subprocess.Popen(cmd, **options)
-
-
-def _subprocess_env():
- """
- Define the environment variables to be readable in a child process.
- """
- from PyInstaller.config import CONF
- python_path = CONF["pathex"]
- if "PYTHONPATH" in os.environ:
- python_path = python_path + [os.environ["PYTHONPATH"]]
- env = os.environ.copy()
- env["PYTHONPATH"] = os.pathsep.join(python_path)
- return env
-
-
-class SubprocessDiedError(RuntimeError):
- pass
-
-
-class Python:
- """
- Start and connect to a separate Python subprocess.
-
- This is the lowest level of public API provided by this module. The advantage of using this class directly is
- that it allows multiple functions to be evaluated in a single subprocess, making it faster than multiple calls to
- :func:`call`.
-
- The ``strict_mode`` argument controls behavior when the child process fails to shut down; if strict mode is enabled,
- an error is raised, otherwise only warning is logged. If the value of ``strict_mode`` is ``None``, the value of
- ``PyInstaller.compat.strict_collect_mode`` is used (which in turn is controlled by the
- ``PYINSTALLER_STRICT_COLLECT_MODE`` environment variable.
-
- Examples:
- To call some predefined functions ``x = foo()``, ``y = bar("numpy")`` and ``z = bazz(some_flag=True)`` all using
- the same isolated subprocess use::
-
- with isolated.Python() as child:
- x = child.call(foo)
- y = child.call(bar, "numpy")
- z = child.call(bazz, some_flag=True)
-
- """
- def __init__(self, strict_mode=None):
- self._child = None
-
- # Re-use the compat.strict_collect_mode and its PYINSTALLER_STRICT_COLLECT_MODE environment variable for
- # default strict-mode setting.
- self._strict_mode = strict_mode if strict_mode is not None else compat.strict_collect_mode
-
- # Check if we are already running in PyInstaller's isolated subprocess, to prevent further nesting.
- self._already_isolated = getattr(sys, '_pyi_isolated_subprocess', False)
-
- def __enter__(self):
- # No-op if already running in an isolated subprocess.
- if self._already_isolated:
- return self
-
- # We need two pipes. One for the child to send data to the parent. The (write) end-point passed to the
- # child needs to be marked as inheritable.
- read_from_child, write_to_parent = create_pipe(False, True)
- # And one for the parent to send data to the child. The (read) end-point passed to the child needs to be
- # marked as inheritable.
- read_from_parent, write_to_child = create_pipe(True, False)
-
- # Spawn a Python subprocess sending it the two file descriptors it needs to talk back to this parent process.
- self._child = child(read_from_parent, write_to_parent)
-
- # Close the end-points that were inherited by the child.
- close_pipe_endpoint(read_from_parent)
- close_pipe_endpoint(write_to_parent)
- del read_from_parent
- del write_to_parent
-
- # Open file handles to talk to the child. This should fully transfer ownership of the underlying file
- # descriptor to the opened handle; so when we close the latter, the former should be closed as well.
- if os.name == 'nt':
- # On Windows, we must first open file descriptor on top of the handle using _open_osfhandle (which
- # python wraps in msvcrt.open_osfhandle). According to MSDN, this transfers the ownership of the
- # underlying file handle to the file descriptors; i.e., they are both closed when the file descriptor
- # is closed).
- self._write_handle = os.fdopen(msvcrt.open_osfhandle(write_to_child, 0), "wb")
- self._read_handle = os.fdopen(msvcrt.open_osfhandle(read_from_child, 0), "rb")
- else:
- self._write_handle = os.fdopen(write_to_child, "wb")
- self._read_handle = os.fdopen(read_from_child, "rb")
-
- self._send(sys.path)
-
- return self
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- # No-op if already running in an isolated subprocess.
- if self._already_isolated:
- return
-
- if exc_type and issubclass(exc_type, SubprocessDiedError):
- self._write_handle.close()
- self._read_handle.close()
- del self._read_handle, self._write_handle
- self._child = None
- return
- # Send the signal (a blank line) to the child to tell it that it's time to stop.
- self._write_handle.write(b"\n")
- self._write_handle.flush()
-
- # Wait for the child process to exit. The timeout is necessary for corner cases when the sub-process fails to
- # exit (such as due to dangling non-daemon threads; see #7290). At this point, the subprocess already did all
- # its work, so it should be safe to terminate. And as we expect it to shut down quickly (or not at all), the
- # timeout is relatively short.
- #
- # In strict build mode, we raise an error when the subprocess fails to exit on its own, but do so only after
- # we attempt to kill the subprocess, to avoid leaving zombie processes.
- shutdown_error = False
-
- try:
- self._child.wait(timeout=5)
- except subprocess.TimeoutExpired:
- logger.warning("Timed out while waiting for the child process to exit!")
- shutdown_error = True
- self._child.kill()
- try:
- self._child.wait(timeout=15)
- except subprocess.TimeoutExpired:
- logger.warning("Timed out while waiting for the child process to be killed!")
- # Give up and fall through
-
- # Close the handles. This should also close the underlying file descriptors.
- self._write_handle.close()
- self._read_handle.close()
- del self._read_handle, self._write_handle
-
- self._child = None
-
- # Raise an error in strict mode, after all clean-up has been performed.
- if shutdown_error and self._strict_mode:
- raise RuntimeError("Timed out while waiting for the child process to exit!")
-
- def call(self, function, *args, **kwargs):
- """
- Call a function in the child Python. Retrieve its return value. Usage of this method is identical to that
- of the :func:`call` function.
- """
- # If already running in an isolated subprocess, directly execute the function.
- if self._already_isolated:
- return function(*args, **kwargs)
-
- if self._child is None:
- raise RuntimeError("An isolated.Python object must be used in a 'with' clause.")
-
- self._send(function.__code__, function.__defaults__, function.__kwdefaults__, args, kwargs)
-
- # Read a single line of output back from the child. This contains if the function worked and either its return
- # value or a traceback. This will block indefinitely until it receives a '\n' byte.
- try:
- ok, output = loads(b64decode(self._read_handle.readline()))
- except (EOFError, BrokenPipeError):
- # Subprocess appears to have died in an unhandleable way (e.g. SIGSEV). Raise an error.
- raise SubprocessDiedError(
- f"Child process died calling {function.__name__}() with args={args} and "
- f"kwargs={kwargs}. Its exit code was {self._child.wait()}."
- ) from None
-
- # If all went well, then ``output`` is the return value.
- if ok:
- return output
-
- # Otherwise an error happened and ``output`` is a string-ified stacktrace. Raise an error appending the
- # stacktrace. Having the output in this order gives a nice fluent transition from parent to child in the stack
- # trace.
- raise RuntimeError(f"Child process call to {function.__name__}() failed with:\n" + output)
-
- def _send(self, *objects):
- for object in objects:
- self._write_handle.write(b64encode(dumps(object)))
- self._write_handle.write(b"\n")
- # Flushing is very important. Without it, the data is not sent but forever sits in a buffer so that the child is
- # forever waiting for its data and the parent in turn is forever waiting for the child's response.
- self._write_handle.flush()
-
-
-def call(function, *args, **kwargs):
- r"""
- Call a function with arguments in a separate child Python. Retrieve its return value.
-
- Args:
- function:
- The function to send and invoke.
- *args:
- **kwargs:
- Positional and keyword arguments to send to the function. These must be simple builtin types - not custom
- classes.
- Returns:
- The return value of the function. Again, these must be basic types serialisable by :func:`marshal.dumps`.
- Raises:
- RuntimeError:
- Any exception which happens inside an isolated process is caught and reraised in the parent process.
-
- To use, define a function which returns the information you're looking for. Any imports it requires must happen in
- the body of the function. For example, to safely check the output of ``matplotlib.get_data_path()`` use::
-
- # Define a function to be ran in isolation.
- def get_matplotlib_data_path():
- import matplotlib
- return matplotlib.get_data_path()
-
- # Call it with isolated.call().
- get_matplotlib_data_path = isolated.call(matplotlib_data_path)
-
- For single use functions taking no arguments like the above you can abuse the decorator syntax slightly to define
- and execute a function in one go. ::
-
- >>> @isolated.call
- ... def matplotlib_data_dir():
- ... import matplotlib
- ... return matplotlib.get_data_path()
- >>> matplotlib_data_dir
- '/home/brenainn/.pyenv/versions/3.9.6/lib/python3.9/site-packages/matplotlib/mpl-data'
-
- Functions may take positional and keyword arguments and return most generic Python data types. ::
-
- >>> def echo_parameters(*args, **kwargs):
- ... return args, kwargs
- >>> isolated.call(echo_parameters, 1, 2, 3)
- (1, 2, 3), {}
- >>> isolated.call(echo_parameters, foo=["bar"])
- (), {'foo': ['bar']}
-
- Notes:
- To make a function behave differently if it's isolated, check for the ``__isolated__`` global. ::
-
- if globals().get("__isolated__", False):
- # We're inside a child process.
- ...
- else:
- # This is the master process.
- ...
-
- """
- with Python() as isolated:
- return isolated.call(function, *args, **kwargs)
-
-
-def decorate(function):
- """
- Decorate a function so that it is always called in an isolated subprocess.
-
- Examples:
-
- To use, write a function then prepend ``@isolated.decorate``. ::
-
- @isolated.decorate
- def add_1(x):
- '''Add 1 to ``x``, displaying the current process ID.'''
- import os
- print(f"Process {os.getpid()}: Adding 1 to {x}.")
- return x + 1
-
- The resultant ``add_1()`` function can now be called as you would a
- normal function and it'll automatically use a subprocess.
-
- >>> add_1(4)
- Process 4920: Adding 1 to 4.
- 5
- >>> add_1(13.2)
- Process 4928: Adding 1 to 13.2.
- 14.2
-
- """
- @functools.wraps(function)
- def wrapped(*args, **kwargs):
- return call(function, *args, **kwargs)
-
- return wrapped
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/README.rst b/venv/lib/python3.12/site-packages/PyInstaller/lib/README.rst
deleted file mode 100755
index a09f6d5..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/lib/README.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-Custom modifications of 3rd party libraries
-===========================================
-
-NOTE: PyInstaller does not extend PYTHONPATH (sys.path) with this directory
-that contains bundled 3rd party libraries.
-
-Some users complained that PyInstaller failed because their apps were using
-too old versions of some libraries that PyInstaller uses too and that's why
-extending sys.path was dropped.
-
-All libraries are tweaked to be importable as::
-
- from PyInstaller.lib.LIB_NAME import xyz
-
-In libraries replace imports like::
-
- from altgraph import y
- from modulegraph import z
-
-with relative prefix::
-
- from ..altgraph import y
- from ..modulegraph import z
-
-
-altgraph
-----------
-
-- add fixed version string to ./altgraph/__init__.py::
-
- # For PyInstaller/lib/ define the version here, since there is no
- # package-resource.
- __version__ = '0.13'
-
-
-modulegraph
------------
-
-https://bitbucket.org/ronaldoussoren/modulegraph/downloads
-
-- TODO Use official modulegraph version when following issue is resolved and pull request merged
- https://bitbucket.org/ronaldoussoren/modulegraph/issues/28/__main__-module-being-analyzed-for-wheel
-
-- add fixed version string to ./modulegraph/__init__.py::
-
- # For PyInstaller/lib/ define the version here, since there is no
- # package-resource.
- __version__ = '0.13'
-
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/lib/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/lib/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/lib/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 8c57db1..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/lib/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__init__.py
deleted file mode 100755
index 9446169..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-__version__ = '0.17'
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__main__.py b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__main__.py
deleted file mode 100755
index ea4670b..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__main__.py
+++ /dev/null
@@ -1,89 +0,0 @@
-import sys
-import os
-import argparse
-from .modulegraph import ModuleGraph
-
-
-def parse_arguments():
- parser = argparse.ArgumentParser(
- conflict_handler='resolve', prog='%s -mmodulegraph' % (
- os.path.basename(sys.executable)))
- parser.add_argument(
- '-d', action='count', dest='debug', default=1,
- help='Increase debug level')
- parser.add_argument(
- '-q', action='store_const', dest='debug', const=0,
- help='Clear debug level')
- parser.add_argument(
- '-m', '--modules', action='store_true',
- dest='domods', default=False,
- help='arguments are module names, not script files')
- parser.add_argument(
- '-x', metavar='NAME', action='append', dest='excludes',
- default=[], help='Add NAME to the excludes list')
- parser.add_argument(
- '-p', action='append', metavar='PATH', dest='addpath', default=[],
- help='Add PATH to the module search path')
- parser.add_argument(
- '-g', '--dot', action='store_const', dest='output', const='dot',
- help='Output a .dot graph')
- parser.add_argument(
- '-h', '--html', action='store_const',
- dest='output', const='html', help='Output a HTML file')
- parser.add_argument(
- 'scripts', metavar='SCRIPT', nargs='+', help='scripts to analyse')
-
- opts = parser.parse_args()
- return opts
-
-
-def create_graph(scripts, domods, debuglevel, excludes, path_extras):
- # Set the path based on sys.path and the script directory
- path = sys.path[:]
-
- if domods:
- del path[0]
- else:
- path[0] = os.path.dirname(scripts[0])
-
- path = path_extras + path
- if debuglevel > 1:
- print("path:", file=sys.stderr)
- for item in path:
- print(" ", repr(item), file=sys.stderr)
-
- # Create the module finder and turn its crank
- mf = ModuleGraph(path, excludes=excludes, debug=debuglevel)
- for arg in scripts:
- if domods:
- if arg[-2:] == '.*':
- mf.import_hook(arg[:-2], None, ["*"])
- else:
- mf.import_hook(arg)
- else:
- mf.add_script(arg)
- return mf
-
-
-def output_graph(output_format, mf):
- if output_format == 'dot':
- mf.graphreport()
- elif output_format == 'html':
- mf.create_xref()
- else:
- mf.report()
-
-
-def main():
- opts = parse_arguments()
- mf = create_graph(
- opts.scripts, opts.domods, opts.debug,
- opts.excludes, opts.addpath)
- output_graph(opts.output, mf)
-
-
-if __name__ == '__main__': # pragma: no cover
- try:
- main()
- except KeyboardInterrupt:
- print("\n[interrupt]")
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 5acfb93..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/__main__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/__main__.cpython-312.pyc
deleted file mode 100644
index 7961c74..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/__main__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/find_modules.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/find_modules.cpython-312.pyc
deleted file mode 100644
index 70c51d0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/find_modules.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/modulegraph.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/modulegraph.cpython-312.pyc
deleted file mode 100644
index e88b8da..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/modulegraph.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/util.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/util.cpython-312.pyc
deleted file mode 100644
index 3b5407a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/__pycache__/util.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/find_modules.py b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/find_modules.py
deleted file mode 100755
index b383b28..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/find_modules.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-modulegraph.find_modules - High-level module dependency finding interface
-=========================================================================
-
-History
-........
-
-Originally (loosely) based on code in py2exe's build_exe.py by Thomas Heller.
-"""
-import os
-import pkgutil
-
-from .modulegraph import Alias
-
-def get_implies():
- def _xml_etree_modules():
- import xml.etree
- return [
- f"xml.etree.{module_name}"
- for _, module_name, is_package in pkgutil.iter_modules(xml.etree.__path__)
- if not is_package
- ]
-
- result = {
- # imports done from C code in built-in and/or extension modules
- # (untrackable by modulegraph).
- "_curses": ["curses"],
- "posix": ["resource"],
- "gc": ["time"],
- "time": ["_strptime"],
- "datetime": ["time"],
- "parser": ["copyreg"],
- "codecs": ["encodings"],
- "_sre": ["copy", "re"],
- "zipimport": ["zlib"],
-
- # _frozen_importlib is part of the interpreter itself
- "_frozen_importlib": None,
-
- # os.path is an alias for a platform specific module,
- # ensure that the graph shows this.
- "os.path": Alias(os.path.__name__),
-
- # Python >= 3.2:
- "_datetime": ["time", "_strptime"],
- "_json": ["json.decoder"],
- "_pickle": ["codecs", "copyreg", "_compat_pickle"],
- "_posixsubprocess": ["gc"],
- "_ssl": ["socket"],
-
- # Python >= 3.3:
- "_elementtree": ["pyexpat"] + _xml_etree_modules(),
-
- # This is not C extension, but it uses __import__
- "anydbm": ["dbhash", "gdbm", "dbm", "dumbdbm", "whichdb"],
-
- # Known package aliases
- "wxPython.wx": Alias('wx'),
- }
-
- return result
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/modulegraph.py b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/modulegraph.py
deleted file mode 100755
index a3699cc..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/modulegraph.py
+++ /dev/null
@@ -1,3107 +0,0 @@
-"""
-Find modules used by a script, using bytecode analysis.
-
-Based on the stdlib modulefinder by Thomas Heller and Just van Rossum,
-but uses a graph data structure and 2.3 features
-
-XXX: Verify all calls to _import_hook (and variants) to ensure that
-imports are done in the right way.
-"""
-#FIXME: To decrease the likelihood of ModuleGraph exceeding the recursion limit
-#and hence unpredictably raising fatal exceptions, increase the recursion
-#limit at PyInstaller startup (i.e., in the
-#PyInstaller.building.build_main.build() function). For details, see:
-# https://github.com/pyinstaller/pyinstaller/issues/1919#issuecomment-216016176
-
-import ast
-import os
-import pkgutil
-import sys
-import types
-import re
-from collections import deque, namedtuple, defaultdict
-import urllib.request
-import warnings
-import importlib.util
-import importlib.machinery
-
-# The logic in PyInstaller.compat ensures that these are available and
-# of correct version.
-if sys.version_info >= (3, 10):
- import importlib.metadata as importlib_metadata
-else:
- import importlib_metadata
-
-# The latest version of altgraph at the time of writing (v0.17.4) still
-# uses pkg_resources to query its own version. With setuptools >= 80.9.0,
-# this triggers deprecation warnings. In 2025-11-30, pkg_resources will be
-# removed altogether. Give altgraph just enough of a mocked pkg_resources that
-# it can still be imported.
-try:
- _pkg_resources_not_imported = object()
- _old_pkg_resources = sys.modules.get("pkg_resources", _pkg_resources_not_imported)
- sys.modules["pkg_resources"] = fake_pkg_resources = types.SimpleNamespace()
- fake_pkg_resources.require = lambda name: [importlib_metadata.distribution(name)]
-
- from altgraph.ObjectGraph import ObjectGraph
- from altgraph import GraphError
-finally:
- if _old_pkg_resources is not _pkg_resources_not_imported:
- sys.modules["pkg_resources"] = _old_pkg_resources
- else:
- del sys.modules["pkg_resources"]
-
-from . import util
-
-
-class BUILTIN_MODULE:
- def is_package(fqname):
- return False
-
-
-class NAMESPACE_PACKAGE:
- def __init__(self, namespace_dirs):
- self.namespace_dirs = namespace_dirs
-
- def is_package(self, fqname):
- return True
-
-
-#FIXME: Leverage this rather than magic numbers below.
-ABSOLUTE_OR_RELATIVE_IMPORT_LEVEL = -1
-"""
-Constant instructing the builtin `__import__()` function to attempt both
-absolute and relative imports.
-"""
-
-
-#FIXME: Leverage this rather than magic numbers below.
-ABSOLUTE_IMPORT_LEVEL = 0
-"""
-Constant instructing the builtin `__import__()` function to attempt only
-absolute imports.
-"""
-
-
-#FIXME: Leverage this rather than magic numbers below.
-DEFAULT_IMPORT_LEVEL = ABSOLUTE_IMPORT_LEVEL
-"""
-Constant instructing the builtin `__import__()` function to attempt the default
-import style specific to the active Python interpreter.
-
-Specifically, under:
-
-* Python 2, this defaults to attempting both absolute and relative imports.
-* Python 3, this defaults to attempting only absolute imports.
-"""
-
-
-class InvalidRelativeImportError (ImportError):
- pass
-
-
-def _path_from_importerror(exc, default):
- # This is a hack, but sadly enough the necessary information
- # isn't available otherwise.
- m = re.match(r'^No module named (\S+)$', str(exc))
- if m is not None:
- return m.group(1)
-
- return default
-
-
-#FIXME: What is this? Do we actually need this? This appears to provide
-#significantly more fine-grained metadata than PyInstaller will ever require.
-#It consumes a great deal of space (slots or no slots), since we store an
-#instance of this class for each edge of the graph.
-class DependencyInfo (namedtuple("DependencyInfo",
- ["conditional", "function", "tryexcept", "fromlist"])):
- __slots__ = ()
-
- def _merged(self, other):
- if (not self.conditional and not self.function and not self.tryexcept) \
- or (not other.conditional and not other.function and not other.tryexcept):
- return DependencyInfo(
- conditional=False,
- function=False,
- tryexcept=False,
- fromlist=self.fromlist and other.fromlist)
-
- else:
- return DependencyInfo(
- conditional=self.conditional or other.conditional,
- function=self.function or other.function,
- tryexcept=self.tryexcept or other.tryexcept,
- fromlist=self.fromlist and other.fromlist)
-
-
-#FIXME: Shift the following Node class hierarchy into a new
-#"PyInstaller.lib.modulegraph.node" module. This module is much too long.
-#FIXME: Refactor "_deferred_imports" from a tuple into a proper lightweight
-#class leveraging "__slots__". If not for backward compatibility, we'd just
-#leverage a named tuple -- but this should do just as well.
-#FIXME: Move the "packagepath" attribute into the "Package" class. Only
-#packages define the "__path__" special attribute. The codebase currently
-#erroneously tests whether "module.packagepath is not None" to determine
-#whether a node is a package or not. However, "isinstance(module, Package)" is
-#a significantly more reliable test. Refactor the former into the latter.
-class Node:
- """
- Abstract base class (ABC) of all objects added to a `ModuleGraph`.
-
- Attributes
- ----------
- code : codeobject
- Code object of the pure-Python module corresponding to this graph node
- if any _or_ `None` otherwise.
- graphident : str
- Synonym of `identifier` required by the `ObjectGraph` superclass of the
- `ModuleGraph` class. For readability, the `identifier` attribute should
- typically be used instead.
- filename : str
- Absolute path of this graph node's corresponding module, package, or C
- extension if any _or_ `None` otherwise.
- identifier : str
- Fully-qualified name of this graph node's corresponding module,
- package, or C extension.
- packagepath : str
- List of the absolute paths of all directories comprising this graph
- node's corresponding package. If this is a:
- * Non-namespace package, this list contains exactly one path.
- * Namespace package, this list contains one or more paths.
- _deferred_imports : list
- List of all target modules imported by the source module corresponding
- to this graph node whole importations have been deferred for subsequent
- processing in between calls to the `_ModuleGraph._scan_code()` and
- `_ModuleGraph._process_imports()` methods for this source module _or_
- `None` otherwise. Each element of this list is a 3-tuple
- `(have_star, _safe_import_hook_args, _safe_import_hook_kwargs)`
- collecting the importation of a target module from this source module
- for subsequent processing, where:
- * `have_star` is a boolean `True` only if this is a `from`-style star
- import (e.g., resembling `from {target_module_name} import *`).
- * `_safe_import_hook_args` is a (typically non-empty) sequence of all
- positional arguments to be passed to the `_safe_import_hook()` method
- to add this importation to the graph.
- * `_safe_import_hook_kwargs` is a (typically empty) dictionary of all
- keyword arguments to be passed to the `_safe_import_hook()` method
- to add this importation to the graph.
- Unlike functional languages, Python imposes a maximum depth on the
- interpreter stack (and hence recursion). On breaching this depth,
- Python raises a fatal `RuntimeError` exception. Since `ModuleGraph`
- parses imports recursively rather than iteratively, this depth _was_
- commonly breached before the introduction of this list. Python
- environments installing a large number of modules (e.g., Anaconda) were
- particularly susceptible. Why? Because `ModuleGraph` concurrently
- descended through both the abstract syntax trees (ASTs) of all source
- modules being parsed _and_ the graph of all target modules imported by
- these source modules being built. The stack thus consisted of
- alternating layers of AST and graph traversal. To unwind such
- alternation and effectively halve the stack depth, `ModuleGraph` now
- descends through the abstract syntax tree (AST) of each source module
- being parsed and adds all importations originating within this module
- to this list _before_ descending into the graph of these importations.
- See pyinstaller/pyinstaller/#1289 for further details.
- _global_attr_names : set
- Set of the unqualified names of all global attributes (e.g., classes,
- variables) defined in the pure-Python module corresponding to this
- graph node if any _or_ the empty set otherwise. This includes the names
- of all attributes imported via `from`-style star imports from other
- existing modules (e.g., `from {target_module_name} import *`). This
- set is principally used to differentiate the non-ignorable importation
- of non-existent submodules in a package from the ignorable importation
- of existing global attributes defined in that package's pure-Python
- `__init__` submodule in `from`-style imports (e.g., `bar` in
- `from foo import bar`, which may be either a submodule or attribute of
- `foo`), as such imports ambiguously allow both. This set is _not_ used
- to differentiate submodules from attributes in `import`-style imports
- (e.g., `bar` in `import foo.bar`, which _must_ be a submodule of
- `foo`), as such imports unambiguously allow only submodules.
- _starimported_ignored_module_names : set
- Set of the fully-qualified names of all existing unparsable modules
- that the existing parsable module corresponding to this graph node
- attempted to perform one or more "star imports" from. If this module
- either does _not_ exist or does but is unparsable, this is the empty
- set. Equivalently, this set contains each fully-qualified name
- `{trg_module_name}` for which:
- * This module contains an import statement of the form
- `from {trg_module_name} import *`.
- * The module whose name is `{trg_module_name}` exists but is _not_
- parsable by `ModuleGraph` (e.g., due to _not_ being pure-Python).
- **This set is currently defined but otherwise ignored.**
- _submodule_basename_to_node : dict
- Dictionary mapping from the unqualified name of each submodule
- contained by the parent module corresponding to this graph node to that
- submodule's graph node. If this dictionary is non-empty, this parent
- module is typically but _not_ always a package (e.g., the non-package
- `os` module containing the `os.path` submodule).
- """
-
- __slots__ = [
- 'code',
- 'filename',
- 'graphident',
- 'identifier',
- 'packagepath',
- '_deferred_imports',
- '_global_attr_names',
- '_starimported_ignored_module_names',
- '_submodule_basename_to_node',
- ]
-
- def __init__(self, identifier):
- """
- Initialize this graph node.
-
- Parameters
- ----------
- identifier : str
- Fully-qualified name of this graph node's corresponding module,
- package, or C extension.
- """
-
- self.code = None
- self.filename = None
- self.graphident = identifier
- self.identifier = identifier
- self.packagepath = None
- self._deferred_imports = None
- self._global_attr_names = set()
- self._starimported_ignored_module_names = set()
- self._submodule_basename_to_node = dict()
-
-
- def is_global_attr(self, attr_name):
- """
- `True` only if the pure-Python module corresponding to this graph node
- defines a global attribute (e.g., class, variable) with the passed
- name.
-
- If this module is actually a package, this method instead returns
- `True` only if this package's pure-Python `__init__` submodule defines
- such a global attribute. In this case, note that this package may still
- contain an importable submodule of the same name. Callers should
- attempt to import this attribute as a submodule of this package
- _before_ assuming this attribute to be an ignorable global. See
- "Examples" below for further details.
-
- Parameters
- ----------
- attr_name : str
- Unqualified name of the attribute to be tested.
-
- Returns
- ----------
- bool
- `True` only if this module defines this global attribute.
-
- Examples
- ----------
- Consider a hypothetical module `foo` containing submodules `bar` and
- `__init__` where the latter assigns `bar` to be a global variable
- (possibly star-exported via the special `__all__` global variable):
-
- >>> # In "foo.__init__":
- >>> bar = 3.1415
-
- Python 2 and 3 both permissively permit this. This method returns
- `True` in this case (i.e., when called on the `foo` package's graph
- node, passed the attribute name `bar`) despite the importability of the
- `foo.bar` submodule.
- """
-
- return attr_name in self._global_attr_names
-
-
- def is_submodule(self, submodule_basename):
- """
- `True` only if the parent module corresponding to this graph node
- contains the submodule with the passed name.
-
- If `True`, this parent module is typically but _not_ always a package
- (e.g., the non-package `os` module containing the `os.path` submodule).
-
- Parameters
- ----------
- submodule_basename : str
- Unqualified name of the submodule to be tested.
-
- Returns
- ----------
- bool
- `True` only if this parent module contains this submodule.
- """
-
- return submodule_basename in self._submodule_basename_to_node
-
-
- def add_global_attr(self, attr_name):
- """
- Record the global attribute (e.g., class, variable) with the passed
- name to be defined by the pure-Python module corresponding to this
- graph node.
-
- If this module is actually a package, this method instead records this
- attribute to be defined by this package's pure-Python `__init__`
- submodule.
-
- Parameters
- ----------
- attr_name : str
- Unqualified name of the attribute to be added.
- """
-
- self._global_attr_names.add(attr_name)
-
-
- def add_global_attrs_from_module(self, target_module):
- """
- Record all global attributes (e.g., classes, variables) defined by the
- target module corresponding to the passed graph node to also be defined
- by the source module corresponding to this graph node.
-
- If the source module is actually a package, this method instead records
- these attributes to be defined by this package's pure-Python `__init__`
- submodule.
-
- Parameters
- ----------
- target_module : Node
- Graph node of the target module to import attributes from.
- """
-
- self._global_attr_names.update(target_module._global_attr_names)
-
-
- def add_submodule(self, submodule_basename, submodule_node):
- """
- Add the submodule with the passed name and previously imported graph
- node to the parent module corresponding to this graph node.
-
- This parent module is typically but _not_ always a package (e.g., the
- non-package `os` module containing the `os.path` submodule).
-
- Parameters
- ----------
- submodule_basename : str
- Unqualified name of the submodule to add to this parent module.
- submodule_node : Node
- Graph node of this submodule.
- """
-
- self._submodule_basename_to_node[submodule_basename] = submodule_node
-
-
- def get_submodule(self, submodule_basename):
- """
- Graph node of the submodule with the passed name in the parent module
- corresponding to this graph node.
-
- If this parent module does _not_ contain this submodule, an exception
- is raised. Else, this parent module is typically but _not_ always a
- package (e.g., the non-package `os` module containing the `os.path`
- submodule).
-
- Parameters
- ----------
- module_basename : str
- Unqualified name of the submodule to retrieve.
-
- Returns
- ----------
- Node
- Graph node of this submodule.
- """
-
- return self._submodule_basename_to_node[submodule_basename]
-
-
- def get_submodule_or_none(self, submodule_basename):
- """
- Graph node of the submodule with the passed unqualified name in the
- parent module corresponding to this graph node if this module contains
- this submodule _or_ `None`.
-
- This parent module is typically but _not_ always a package (e.g., the
- non-package `os` module containing the `os.path` submodule).
-
- Parameters
- ----------
- submodule_basename : str
- Unqualified name of the submodule to retrieve.
-
- Returns
- ----------
- Node
- Graph node of this submodule if this parent module contains this
- submodule _or_ `None`.
- """
-
- return self._submodule_basename_to_node.get(submodule_basename)
-
-
- def remove_global_attr_if_found(self, attr_name):
- """
- Record the global attribute (e.g., class, variable) with the passed
- name if previously recorded as defined by the pure-Python module
- corresponding to this graph node to be subsequently undefined by the
- same module.
-
- If this module is actually a package, this method instead records this
- attribute to be undefined by this package's pure-Python `__init__`
- submodule.
-
- This method is intended to be called on globals previously defined by
- this module that are subsequently undefined via the `del` built-in by
- this module, thus "forgetting" or "undoing" these globals.
-
- For safety, there exists no corresponding `remove_global_attr()`
- method. While defining this method is trivial, doing so would invite
- `KeyError` exceptions on scanning valid Python that lexically deletes a
- global in a scope under this module's top level (e.g., in a function)
- _before_ defining this global at this top level. Since `ModuleGraph`
- cannot and should not (re)implement a full-blown Python interpreter,
- ignoring out-of-order deletions is the only sane policy.
-
- Parameters
- ----------
- attr_name : str
- Unqualified name of the attribute to be removed.
- """
-
- if self.is_global_attr(attr_name):
- self._global_attr_names.remove(attr_name)
-
- def __eq__(self, other):
- try:
- otherIdent = getattr(other, 'graphident')
- except AttributeError:
- return False
-
- return self.graphident == otherIdent
-
- def __ne__(self, other):
- try:
- otherIdent = getattr(other, 'graphident')
- except AttributeError:
- return True
-
- return self.graphident != otherIdent
-
- def __lt__(self, other):
- try:
- otherIdent = getattr(other, 'graphident')
- except AttributeError:
- return NotImplemented
-
- return self.graphident < otherIdent
-
- def __le__(self, other):
- try:
- otherIdent = getattr(other, 'graphident')
- except AttributeError:
- return NotImplemented
-
- return self.graphident <= otherIdent
-
- def __gt__(self, other):
- try:
- otherIdent = getattr(other, 'graphident')
- except AttributeError:
- return NotImplemented
-
- return self.graphident > otherIdent
-
- def __ge__(self, other):
- try:
- otherIdent = getattr(other, 'graphident')
- except AttributeError:
- return NotImplemented
-
- return self.graphident >= otherIdent
-
- def __hash__(self):
- return hash(self.graphident)
-
- def infoTuple(self):
- return (self.identifier,)
-
- def __repr__(self):
- return '%s%r' % (type(self).__name__, self.infoTuple())
-
-
-class Alias(str):
- """
- Placeholder aliasing an existing source module to a non-existent target
- module (i.e., the desired alias).
-
- For obscure reasons, this class subclasses `str`. Each instance of this
- class is the fully-qualified name of the existing source module being
- aliased. Unlike the related `AliasNode` class, instances of this class are
- _not_ actual nodes and hence _not_ added to the graph; they only facilitate
- communication between the `ModuleGraph.alias_module()` and
- `ModuleGraph.find_node()` methods.
- """
-
-
-class AliasNode(Node):
- """
- Graph node representing the aliasing of an existing source module under a
- non-existent target module name (i.e., the desired alias).
- """
-
- def __init__(self, name, node=None):
- """
- Initialize this alias.
-
- Parameters
- ----------
- name : str
- Fully-qualified name of the non-existent target module to be
- created (as an alias of the existing source module).
- node : Node
- Graph node of the existing source module being aliased. Optional;
- if not provided here, the attributes from referred node should
- be copied later using `copyAttributesFromReferredNode` method.
- """
- super(AliasNode, self).__init__(name)
-
- # Copy attributes from referred node, if provided
- self.copyAttributesFromReferredNode(node)
-
- def copyAttributesFromReferredNode(self, node):
- """
- Copy a subset of attributes from referred node (source module) into this target alias.
- """
- # FIXME: Why only some? Why not *EVERYTHING* except "graphident", which
- # must remain equal to "name" for lookup purposes? This is, after all,
- # an alias. The idea is for the two nodes to effectively be the same.
- for attr_name in (
- 'identifier', 'packagepath',
- '_global_attr_names', '_starimported_ignored_module_names',
- '_submodule_basename_to_node'):
- if hasattr(node, attr_name):
- setattr(self, attr_name, getattr(node, attr_name))
-
- def infoTuple(self):
- return (self.graphident, self.identifier)
-
-
-class BadModule(Node):
- pass
-
-
-class ExcludedModule(BadModule):
- pass
-
-
-class MissingModule(BadModule):
- pass
-
-
-class InvalidRelativeImport (BadModule):
- def __init__(self, relative_path, from_name):
- identifier = relative_path
- if relative_path.endswith('.'):
- identifier += from_name
- else:
- identifier += '.' + from_name
- super(InvalidRelativeImport, self).__init__(identifier)
- self.relative_path = relative_path
- self.from_name = from_name
-
- def infoTuple(self):
- return (self.relative_path, self.from_name)
-
-
-class Script(Node):
- def __init__(self, filename):
- super(Script, self).__init__(filename)
- self.filename = filename
-
- def infoTuple(self):
- return (self.filename,)
-
-
-class BaseModule(Node):
- def __init__(self, name, filename=None, path=None):
- super(BaseModule, self).__init__(name)
- self.filename = filename
- self.packagepath = path
-
- def infoTuple(self):
- return tuple(filter(None, (self.identifier, self.filename, self.packagepath)))
-
-
-class BuiltinModule(BaseModule):
- pass
-
-
-class SourceModule(BaseModule):
- pass
-
-
-class InvalidSourceModule(SourceModule):
- pass
-
-
-class CompiledModule(BaseModule):
- pass
-
-
-class InvalidCompiledModule(BaseModule):
- pass
-
-
-class Extension(BaseModule):
- pass
-
-
-class Package(BaseModule):
- """
- Graph node representing a non-namespace package.
- """
- pass
-
-
-class ExtensionPackage(Extension, Package):
- """
- Graph node representing a package where the __init__ module is an extension
- module.
- """
- pass
-
-
-class NamespacePackage(Package):
- """
- Graph node representing a namespace package.
- """
- pass
-
-
-class RuntimeModule(BaseModule):
- """
- Graph node representing a non-package Python module dynamically defined at
- runtime.
-
- Most modules are statically defined on-disk as standard Python files.
- Some modules, however, are dynamically defined in-memory at runtime
- (e.g., `gi.repository.Gst`, dynamically defined by the statically
- defined `gi.repository.__init__` module).
-
- This node represents such a runtime module. Since this is _not_ a package,
- all attempts to import submodules from this module in `from`-style import
- statements (e.g., the `queue` submodule in `from six.moves import queue`)
- will be silently ignored.
-
- To ensure that the parent package of this module if any is also imported
- and added to the graph, this node is typically added to the graph by
- calling the `ModuleGraph.add_module()` method.
- """
- pass
-
-
-class RuntimePackage(Package):
- """
- Graph node representing a non-namespace Python package dynamically defined
- at runtime.
-
- Most packages are statically defined on-disk as standard subdirectories
- containing `__init__.py` files. Some packages, however, are dynamically
- defined in-memory at runtime (e.g., `six.moves`, dynamically defined by
- the statically defined `six` module).
-
- This node represents such a runtime package. All attributes imported from
- this package in `from`-style import statements that are submodules of this
- package (e.g., the `queue` submodule in `from six.moves import queue`) will
- be imported rather than ignored.
-
- To ensure that the parent package of this package if any is also imported
- and added to the graph, this node is typically added to the graph by
- calling the `ModuleGraph.add_module()` method.
- """
- pass
-
-
-#FIXME: Safely removable. We don't actually use this anywhere. After removing
-#this class, remove the corresponding entry from "compat".
-class FlatPackage(BaseModule):
- def __init__(self, *args, **kwds):
- warnings.warn(
- "This class will be removed in a future version of modulegraph",
- DeprecationWarning)
- super(FlatPackage, *args, **kwds)
-
-
-#FIXME: Safely removable. We don't actually use this anywhere. After removing
-#this class, remove the corresponding entry from "compat".
-class ArchiveModule(BaseModule):
- def __init__(self, *args, **kwds):
- warnings.warn(
- "This class will be removed in a future version of modulegraph",
- DeprecationWarning)
- super(FlatPackage, *args, **kwds)
-
-
-# HTML templates for ModuleGraph generator
-header = """\
-
-
-
-
- %(TITLE)s
-
-
-
- %(TITLE)s
"""
-entry = """
-"""
-contpl = """%(NAME)s %(TYPE)s"""
-contpl_linked = """\
-%(NAME)s
-%(TYPE)s"""
-imports = """\
-
-%(HEAD)s:
- %(LINKS)s
-
-"""
-footer = """
-
-"""
-
-
-def _ast_names(names):
- result = []
- for nm in names:
- if isinstance(nm, ast.alias):
- result.append(nm.name)
- else:
- result.append(nm)
-
- result = [r for r in result if r != '__main__']
- return result
-
-
-def uniq(seq):
- """Remove duplicates from a list, preserving order"""
- # Taken from https://stackoverflow.com/questions/480214
- seen = set()
- seen_add = seen.add
- return [x for x in seq if not (x in seen or seen_add(x))]
-
-
-DEFAULT_IMPORT_LEVEL = 0
-
-
-class _Visitor(ast.NodeVisitor):
- def __init__(self, graph, module):
- self._graph = graph
- self._module = module
- self._level = DEFAULT_IMPORT_LEVEL
- self._in_if = [False]
- self._in_def = [False]
- self._in_tryexcept = [False]
-
- @property
- def in_if(self):
- return self._in_if[-1]
-
- @property
- def in_def(self):
- return self._in_def[-1]
-
- @property
- def in_tryexcept(self):
- return self._in_tryexcept[-1]
-
-
- def _collect_import(self, name, fromlist, level):
- have_star = False
- if fromlist is not None:
- fromlist = uniq(fromlist)
- if '*' in fromlist:
- fromlist.remove('*')
- have_star = True
-
- # Record this import as originating from this module for subsequent
- # handling by the _process_imports() method.
- self._module._deferred_imports.append(
- (have_star,
- (name, self._module, fromlist, level),
- {'edge_attr': DependencyInfo(
- conditional=self.in_if,
- tryexcept=self.in_tryexcept,
- function=self.in_def,
- fromlist=False)}))
-
-
- def visit_Import(self, node):
- for nm in _ast_names(node.names):
- self._collect_import(nm, None, self._level)
-
- def visit_ImportFrom(self, node):
- level = node.level if node.level != 0 else self._level
- self._collect_import(node.module or '', _ast_names(node.names), level)
-
- def visit_If(self, node):
- self._in_if.append(True)
- self.generic_visit(node)
- self._in_if.pop()
-
- def visit_FunctionDef(self, node):
- self._in_def.append(True)
- self.generic_visit(node)
- self._in_def.pop()
-
- visit_AsyncFunctionDef = visit_FunctionDef
-
- def visit_Try(self, node):
- self._in_tryexcept.append(True)
- self.generic_visit(node)
- self._in_tryexcept.pop()
-
- def visit_TryExcept(self, node):
- self._in_tryexcept.append(True)
- self.generic_visit(node)
- self._in_tryexcept.pop()
-
- def visit_Expression(self, node):
- # Expression node's cannot contain import statements or
- # other nodes that are relevant for us.
- pass
-
- # Expression isn't actually used as such in AST trees,
- # therefore define visitors for all kinds of expression nodes.
- visit_BoolOp = visit_Expression
- visit_BinOp = visit_Expression
- visit_UnaryOp = visit_Expression
- visit_Lambda = visit_Expression
- visit_IfExp = visit_Expression
- visit_Dict = visit_Expression
- visit_Set = visit_Expression
- visit_ListComp = visit_Expression
- visit_SetComp = visit_Expression
- visit_ListComp = visit_Expression
- visit_GeneratorExp = visit_Expression
- visit_Compare = visit_Expression
- visit_Yield = visit_Expression
- visit_YieldFrom = visit_Expression
- visit_Await = visit_Expression
- visit_Call = visit_Expression
- visit_Await = visit_Expression
-
-
-class ModuleGraph(ObjectGraph):
- """
- Directed graph whose nodes represent modules and edges represent
- dependencies between these modules.
- """
-
-
- def createNode(self, cls, name, *args, **kw):
- m = self.find_node(name)
-
- if m is None:
- #assert m is None, m
- m = super(ModuleGraph, self).createNode(cls, name, *args, **kw)
-
- return m
-
-
- def __init__(self, path=None, excludes=(), replace_paths=(), implies=(), graph=None, debug=0):
- super(ModuleGraph, self).__init__(graph=graph, debug=debug)
- if path is None:
- path = sys.path
- self.path = path
- self.lazynodes = {}
- # excludes is stronger than implies
- self.lazynodes.update(dict(implies))
- for m in excludes:
- self.lazynodes[m] = None
- self.replace_paths = replace_paths
-
- # Maintain own list of package path mappings in the scope of Modulegraph
- # object.
- self._package_path_map = {}
-
- # Legacy namespace-package paths. Initialized by scan_legacy_namespace_packages.
- self._legacy_ns_packages = {}
-
- def scan_legacy_namespace_packages(self):
- """
- Resolve extra package `__path__` entries for legacy setuptools-based
- namespace packages, by reading `namespace_packages.txt` from dist
- metadata.
- """
- legacy_ns_packages = defaultdict(lambda: set())
-
- for dist in importlib_metadata.distributions():
- ns_packages = dist.read_text("namespace_packages.txt")
- if ns_packages is None:
- continue
- ns_packages = ns_packages.splitlines()
- # Obtain path to dist metadata directory
- dist_path = getattr(dist, '_path')
- if dist_path is None:
- continue
- for package_name in ns_packages:
- path = os.path.join(
- str(dist_path.parent), # might be zipfile.Path if in zipped .egg
- *package_name.split('.'),
- )
- legacy_ns_packages[package_name].add(path)
-
- # Convert into dictionary of lists
- self._legacy_ns_packages = {
- package_name: list(paths)
- for package_name, paths in legacy_ns_packages.items()
- }
-
- def implyNodeReference(self, node, other, edge_data=None):
- """
- Create a reference from the passed source node to the passed other node,
- implying the former to depend upon the latter.
-
- While the source node _must_ be an existing graph node, the target node
- may be either an existing graph node _or_ a fully-qualified module name.
- In the latter case, the module with that name and all parent packages of
- that module will be imported _without_ raising exceptions and for each
- newly imported module or package:
-
- * A new graph node will be created for that module or package.
- * A reference from the passed source node to that module or package will
- be created.
-
- This method allows dependencies between Python objects _not_ importable
- with standard techniques (e.g., module aliases, C extensions).
-
- Parameters
- ----------
- node : str
- Graph node for this reference's source module or package.
- other : {Node, str}
- Either a graph node _or_ fully-qualified name for this reference's
- target module or package.
- """
-
- if isinstance(other, Node):
- self._updateReference(node, other, edge_data)
- else:
- if isinstance(other, tuple):
- raise ValueError(other)
- others = self._safe_import_hook(other, node, None)
- for other in others:
- self._updateReference(node, other, edge_data)
-
- def outgoing(self, fromnode):
- """
- Yield all nodes that `fromnode` dependes on (that is,
- all modules that `fromnode` imports.
- """
-
- node = self.find_node(fromnode)
- out_edges, _ = self.get_edges(node)
- return out_edges
-
- getReferences = outgoing
-
- def incoming(self, tonode, collapse_missing_modules=True):
- node = self.find_node(tonode)
- _, in_edges = self.get_edges(node)
-
- if collapse_missing_modules:
- for n in in_edges:
- if isinstance(n, MissingModule):
- for n in self.incoming(n, False):
- yield n
-
- else:
- yield n
-
- else:
- for n in in_edges:
- yield n
-
- getReferers = incoming
-
- def hasEdge(self, fromnode, tonode):
- """ Return True iff there is an edge from 'fromnode' to 'tonode' """
- fromnode = self.find_node(fromnode)
- tonode = self.find_node(tonode)
-
- return self.graph.edge_by_node(fromnode, tonode) is not None
-
- def foldReferences(self, packagenode):
- """
- Create edges to/from `packagenode` based on the edges to/from all
- submodules of that package _and_ then hide the graph nodes
- corresponding to those submodules.
- """
-
- pkg = self.find_node(packagenode)
-
- for n in self.nodes():
- if not n.identifier.startswith(pkg.identifier + '.'):
- continue
-
- iter_out, iter_inc = self.get_edges(n)
- for other in iter_out:
- if other.identifier.startswith(pkg.identifier + '.'):
- continue
-
- if not self.hasEdge(pkg, other):
- # Ignore circular dependencies
- self._updateReference(pkg, other, 'pkg-internal-import')
-
- for other in iter_inc:
- if other.identifier.startswith(pkg.identifier + '.'):
- # Ignore circular dependencies
- continue
-
- if not self.hasEdge(other, pkg):
- self._updateReference(other, pkg, 'pkg-import')
-
- self.graph.hide_node(n)
-
- # TODO: unfoldReferences(pkg) that restore the submodule nodes and
- # removes 'pkg-import' and 'pkg-internal-import' edges. Care should
- # be taken to ensure that references are correct if multiple packages
- # are folded and then one of them in unfolded
-
- def _updateReference(self, fromnode, tonode, edge_data):
- try:
- ed = self.edgeData(fromnode, tonode)
- except (KeyError, GraphError): # XXX: Why 'GraphError'
- return self.add_edge(fromnode, tonode, edge_data)
-
- if not (isinstance(ed, DependencyInfo) and isinstance(edge_data, DependencyInfo)):
- self.updateEdgeData(fromnode, tonode, edge_data)
- else:
- self.updateEdgeData(fromnode, tonode, ed._merged(edge_data))
-
- def add_edge(self, fromnode, tonode, edge_data='direct'):
- """
- Create a reference from fromnode to tonode
- """
- return super(ModuleGraph, self).createReference(fromnode, tonode, edge_data=edge_data)
-
- createReference = add_edge
-
- def find_node(self, name, create_nspkg=True):
- """
- Graph node uniquely identified by the passed fully-qualified module
- name if this module has been added to the graph _or_ `None` otherwise.
-
- If (in order):
-
- . A namespace package with this identifier exists _and_ the passed
- `create_nspkg` parameter is `True`, this package will be
- instantiated and returned.
- . A lazy node with this identifier and:
- * No dependencies exists, this node will be instantiated and
- returned.
- * Dependencies exists, this node and all transitive dependencies of
- this node be instantiated and this node returned.
- . A non-lazy node with this identifier exists, this node will be
- returned as is.
-
- Parameters
- ----------
- name : str
- Fully-qualified name of the module whose graph node is to be found.
- create_nspkg : bool
- Ignored.
-
- Returns
- ----------
- Node
- Graph node of this module if added to the graph _or_ `None`
- otherwise.
- """
-
- data = super(ModuleGraph, self).findNode(name)
-
- if data is not None:
- return data
-
- if name in self.lazynodes:
- deps = self.lazynodes.pop(name)
-
- if deps is None:
- # excluded module
- m = self.createNode(ExcludedModule, name)
- elif isinstance(deps, Alias):
- # NOTE: the AliasNode must be created and added to graph
- # before trying to create the referred node; that might
- # (due to recursive import analysis) lead to another
- # attempt to resolve the aliased node (and if there is
- # a real node that we are trying to shadow with the alias,
- # that will end up added to the graph and prevent the
- # alias node from being added).
- m = self.createNode(AliasNode, name)
-
- # Create the referred node.
- other = self._safe_import_hook(deps, None, None).pop()
-
- # Copy attributes; this used to be done by AliasNode
- # constructor, back when referred node was created before
- # the AliasNode (and could thus be passed to its constructor).
- m.copyAttributesFromReferredNode(other)
-
- self.implyNodeReference(m, other)
- else:
- m = self._safe_import_hook(name, None, None).pop()
- for dep in deps:
- self.implyNodeReference(m, dep)
-
- return m
-
- return None
-
- findNode = find_node
- iter_graph = ObjectGraph.flatten
-
- def add_script(self, pathname, caller=None):
- """
- Create a node by path (not module name). It is expected to be a Python
- source file, and will be scanned for dependencies.
- """
- self.msg(2, "run_script", pathname)
-
- pathname = os.path.realpath(pathname)
- m = self.find_node(pathname)
- if m is not None:
- return m
-
- with open(pathname, 'rb') as fp:
- contents = fp.read()
- contents = importlib.util.decode_source(contents)
-
- co_ast = compile(contents, pathname, 'exec', ast.PyCF_ONLY_AST, True)
- co = compile(co_ast, pathname, 'exec', 0, True)
- m = self.createNode(Script, pathname)
- self._updateReference(caller, m, None)
- n = self._scan_code(m, co, co_ast)
- self._process_imports(n)
- m.code = co
- if self.replace_paths:
- m.code = self._replace_paths_in_code(m.code)
- return m
-
-
- #FIXME: For safety, the "source_module" parameter should default to the
- #root node of the current graph if unpassed. This parameter currently
- #defaults to None, thus disconnected modules imported in this manner (e.g.,
- #hidden imports imported by depend.analysis.initialize_modgraph()).
- def import_hook(
- self,
- target_module_partname,
- source_module=None,
- target_attr_names=None,
- level=DEFAULT_IMPORT_LEVEL,
- edge_attr=None,
- ):
- """
- Import the module with the passed name, all parent packages of this
- module, _and_ all submodules and attributes in this module with the
- passed names from the previously imported caller module signified by
- the passed graph node.
-
- Unlike most import methods (e.g., `_safe_import_hook()`), this method
- is designed to be publicly called by both external and internal
- callers and hence is public.
-
- Parameters
- ----------
- target_module_partname : str
- Partially-qualified name of the target module to be imported. See
- `_safe_import_hook()` for further details.
- source_module : Node
- Graph node for the previously imported **source module** (i.e.,
- module containing the `import` statement triggering the call to
- this method) _or_ `None` if this module is to be imported in a
- "disconnected" manner. **Passing `None` is _not_ recommended.**
- Doing so produces a disconnected graph in which the graph node
- created for the module to be imported will be disconnected and
- hence unreachable from all other nodes -- which frequently causes
- subtle issues in external callers (namely PyInstaller, which
- silently ignores unreachable nodes).
- target_attr_names : list
- List of the unqualified names of all submodules and attributes to
- be imported from the module to be imported if this is a "from"-
- style import (e.g., `[encode_base64, encode_noop]` for the import
- `from email.encoders import encode_base64, encode_noop`) _or_
- `None` otherwise.
- level : int
- Whether to perform an absolute or relative import. See
- `_safe_import_hook()` for further details.
-
- Returns
- ----------
- list
- List of the graph nodes created for all modules explicitly imported
- by this call, including the passed module and all submodules listed
- in `target_attr_names` _but_ excluding all parent packages
- implicitly imported by this call. If `target_attr_names` is `None`
- or the empty list, this is guaranteed to be a list of one element:
- the graph node created for the passed module.
-
- Raises
- ----------
- ImportError
- If the target module to be imported is unimportable.
- """
- self.msg(3, "_import_hook", target_module_partname, source_module, source_module, level)
-
- source_package = self._determine_parent(source_module)
- target_package, target_module_partname = self._find_head_package(
- source_package, target_module_partname, level)
-
- self.msgin(4, "load_tail", target_package, target_module_partname)
-
- submodule = target_package
- while target_module_partname:
- i = target_module_partname.find('.')
- if i < 0:
- i = len(target_module_partname)
- head, target_module_partname = target_module_partname[
- :i], target_module_partname[i+1:]
- mname = "%s.%s" % (submodule.identifier, head)
- submodule = self._safe_import_module(head, mname, submodule)
-
- if submodule is None:
- # FIXME: Why do we no longer return a MissingModule instance?
- # result = self.createNode(MissingModule, mname)
- self.msgout(4, "raise ImportError: No module named", mname)
- raise ImportError("No module named " + repr(mname))
-
- self.msgout(4, "load_tail ->", submodule)
-
- target_module = submodule
- target_modules = [target_module]
-
- # If this is a "from"-style import *AND* this target module is
- # actually a package, import all submodules of this package specified
- # by the "import" half of this import (e.g., the submodules "bar" and
- # "car" of the target package "foo" in "from foo import bar, car").
- #
- # If this target module is a non-package, it could still contain
- # importable submodules (e.g., the non-package `os` module containing
- # the `os.path` submodule). In this case, these submodules are already
- # imported by this target module's pure-Python code. Since our import
- # scanner already detects such imports, these submodules need *NOT* be
- # reimported here.
- if target_attr_names and isinstance(target_module,
- (Package, AliasNode)):
- for target_submodule in self._import_importable_package_submodules(
- target_module, target_attr_names):
- if target_submodule not in target_modules:
- target_modules.append(target_submodule)
-
- # Add an edge from this source module to each target module.
- for target_module in target_modules:
- self._updateReference(
- source_module, target_module, edge_data=edge_attr)
-
- return target_modules
-
-
- def _determine_parent(self, caller):
- """
- Determine the package containing a node.
- """
- self.msgin(4, "determine_parent", caller)
-
- parent = None
- if caller:
- pname = caller.identifier
-
- if isinstance(caller, Package):
- parent = caller
-
- elif '.' in pname:
- pname = pname[:pname.rfind('.')]
- parent = self.find_node(pname)
-
- elif caller.packagepath:
- # XXX: I have no idea why this line
- # is necessary.
- parent = self.find_node(pname)
-
- self.msgout(4, "determine_parent ->", parent)
- return parent
-
-
- def _find_head_package(
- self,
- source_package,
- target_module_partname,
- level=DEFAULT_IMPORT_LEVEL):
- """
- Import the target package providing the target module with the passed
- name to be subsequently imported from the previously imported source
- package corresponding to the passed graph node.
-
- Parameters
- ----------
- source_package : Package
- Graph node for the previously imported **source package** (i.e.,
- package containing the module containing the `import` statement
- triggering the call to this method) _or_ `None` if this module is
- to be imported in a "disconnected" manner. **Passing `None` is
- _not_ recommended.** See the `_import_hook()` method for further
- details.
- target_module_partname : str
- Partially-qualified name of the target module to be imported. See
- `_safe_import_hook()` for further details.
- level : int
- Whether to perform absolute or relative imports. See the
- `_safe_import_hook()` method for further details.
-
- Returns
- ----------
- (target_package, target_module_tailname)
- 2-tuple describing the imported target package, where:
- * `target_package` is the graph node created for this package.
- * `target_module_tailname` is the unqualified name of the target
- module to be subsequently imported (e.g., `text` when passed a
- `target_module_partname` of `email.mime.text`).
-
- Raises
- ----------
- ImportError
- If the package to be imported is unimportable.
- """
- self.msgin(4, "find_head_package", source_package, target_module_partname, level)
-
- #FIXME: Rename all local variable names to something sensible. No,
- #"p_fqdn" is not a sensible name.
-
- # If this target module is a submodule...
- if '.' in target_module_partname:
- target_module_headname, target_module_tailname = (
- target_module_partname.split('.', 1))
- # Else, this target module is a top-level module.
- else:
- target_module_headname = target_module_partname
- target_module_tailname = ''
-
- # If attempting both absolute and relative imports...
- if level == ABSOLUTE_OR_RELATIVE_IMPORT_LEVEL:
- if source_package:
- target_package_name = source_package.identifier + '.' + target_module_headname
- else:
- target_package_name = target_module_headname
- # Else if attempting only absolute imports...
- elif level == ABSOLUTE_IMPORT_LEVEL:
- target_package_name = target_module_headname
-
- # Absolute import, ignore the parent
- source_package = None
- # Else if attempting only relative imports...
- else:
- if source_package is None:
- self.msg(2, "Relative import outside of package")
- raise InvalidRelativeImportError(
- "Relative import outside of package (name=%r, parent=%r, level=%r)" % (
- target_module_partname, source_package, level))
-
- for i in range(level - 1):
- if '.' not in source_package.identifier:
- self.msg(2, "Relative import outside of package")
- raise InvalidRelativeImportError(
- "Relative import outside of package (name=%r, parent=%r, level=%r)" % (
- target_module_partname, source_package, level))
-
- p_fqdn = source_package.identifier.rsplit('.', 1)[0]
- new_parent = self.find_node(p_fqdn)
- if new_parent is None:
- #FIXME: Repetition detected. Exterminate. Exterminate.
- self.msg(2, "Relative import outside of package")
- raise InvalidRelativeImportError(
- "Relative import outside of package (name=%r, parent=%r, level=%r)" % (
- target_module_partname, source_package, level))
-
- assert new_parent is not source_package, (
- new_parent, source_package)
- source_package = new_parent
-
- if target_module_headname:
- target_package_name = (
- source_package.identifier + '.' + target_module_headname)
- else:
- target_package_name = source_package.identifier
-
- # Graph node of this target package.
- target_package = self._safe_import_module(
- target_module_headname, target_package_name, source_package)
-
- # If this target package is *NOT* importable and a source package was
- # passed, attempt to import this target package as an absolute import.
- #
- # ADDENDUM: but do this only if the passed "level" is either
- # ABSOLUTE_IMPORT_LEVEL (0) or ABSOLUTE_OR_RELATIVE_IMPORT_LEVEL (-1).
- # Otherwise, an attempt at relative import of a missing sub-module
- # (from .module import something) might pull in an unrelated
- # but eponymous top-level module, which should not happen.
- if target_package is None and source_package is not None and level <= ABSOLUTE_IMPORT_LEVEL:
- target_package_name = target_module_headname
- source_package = None
-
- # Graph node for the target package, again.
- target_package = self._safe_import_module(
- target_module_headname, target_package_name, source_package)
-
- # If this target package is importable, return this package.
- if target_package is not None:
- self.msgout(4, "find_head_package ->", (target_package, target_module_tailname))
- return target_package, target_module_tailname
-
- # Else, raise an exception.
- self.msgout(4, "raise ImportError: No module named", target_package_name)
- raise ImportError("No module named " + target_package_name)
-
-
-
-
- #FIXME: Refactor from a generator yielding graph nodes into a non-generator
- #returning a list or tuple of all yielded graph nodes. This method is only
- #called once above and the return value of that call is only iterated over
- #as a list or tuple. There's no demonstrable reason for this to be a
- #generator. Generators are great for their intended purposes (e.g., as
- #continuations). This isn't one of those purposes.
- def _import_importable_package_submodules(self, package, attr_names):
- """
- Generator importing and yielding each importable submodule (of the
- previously imported package corresponding to the passed graph node)
- whose unqualified name is in the passed list.
-
- Elements of this list that are _not_ importable submodules of this
- package are either:
-
- * Ignorable attributes (e.g., classes, globals) defined at the top
- level of this package's `__init__` submodule, which will be ignored.
- * Else, unignorable unimportable submodules, in which case an
- exception is raised.
-
- Parameters
- ----------
- package : Package
- Graph node of the previously imported package containing the
- modules to be imported and yielded.
-
- attr_names : list
- List of the unqualified names of all attributes of this package to
- attempt to import as submodules. This list will be internally
- converted into a set, safely ignoring any duplicates in this list
- (e.g., reducing the "from"-style import
- `from foo import bar, car, far, bar, car, far` to merely
- `from foo import bar, car, far`).
-
- Yields
- ----------
- Node
- Graph node created for the currently imported submodule.
-
- Raises
- ----------
- ImportError
- If any attribute whose name is in `attr_names` is neither:
- * An importable submodule of this package.
- * An ignorable global attribute (e.g., class, variable) defined at
- the top level of this package's `__init__` submodule.
- In this case, this attribute _must_ be an unimportable submodule of
- this package.
- """
-
- # Ignore duplicate submodule names in the passed list.
- attr_names = set(attr_names)
- self.msgin(4, "_import_importable_package_submodules", package, attr_names)
-
- #FIXME: This test *SHOULD* be superfluous and hence safely removable.
- #The higher-level _scan_bytecode() and _collect_import() methods
- #already guarantee "*" characters to be removed from fromlists.
- if '*' in attr_names:
- attr_names.update(self._find_all_submodules(package))
- attr_names.remove('*')
-
- # self.msg(4, '_import_importable_package_submodules (global attrs)', package.identifier, package._global_attr_names)
-
- # For the name of each attribute to be imported from this package...
- for attr_name in attr_names:
- # self.msg(4, '_import_importable_package_submodules (fromlist attr)', package.identifier, attr_name)
-
- # Graph node of this attribute if this attribute is a previously
- # imported module or None otherwise.
- submodule = package.get_submodule_or_none(attr_name)
-
- # If this attribute is *NOT* a previously imported module, attempt
- # to import this attribute as a submodule of this package.
- if submodule is None:
- # Fully-qualified name of this submodule.
- submodule_name = package.identifier + '.' + attr_name
-
- # Graph node of this submodule if importable or None otherwise.
- submodule = self._safe_import_module(
- attr_name, submodule_name, package)
-
- # If this submodule is unimportable...
- if submodule is None:
- # If this attribute is a global (e.g., class, variable)
- # defined at the top level of this package's "__init__"
- # submodule, this importation is safely ignorable. Do so
- # and skip to the next attribute.
- #
- # This behaviour is non-conformant with Python behaviour,
- # which is bad, but is required to sanely handle all
- # possible edge cases, which is good. In Python, a global
- # attribute defined at the top level of a package's
- # "__init__" submodule shadows a submodule of the same name
- # in that package. Attempting to import that submodule
- # instead imports that attribute; thus, that submodule is
- # effectively unimportable. In this method and elsewhere,
- # that submodule is tested for first and hence shadows that
- # attribute -- the opposite logic. Attempts to import that
- # attribute are mistakenly seen as attempts to import that
- # submodule! Why?
- #
- # Edge cases. PyInstaller (and by extension ModuleGraph)
- # only cares about module imports. Global attribute imports
- # are parsed only as the means to this ends and are
- # otherwise ignorable. The cost of erroneously shadowing:
- #
- # * Submodules by attributes is significant. Doing so
- # prevents such submodules from being frozen and hence
- # imported at application runtime.
- # * Attributes by submodules is insignificant. Doing so
- # could erroneously freeze such submodules despite their
- # never being imported at application runtime. However,
- # ModuleGraph is incapable of determining with certainty
- # that Python logic in another module other than the
- # "__init__" submodule containing these attributes does
- # *NOT* delete these attributes and hence unshadow these
- # submodules, which would then become importable at
- # runtime and require freezing. Hence, ModuleGraph *MUST*
- # permissively assume submodules of the same name as
- # attributes to be unshadowed elsewhere and require
- # freezing -- even if they do not.
- #
- # It is practically difficult (albeit technically feasible)
- # for ModuleGraph to determine whether or not the target
- # attribute names of "from"-style import statements (e.g.,
- # "bar" and "car" in "from foo import bar, car") refer to
- # non-ignorable submodules or ignorable non-module globals
- # during opcode scanning. Distinguishing these two cases
- # during opcode scanning would require a costly call to the
- # _find_module() method, which would subsequently be
- # repeated during import-graph construction. This could be
- # ameliorated with caching, which itself would require
- # costly space consumption and developer time.
- #
- # Since opcode scanning fails to distinguish these two
- # cases, this and other methods subsequently called at
- # import-graph construction time (e.g.,
- # _safe_import_hook()) must do so. Since submodules of the
- # same name as attributes must assume to be unshadowed
- # elsewhere and require freezing, the only solution is to
- # attempt to import an attribute as a non-ignorable module
- # *BEFORE* assuming an attribute to be an ignorable
- # non-module. Which is what this and other methods do.
- #
- # See Package.is_global_attr() for similar discussion.
- if package.is_global_attr(attr_name):
- self.msg(4, '_import_importable_package_submodules: ignoring from-imported global', package.identifier, attr_name)
- continue
- # Else, this attribute is an unimportable submodule. Since
- # this is *NOT* safely ignorable, raise an exception.
- else:
- raise ImportError("No module named " + submodule_name)
-
- # Yield this submodule's graph node to the caller.
- yield submodule
-
- self.msgin(4, "_import_importable_package_submodules ->")
-
-
- def _find_all_submodules(self, m):
- if not m.packagepath:
- return
- # 'suffixes' used to be a list hardcoded to [".py", ".pyc", ".pyo"].
- # But we must also collect Python extension modules - although
- # we cannot separate normal dlls from Python extensions.
- for path in m.packagepath:
- try:
- names = os.listdir(path)
- except (os.error, IOError):
- self.msg(2, "can't list directory", path)
- continue
- for name in names:
- for suffix in importlib.machinery.all_suffixes():
- if path.endswith(suffix):
- name = os.path.basename(path)[:-len(suffix)]
- break
- else:
- continue
- if name != '__init__':
- yield name
-
-
- def alias_module(self, src_module_name, trg_module_name):
- """
- Alias the source module to the target module with the passed names.
-
- This method ensures that the next call to findNode() given the target
- module name will resolve this alias. This includes importing and adding
- a graph node for the source module if needed as well as adding a
- reference from the target to source module.
-
- Parameters
- ----------
- src_module_name : str
- Fully-qualified name of the existing **source module** (i.e., the
- module being aliased).
- trg_module_name : str
- Fully-qualified name of the non-existent **target module** (i.e.,
- the alias to be created).
- """
- self.msg(3, 'alias_module "%s" -> "%s"' % (src_module_name, trg_module_name))
- # print('alias_module "%s" -> "%s"' % (src_module_name, trg_module_name))
- assert isinstance(src_module_name, str), '"%s" not a module name.' % str(src_module_name)
- assert isinstance(trg_module_name, str), '"%s" not a module name.' % str(trg_module_name)
-
- # If the target module has already been added to the graph as either a
- # non-alias or as a different alias, raise an exception.
- trg_module = self.find_node(trg_module_name)
- if trg_module is not None and not (
- isinstance(trg_module, AliasNode) and
- trg_module.identifier == src_module_name):
- raise ValueError(
- 'Target module "%s" already imported as "%s".' % (
- trg_module_name, trg_module))
-
- # See findNode() for details.
- self.lazynodes[trg_module_name] = Alias(src_module_name)
-
-
- def add_module(self, module):
- """
- Add the passed module node to the graph if not already added.
-
- If that module has a parent module or package with a previously added
- node, this method also adds a reference from this module node to its
- parent node and adds this module node to its parent node's namespace.
-
- This high-level method wraps the low-level `addNode()` method, but is
- typically _only_ called by graph hooks adding runtime module nodes. For
- all other node types, the `import_module()` method should be called.
-
- Parameters
- ----------
- module : BaseModule
- Graph node of the module to be added.
- """
- self.msg(3, 'add_module', module)
-
- # If no node exists for this module, add such a node.
- module_added = self.find_node(module.identifier)
- if module_added is None:
- self.addNode(module)
- else:
- assert module == module_added, 'New module %r != previous %r.' % (module, module_added)
-
- # If this module has a previously added parent, reference this module to
- # its parent and add this module to its parent's namespace.
- parent_name, _, module_basename = module.identifier.rpartition('.')
- if parent_name:
- parent = self.find_node(parent_name)
- if parent is None:
- self.msg(4, 'add_module parent not found:', parent_name)
- else:
- self.add_edge(module, parent)
- parent.add_submodule(module_basename, module)
-
-
- def append_package_path(self, package_name, directory):
- """
- Modulegraph does a good job at simulating Python's, but it can not
- handle packagepath '__path__' modifications packages make at runtime.
-
- Therefore there is a mechanism whereby you can register extra paths
- in this map for a package, and it will be honored.
-
- NOTE: This method has to be called before a package is resolved by
- modulegraph.
-
- Parameters
- ----------
- module : str
- Fully-qualified module name.
- directory : str
- Absolute or relative path of the directory to append to the
- '__path__' attribute.
- """
-
- paths = self._package_path_map.setdefault(package_name, [])
- paths.append(directory)
-
-
- def _safe_import_module(
- self, module_partname, module_name, parent_module):
- """
- Create a new graph node for the module with the passed name under the
- parent package signified by the passed graph node _without_ raising
- `ImportError` exceptions.
-
- If this module has already been imported, this module's existing graph
- node will be returned; else if this module is importable, a new graph
- node will be added for this module and returned; else this module is
- unimportable, in which case `None` will be returned. Like the
- `_safe_import_hook()` method, this method does _not_ raise
- `ImportError` exceptions when this module is unimportable.
-
- Parameters
- ----------
- module_partname : str
- Unqualified name of the module to be imported (e.g., `text`).
- module_name : str
- Fully-qualified name of this module (e.g., `email.mime.text`).
- parent_module : Package
- Graph node of the previously imported parent module containing this
- submodule _or_ `None` if this is a top-level module (i.e.,
- `module_name` contains no `.` delimiters). This parent module is
- typically but _not_ always a package (e.g., the `os.path` submodule
- contained by the `os` module).
-
- Returns
- ----------
- Node
- Graph node created for this module _or_ `None` if this module is
- unimportable.
- """
- self.msgin(3, "safe_import_module", module_partname, module_name, parent_module)
-
- # If this module has *NOT* already been imported, do so.
- module = self.find_node(module_name)
- if module is None:
- # List of the absolute paths of all directories to be searched for
- # this module. This effectively defaults to "sys.path".
- search_dirs = None
-
- # If this module has a parent package...
- if parent_module is not None:
- # ...with a list of the absolute paths of all directories
- # comprising this package, prefer that to "sys.path".
- if parent_module.packagepath is not None:
- search_dirs = parent_module.packagepath
- # Else, something is horribly wrong. Return emptiness.
- else:
- self.msgout(3, "safe_import_module -> None (parent_parent.packagepath is None)")
- return None
-
- try:
- pathname, loader = self._find_module(
- module_partname, search_dirs, parent_module)
- except ImportError as exc:
- self.msgout(3, "safe_import_module -> None (%r)" % exc)
- return None
-
- (module, co) = self._load_module(module_name, pathname, loader)
- if co is not None:
- try:
- if isinstance(co, ast.AST):
- co_ast = co
- co = compile(co_ast, pathname, 'exec', 0, True)
- else:
- co_ast = None
- n = self._scan_code(module, co, co_ast)
- self._process_imports(n)
-
- if self.replace_paths:
- co = self._replace_paths_in_code(co)
- module.code = co
- except SyntaxError:
- self.msg(
- 1, "safe_import_module: SyntaxError in ", pathname,
- )
- cls = InvalidSourceModule
- module = self.createNode(cls, module_name)
-
- # If this is a submodule rather than top-level module...
- if parent_module is not None:
- self.msg(4, "safe_import_module create reference", module, "->", parent_module)
-
- # Add an edge from this submodule to its parent module.
- self._updateReference(
- module, parent_module, edge_data=DependencyInfo(
- conditional=False,
- fromlist=False,
- function=False,
- tryexcept=False,
- ))
-
- # Add this submodule to its parent module.
- parent_module.add_submodule(module_partname, module)
-
- # Return this module.
- self.msgout(3, "safe_import_module ->", module)
- return module
-
- def _load_module(self, fqname, pathname, loader):
- from importlib._bootstrap_external import ExtensionFileLoader
- self.msgin(2, "load_module", fqname, pathname,
- loader.__class__.__name__)
- partname = fqname.rpartition(".")[-1]
-
- if loader.is_package(partname):
- if isinstance(loader, NAMESPACE_PACKAGE):
- # This is a PEP-420 namespace package.
- m = self.createNode(NamespacePackage, fqname)
- m.filename = '-'
- m.packagepath = loader.namespace_dirs[:] # copy for safety
- else:
- # Regular package.
- #
- # NOTE: this might be a legacy setuptools (pkg_resources)
- # based namespace package (with __init__.py, but calling
- # `pkg_resources.declare_namespace(__name__)`). To properly
- # handle the case when such a package is split across
- # multiple locations, we need to resolve the package
- # paths via metadata.
- ns_pkgpaths = self._legacy_ns_packages.get(fqname, [])
-
- if isinstance(loader, ExtensionFileLoader):
- m = self.createNode(ExtensionPackage, fqname)
- else:
- m = self.createNode(Package, fqname)
- m.filename = pathname
- # PEP-302-compliant loaders return the pathname of the
- # `__init__`-file, not the package directory.
- assert os.path.basename(pathname).startswith('__init__.')
- m.packagepath = [os.path.dirname(pathname)] + ns_pkgpaths
-
- # As per comment at top of file, simulate runtime packagepath
- # additions
- m.packagepath = m.packagepath + self._package_path_map.get(
- fqname, [])
-
- if isinstance(m, NamespacePackage):
- return (m, None)
-
- co = None
- if loader is BUILTIN_MODULE:
- cls = BuiltinModule
- elif isinstance(loader, ExtensionFileLoader):
- cls = Extension
-
- # Look for accompanying .py or .pyi file, which might allow
- # us to perform basic import analysis for the extension.
- def _co_from_accompanying_source(extension_filename):
- path = os.path.dirname(extension_filename)
- basename = os.path.basename(extension_filename).split('.')[0]
-
- for ext in {'.py', '.pyi'}:
- src_filename = os.path.join(path, basename + ext)
- if not os.path.isfile(src_filename):
- continue
-
- try:
- with open(src_filename, 'rb') as fp:
- src = fp.read()
- co = compile(src, src_filename, 'exec', ast.PyCF_ONLY_AST, True)
- return co
- except Exception as e:
- pass
-
- co = _co_from_accompanying_source(pathname)
- else:
- try:
- src = loader.get_source(partname)
- except (UnicodeDecodeError, SyntaxError) as e:
- # The `UnicodeDecodeError` is typically raised here when the
- # source file contains non-ASCII characters in some local
- # encoding that is different from UTF-8, but fails to
- # declare it via PEP361 encoding header. Python seems to
- # be able to load and run such module, but we cannot retrieve
- # the source for it via the `loader.get_source()`.
- #
- # The `UnicodeDecoreError` in turn triggers a `SyntaxError`
- # when such invalid character appears on the first line of
- # the source file (and interrupts the scan for PEP361
- # encoding header).
- #
- # In such cases, we try to fall back to reading the source
- # as raw data file.
-
- # If `SyntaxError` was not raised during handling of
- # a `UnicodeDecodeError`, it was likely a genuine syntax
- # error, so re-raise it.
- if isinstance(e, SyntaxError):
- if not isinstance(e.__context__, UnicodeDecodeError):
- raise
-
- self.msg(2, "load_module: failed to obtain source for "
- f"{partname}: {e}! Falling back to reading as "
- "raw data!")
-
- path = loader.get_filename(partname)
- src = loader.get_data(path)
-
- if src is not None:
- try:
- co = compile(src, pathname, 'exec', ast.PyCF_ONLY_AST, True)
- cls = SourceModule
- except SyntaxError:
- co = None
- cls = InvalidSourceModule
- except Exception as exc: # FIXME: more specific?
- cls = InvalidSourceModule
- self.msg(2, "load_module: InvalidSourceModule", pathname,
- exc)
- else:
- # no src available
- try:
- co = loader.get_code(partname)
- cls = (CompiledModule if co is not None
- else InvalidCompiledModule)
- except Exception as exc: # FIXME: more specific?
- self.msg(2, "load_module: InvalidCompiledModule, "
- "Cannot load code", pathname, exc)
- cls = InvalidCompiledModule
-
- m = self.createNode(cls, fqname)
- m.filename = pathname
-
- self.msgout(2, "load_module ->", m)
- return (m, co)
-
- def _safe_import_hook(
- self, target_module_partname, source_module, target_attr_names,
- level=DEFAULT_IMPORT_LEVEL, edge_attr=None):
- """
- Import the module with the passed name and all parent packages of this
- module from the previously imported caller module signified by the
- passed graph node _without_ raising `ImportError` exceptions.
-
- This method wraps the lowel-level `_import_hook()` method. On catching
- an `ImportError` exception raised by that method, this method creates
- and adds a `MissingNode` instance describing the unimportable module to
- the graph instead.
-
- Parameters
- ----------
- target_module_partname : str
- Partially-qualified name of the module to be imported. If `level`
- is:
- * `ABSOLUTE_OR_RELATIVE_IMPORT_LEVEL` (e.g., the Python 2 default)
- or a positive integer (e.g., an explicit relative import), the
- fully-qualified name of this module is the concatenation of the
- fully-qualified name of the caller module's package and this
- parameter.
- * `ABSOLUTE_IMPORT_LEVEL` (e.g., the Python 3 default), this name
- is already fully-qualified.
- * A non-negative integer (e.g., `1`), this name is typically the
- empty string. In this case, this is a "from"-style relative
- import (e.g., "from . import bar") and the fully-qualified name
- of this module is dynamically resolved by import machinery.
- source_module : Node
- Graph node for the previously imported **caller module** (i.e.,
- module containing the `import` statement triggering the call to
- this method) _or_ `None` if this module is to be imported in a
- "disconnected" manner. **Passing `None` is _not_ recommended.**
- Doing so produces a disconnected graph in which the graph node
- created for the module to be imported will be disconnected and
- hence unreachable from all other nodes -- which frequently causes
- subtle issues in external callers (e.g., PyInstaller, which
- silently ignores unreachable nodes).
- target_attr_names : list
- List of the unqualified names of all submodules and attributes to
- be imported via a `from`-style import statement from this target
- module if any (e.g., the list `[encode_base64, encode_noop]` for
- the import `from email.encoders import encode_base64, encode_noop`)
- _or_ `None` otherwise. Ignored unless `source_module` is the graph
- node of a package (i.e., is an instance of the `Package` class).
- Why? Because:
- * Consistency. The `_import_importable_package_submodules()`
- method accepts a similar list applicable only to packages.
- * Efficiency. Unlike packages, modules cannot physically contain
- submodules. Hence, any target module imported via a `from`-style
- import statement as an attribute from another target parent
- module must itself have been imported in that target parent
- module. The import statement responsible for that import must
- already have been previously parsed by `ModuleGraph`, in which
- case that target module will already be frozen by PyInstaller.
- These imports are safely ignorable here.
- level : int
- Whether to perform an absolute or relative import. This parameter
- corresponds exactly to the parameter of the same name accepted by
- the `__import__()` built-in: "The default is -1 which indicates
- both absolute and relative imports will be attempted. 0 means only
- perform absolute imports. Positive values for level indicate the
- number of parent directories to search relative to the directory of
- the module calling `__import__()`." Defaults to -1 under Python 2
- and 0 under Python 3. Since this default depends on the major
- version of the current Python interpreter, depending on this
- default can result in unpredictable and non-portable behaviour.
- Callers are strongly recommended to explicitly pass this parameter
- rather than implicitly accept this default.
-
- Returns
- ----------
- list
- List of the graph nodes created for all modules explicitly imported
- by this call, including the passed module and all submodules listed
- in `target_attr_names` _but_ excluding all parent packages
- implicitly imported by this call. If `target_attr_names` is either
- `None` or the empty list, this is guaranteed to be a list of one
- element: the graph node created for the passed module. As above,
- `MissingNode` instances are created for all unimportable modules.
- """
- self.msg(3, "_safe_import_hook", target_module_partname, source_module, target_attr_names, level)
-
- def is_swig_candidate():
- return (source_module is not None and
- target_attr_names is None and
- level == ABSOLUTE_IMPORT_LEVEL and
- type(source_module) is SourceModule and
- target_module_partname ==
- '_' + source_module.identifier.rpartition('.')[2])
-
- def is_swig_wrapper(source_module):
- with open(source_module.filename, 'rb') as fp:
- contents = fp.read()
- contents = importlib.util.decode_source(contents)
- first_line = contents.splitlines()[0] if contents else ''
- self.msg(5, 'SWIG wrapper candidate first line: %r' % (first_line))
- return "automatically generated by SWIG" in first_line
-
-
- # List of the graph nodes created for all target modules both
- # imported by and returned from this call, whose:
- #
- # * First element is the graph node for the core target module
- # specified by the "target_module_partname" parameter.
- # * Remaining elements are the graph nodes for all target submodules
- # specified by the "target_attr_names" parameter.
- target_modules = None
-
- # True if this is a Python 2-style implicit relative import of a
- # SWIG-generated C extension. False if we checked and it is not SWIG.
- # None if we haven't checked yet.
- is_swig_import = None
-
- # Attempt to import this target module in the customary way.
- try:
- target_modules = self.import_hook(
- target_module_partname, source_module,
- target_attr_names=None, level=level, edge_attr=edge_attr)
- # Failing that, defer to custom module importers handling non-standard
- # import schemes (namely, SWIG).
- except InvalidRelativeImportError:
- self.msgout(2, "Invalid relative import", level,
- target_module_partname, target_attr_names)
- result = []
- for sub in target_attr_names or '*':
- m = self.createNode(InvalidRelativeImport,
- '.' * level + target_module_partname, sub)
- self._updateReference(source_module, m, edge_data=edge_attr)
- result.append(m)
- return result
- except ImportError as msg:
- # If this is an absolute top-level import under Python 3 and if the
- # name to be imported is the caller's name prefixed by "_", this
- # could be a SWIG-generated Python 2-style implicit relative import.
- # SWIG-generated files contain functions named swig_import_helper()
- # importing dynamic libraries residing in the same directory. For
- # example, a SWIG-generated caller module "csr.py" might resemble:
- #
- # # This file was automatically generated by SWIG (http://www.swig.org).
- # ...
- # def swig_import_helper():
- # ...
- # try:
- # fp, pathname, description = imp.find_module('_csr',
- # [dirname(__file__)])
- # except ImportError:
- # import _csr
- # return _csr
- #
- # While there exists no reasonable means for modulegraph to parse
- # the call to imp.find_module(), the subsequent implicit relative
- # import is trivially parsable. This import is prohibited under
- # Python 3, however, and thus parsed only if the caller's file is
- # parsable plaintext (as indicated by a filetype of ".py") and the
- # first line of this file is the above SWIG header comment.
- #
- # The constraint that this library's name be the caller's name
- # prefixed by '_' is explicitly mandated by SWIG and thus a
- # reliable indicator of "SWIG-ness". The SWIG documentation states:
- # "When linking the module, the name of the output file has to match
- # the name of the module prefixed by an underscore."
- #
- # Only source modules (e.g., ".py"-suffixed files) are SWIG import
- # candidates. All other node types are safely ignorable.
- if is_swig_candidate():
- self.msg(
- 4,
- 'SWIG import candidate (name=%r, caller=%r, level=%r)' % (
- target_module_partname, source_module, level))
- is_swig_import = is_swig_wrapper(source_module)
- if is_swig_import:
- # Convert this Python 2-compliant implicit relative
- # import prohibited by Python 3 into a Python
- # 3-compliant explicit relative "from"-style import for
- # the duration of this function call by overwriting the
- # original parameters passed to this call.
- target_attr_names = [target_module_partname]
- target_module_partname = ''
- level = 1
- self.msg(2,
- 'SWIG import (caller=%r, fromlist=%r, level=%r)'
- % (source_module, target_attr_names, level))
- # Import this target SWIG C extension's package.
- try:
- target_modules = self.import_hook(
- target_module_partname, source_module,
- target_attr_names=None,
- level=level,
- edge_attr=edge_attr)
- except ImportError as msg:
- self.msg(2, "SWIG ImportError:", str(msg))
-
- # If this module remains unimportable...
- if target_modules is None:
- self.msg(2, "ImportError:", str(msg))
-
- # Add this module as a MissingModule node.
- target_module = self.createNode(
- MissingModule,
- _path_from_importerror(msg, target_module_partname))
- self._updateReference(
- source_module, target_module, edge_data=edge_attr)
-
- # Initialize this list to this node.
- target_modules = [target_module]
-
- # Ensure that the above logic imported exactly one target module.
- assert len(target_modules) == 1, (
- 'Expected import_hook() to'
- 'return only one module but received: {}'.format(target_modules))
-
- # Target module imported above.
- target_module = target_modules[0]
-
- if isinstance(target_module, MissingModule) \
- and is_swig_import is None and is_swig_candidate() \
- and is_swig_wrapper(source_module):
- # if this possible swig C module was previously imported from
- # a python module other than its corresponding swig python
- # module, then it may have been considered a MissingModule.
- # Try to reimport it now. For details see pull-request #2578
- # and issue #1522.
- #
- # If this module was takes as a SWIG candidate above, but failed
- # to import, this would be a MissingModule, too. Thus check if
- # this was the case (is_swig_import would be not None) to avoid
- # recursion error. If `is_swig_import` is None and we are still a
- # swig candidate then that means we haven't properly imported this
- # swig module yet so do that below.
- #
- # Remove the MissingModule node from the graph so that we can
- # attempt a reimport and avoid collisions. This node should be
- # fine to remove because the proper module will be imported and
- # added to the graph in the next line (call to _safe_import_hook).
- self.removeNode(target_module)
- # Reimport the SWIG C module relative to the wrapper
- target_modules = self._safe_import_hook(
- target_module_partname, source_module,
- target_attr_names=None, level=1, edge_attr=edge_attr)
- # return the output regardless because it would just be
- # duplicating the processing below
- return target_modules
-
- if isinstance(edge_attr, DependencyInfo):
- edge_attr = edge_attr._replace(fromlist=True)
-
- # If this is a "from"-style import *AND* this target module is a
- # package, import all attributes listed by the "import" clause of this
- # import that are submodules of this package. If this target module is
- # *NOT* a package, these attributes are always ignorable globals (e.g.,
- # classes, variables) defined at the top level of this module.
- #
- # If this target module is a non-package, it could still contain
- # importable submodules (e.g., the non-package `os` module containing
- # the `os.path` submodule). In this case, these submodules are already
- # imported by this target module's pure-Python code. Since our import
- # scanner already detects these imports, these submodules need *NOT* be
- # reimported here. (Doing so would be harmless but inefficient.)
- if target_attr_names and isinstance(target_module,
- (Package, AliasNode)):
- # For the name of each attribute imported from this target package
- # into this source module...
- for target_submodule_partname in target_attr_names:
- #FIXME: Is this optimization *REALLY* an optimization or at all
- #necessary? The findNode() method called below should already
- #be heavily optimized, in which case this optimization here is
- #premature, senseless, and should be eliminated.
-
- # If this attribute is a previously imported submodule of this
- # target module, optimize this edge case.
- if target_module.is_submodule(target_submodule_partname):
- # Graph node for this submodule.
- target_submodule = target_module.get_submodule(
- target_submodule_partname)
-
- #FIXME: What? Shouldn't "target_submodule" *ALWAYS* be
- #non-None here? Assert this to be non-None instead.
- if target_submodule is not None:
- #FIXME: Why does duplication matter? List searches are
- #mildly expensive.
-
- # If this submodule has not already been added to the
- # list of submodules to be returned, do so.
- if target_submodule not in target_modules:
- self._updateReference(
- source_module,
- target_submodule,
- edge_data=edge_attr)
- target_modules.append(target_submodule)
- continue
-
- # Fully-qualified name of this submodule.
- target_submodule_name = (
- target_module.identifier + '.' + target_submodule_partname)
-
- # Graph node of this submodule if previously imported or None.
- target_submodule = self.find_node(target_submodule_name)
-
- # If this submodule has not been imported, do so as if this
- # submodule were the only attribute listed by the "import"
- # clause of this import (e.g., as "from foo import bar" rather
- # than "from foo import car, far, bar").
- if target_submodule is None:
- # Attempt to import this submodule.
- try:
- # Ignore the list of graph nodes returned by this
- # method. If both this submodule's package and this
- # submodule are importable, this method returns a
- # 2-element list whose second element is this
- # submodule's graph node. However, if this submodule's
- # package is importable but this submodule is not,
- # this submodule is either:
- #
- # * An ignorable global attribute defined at the top
- # level of this package's "__init__" submodule. In
- # this case, this method returns a 1-element list
- # without raising an exception.
- # * A non-ignorable unimportable submodule. In this
- # case, this method raises an "ImportError".
- #
- # While the first two cases are disambiguatable by the
- # length of this list, doing so would render this code
- # dependent on import_hook() details subject to change.
- # Instead, call findNode() to decide the truthiness.
- self.import_hook(
- target_module_partname, source_module,
- target_attr_names=[target_submodule_partname],
- level=level,
- edge_attr=edge_attr)
-
- # Graph node of this submodule imported by the prior
- # call if importable or None otherwise.
- target_submodule = self.find_node(target_submodule_name)
-
- # If this submodule does not exist, this *MUST* be an
- # ignorable global attribute defined at the top level
- # of this package's "__init__" submodule.
- if target_submodule is None:
- # Assert this to actually be the case.
- assert target_module.is_global_attr(
- target_submodule_partname), (
- 'No global named {} in {}.__init__'.format(
- target_submodule_partname,
- target_module.identifier))
-
- # Skip this safely ignorable importation to the
- # next attribute. See similar logic in the body of
- # _import_importable_package_submodules().
- self.msg(4, '_safe_import_hook', 'ignoring imported non-module global', target_module.identifier, target_submodule_partname)
- continue
-
- # If this is a SWIG C extension, instruct PyInstaller
- # to freeze this extension under its unqualified rather
- # than qualified name (e.g., as "_csr" rather than
- # "scipy.sparse.sparsetools._csr"), permitting the
- # implicit relative import in its parent SWIG module to
- # successfully find this extension.
- if is_swig_import:
- # If a graph node with this name already exists,
- # avoid collisions by emitting an error instead.
- if self.find_node(target_submodule_partname):
- self.msg(
- 2,
- 'SWIG import error: %r basename %r '
- 'already exists' % (
- target_submodule_name,
- target_submodule_partname))
- else:
- self.msg(
- 4,
- 'SWIG import renamed from %r to %r' % (
- target_submodule_name,
- target_submodule_partname))
- target_submodule.identifier = (
- target_submodule_partname)
- # If this submodule is unimportable, add a MissingModule.
- except ImportError as msg:
- self.msg(2, "ImportError:", str(msg))
- target_submodule = self.createNode(
- MissingModule, target_submodule_name)
-
- # Add this submodule to its package.
- target_module.add_submodule(
- target_submodule_partname, target_submodule)
- if target_submodule is not None:
- self._updateReference(
- target_module, target_submodule, edge_data=edge_attr)
- self._updateReference(
- source_module, target_submodule, edge_data=edge_attr)
-
- if target_submodule not in target_modules:
- target_modules.append(target_submodule)
-
- # Return the list of all target modules imported by this call.
- return target_modules
-
-
- def _scan_code(
- self,
- module,
- module_code_object,
- module_code_object_ast=None):
- """
- Parse and add all import statements from the passed code object of the
- passed source module to this graph, recursively.
-
- **This method is at the root of all `ModuleGraph` recursion.**
- Recursion begins here and ends when all import statements in all code
- objects of all modules transitively imported by the source module
- passed to the first call to this method have been added to the graph.
- Specifically, this method:
-
- 1. If the passed `module_code_object_ast` parameter is non-`None`,
- parses all import statements from this object.
- 2. Else, parses all import statements from the passed
- `module_code_object` parameter.
- 1. For each such import statement:
- 1. Adds to this `ModuleGraph` instance:
- 1. Nodes for all target modules of these imports.
- 1. Directed edges from this source module to these target
- modules.
- 2. Recursively calls this method with these target modules.
-
- Parameters
- ----------
- module : Node
- Graph node of the module to be parsed.
- module_code_object : PyCodeObject
- Code object providing this module's disassembled Python bytecode.
- Ignored unless `module_code_object_ast` is `None`.
- module_code_object_ast : optional[ast.AST]
- Optional abstract syntax tree (AST) of this module if any or `None`
- otherwise. Defaults to `None`, in which case the passed
- `module_code_object` is parsed instead.
- Returns
- ----------
- module : Node
- Graph node of the module to be parsed.
- """
-
- # For safety, guard against multiple scans of the same module by
- # resetting this module's list of deferred target imports.
- module._deferred_imports = []
-
- # Parse all imports from this module *BEFORE* adding these imports to
- # the graph. If an AST is provided, parse that rather than this
- # module's code object.
- if module_code_object_ast is not None:
- # Parse this module's AST for imports.
- self._scan_ast(module, module_code_object_ast)
-
- # Parse this module's code object for all relevant non-imports
- # (e.g., global variable declarations and undeclarations).
- self._scan_bytecode(
- module, module_code_object, is_scanning_imports=False)
- # Else, parse this module's code object for imports.
- else:
- self._scan_bytecode(
- module, module_code_object, is_scanning_imports=True)
-
- return module
-
- def _scan_ast(self, module, module_code_object_ast):
- """
- Parse and add all import statements from the passed abstract syntax
- tree (AST) of the passed source module to this graph, non-recursively.
-
- Parameters
- ----------
- module : Node
- Graph node of the module to be parsed.
- module_code_object_ast : ast.AST
- Abstract syntax tree (AST) of this module to be parsed.
- """
-
- visitor = _Visitor(self, module)
- visitor.visit(module_code_object_ast)
-
- #FIXME: Optimize. Global attributes added by this method are tested by
- #other methods *ONLY* for packages, implying this method should scan and
- #handle opcodes pertaining to global attributes (e.g.,
- #"STORE_NAME", "DELETE_GLOBAL") only if the passed "module"
- #object is an instance of the "Package" class. For all other module types,
- #these opcodes should simply be ignored.
- #
- #After doing so, the "Node._global_attr_names" attribute and all methods
- #using this attribute (e.g., Node.is_global()) should be moved from the
- #"Node" superclass to the "Package" subclass.
- def _scan_bytecode(
- self, module, module_code_object, is_scanning_imports):
- """
- Parse and add all import statements from the passed code object of the
- passed source module to this graph, non-recursively.
-
- This method parses all reasonably parsable operations (i.e., operations
- that are both syntactically and semantically parsable _without_
- requiring Turing-complete interpretation) directly or indirectly
- involving module importation from this code object. This includes:
-
- * `IMPORT_NAME`, denoting an import statement. Ignored unless
- the passed `is_scanning_imports` parameter is `True`.
- * `STORE_NAME` and `STORE_GLOBAL`, denoting the
- declaration of a global attribute (e.g., class, variable) in this
- module. This method stores each such declaration for subsequent
- lookup. While global attributes are usually irrelevant to import
- parsing, they remain the only means of distinguishing erroneous
- non-ignorable attempts to import non-existent submodules of a package
- from successful ignorable attempts to import existing global
- attributes of a package's `__init__` submodule (e.g., the `bar` in
- `from foo import bar`, which is either a non-ignorable submodule of
- `foo` or an ignorable global attribute of `foo.__init__`).
- * `DELETE_NAME` and `DELETE_GLOBAL`, denoting the
- undeclaration of a previously declared global attribute in this
- module.
-
- Since `ModuleGraph` is _not_ intended to replicate the behaviour of a
- full-featured Turing-complete Python interpreter, this method ignores
- operations that are _not_ reasonably parsable from this code object --
- even those directly or indirectly involving module importation. This
- includes:
-
- * `STORE_ATTR(namei)`, implementing `TOS.name = TOS1`. If `TOS` is the
- name of a target module currently imported into the namespace of the
- passed source module, this opcode would ideally be parsed to add that
- global attribute to that target module. Since this addition only
- conditionally occurs on the importation of this source module and
- execution of the code branch in this module performing this addition,
- however, that global _cannot_ be unconditionally added to that target
- module. In short, only Turing-complete behaviour suffices.
- * `DELETE_ATTR(namei)`, implementing `del TOS.name`. If `TOS` is the
- name of a target module currently imported into the namespace of the
- passed source module, this opcode would ideally be parsed to remove
- that global attribute from that target module. Again, however, only
- Turing-complete behaviour suffices.
-
- Parameters
- ----------
- module : Node
- Graph node of the module to be parsed.
- module_code_object : PyCodeObject
- Code object of the module to be parsed.
- is_scanning_imports : bool
- `True` only if this method is parsing import statements from
- `IMPORT_NAME` opcodes. If `False`, no import statements will be
- parsed. This parameter is typically:
- * `True` when parsing this module's code object for such imports.
- * `False` when parsing this module's abstract syntax tree (AST)
- (rather than code object) for such imports. In this case, that
- parsing will have already parsed import statements, which this
- parsing must avoid repeating.
- """
- level = None
- fromlist = None
-
- # 'deque' is a list-like container with fast appends, pops on
- # either end, and automatically discarding elements too much.
- prev_insts = deque(maxlen=2)
- for inst in util.iterate_instructions(module_code_object):
- if not inst:
- continue
- # If this is an import statement originating from this module,
- # parse this import.
- #
- # Note that the related "IMPORT_FROM" opcode need *NOT* be parsed.
- # "IMPORT_NAME" suffices. For further details, see
- # http://probablyprogramming.com/2008/04/14/python-import_name
- if inst.opname == 'IMPORT_NAME':
- # If this method is ignoring import statements, skip to the
- # next opcode.
- if not is_scanning_imports:
- continue
-
- # Python >=2.5: LOAD_CONST flags, LOAD_CONST names, IMPORT_NAME name
- #
- # Python 3.14 split LOAD_CONST into LOAD_CONST, LOAD_CONST_IMMORTAL,
- # and LOAD_SMALL_INT. The former two can be used to load the names,
- # while LOAD_SMALL_INT can be also used to load the flags.
- if sys.version_info >= (3, 14):
- assert prev_insts[-2].opname in {'LOAD_CONST', 'LOAD_CONST_IMMORTAL', 'LOAD_SMALL_INT'}
- assert prev_insts[-1].opname in {'LOAD_CONST', 'LOAD_CONST_IMMORTAL'}
- else:
- assert prev_insts[-2].opname == 'LOAD_CONST'
- assert prev_insts[-1].opname == 'LOAD_CONST'
-
- level = prev_insts[-2].argval
- fromlist = prev_insts[-1].argval
-
- assert fromlist is None or type(fromlist) is tuple
- target_module_partname = inst.argval
-
- #FIXME: The exact same logic appears in _collect_import(),
- #which isn't particularly helpful. Instead, defer this logic
- #until later by:
- #
- #* Refactor the "_deferred_imports" list to contain 2-tuples
- # "(_safe_import_hook_args, _safe_import_hook_kwargs)" rather
- # than 3-tuples "(have_star, _safe_import_hook_args,
- # _safe_import_hook_kwargs)".
- #* Stop prepending these tuples by a "have_star" boolean both
- # here, in _collect_import(), and in _process_imports().
- #* Shift the logic below to _process_imports().
- #* Remove the same logic from _collect_import().
- have_star = False
- if fromlist is not None:
- fromlist = uniq(fromlist)
- if '*' in fromlist:
- fromlist.remove('*')
- have_star = True
-
- # Record this import as originating from this module for
- # subsequent handling by the _process_imports() method.
- module._deferred_imports.append((
- have_star,
- (target_module_partname, module, fromlist, level),
- {}
- ))
-
- elif inst.opname in ('STORE_NAME', 'STORE_GLOBAL'):
- # If this is the declaration of a global attribute (e.g.,
- # class, variable) in this module, store this declaration for
- # subsequent lookup. See method docstring for further details.
- #
- # Global attributes are usually irrelevant to import parsing, but
- # remain the only means of distinguishing erroneous non-ignorable
- # attempts to import non-existent submodules of a package from
- # successful ignorable attempts to import existing global
- # attributes of a package's "__init__" submodule (e.g., the "bar"
- # in "from foo import bar", which is either a non-ignorable
- # submodule of "foo" or an ignorable global attribute of
- # "foo.__init__").
- name = inst.argval
- module.add_global_attr(name)
-
- elif inst.opname in ('DELETE_NAME', 'DELETE_GLOBAL'):
- # If this is the undeclaration of a previously declared global
- # attribute (e.g., class, variable) in this module, remove that
- # declaration to prevent subsequent lookup. See method docstring
- # for further details.
- name = inst.argval
- module.remove_global_attr_if_found(name)
-
- prev_insts.append(inst)
-
-
- def _process_imports(self, source_module):
- """
- Graph all target modules whose importations were previously parsed from
- the passed source module by a prior call to the `_scan_code()` method
- and methods call by that method (e.g., `_scan_ast()`,
- `_scan_bytecode()`, `_scan_bytecode_stores()`).
-
- Parameters
- ----------
- source_module : Node
- Graph node of the source module to graph target imports for.
- """
-
- # If this source module imported no target modules, noop.
- if not source_module._deferred_imports:
- return
-
- # For each target module imported by this source module...
- for have_star, import_info, kwargs in source_module._deferred_imports:
- # Graph node of the target module specified by the "from" portion
- # of this "from"-style star import (e.g., an import resembling
- # "from {target_module_name} import *") or ignored otherwise.
- target_modules = self._safe_import_hook(*import_info, **kwargs)
- if not target_modules:
- # If _safe_import_hook suppressed the module, quietly drop it.
- # Do not create an ExcludedModule instance, because that might
- # completely suppress the module whereas it might need to be
- # included due to reference from another module (that does
- # not exclude it via hook).
- continue
- target_module = target_modules[0]
-
- # If this is a "from"-style star import, process this import.
- if have_star:
- #FIXME: Sadly, the current approach to importing attributes
- #from "from"-style star imports is... simplistic. This should
- #be revised as follows. If this target module is:
- #
- #* A package:
- # * Whose "__init__" submodule defines the "__all__" global
- # attribute, only attributes listed by this attribute should
- # be imported.
- # * Else, *NO* attributes should be imported.
- #* A non-package:
- # * Defining the "__all__" global attribute, only attributes
- # listed by this attribute should be imported.
- # * Else, only public attributes whose names are *NOT*
- # prefixed by "_" should be imported.
- source_module.add_global_attrs_from_module(target_module)
-
- source_module._starimported_ignored_module_names.update(
- target_module._starimported_ignored_module_names)
-
- # If this target module has no code object and hence is
- # unparsable, record its name for posterity.
- if target_module.code is None:
- target_module_name = import_info[0]
- source_module._starimported_ignored_module_names.add(
- target_module_name)
-
- # For safety, prevent these imports from being reprocessed.
- source_module._deferred_imports = None
-
-
- def _find_module(self, name, path, parent=None):
- """
- 3-tuple describing the physical location of the module with the passed
- name if this module is physically findable _or_ raise `ImportError`.
-
- This high-level method wraps the low-level `modulegraph.find_module()`
- function with additional support for graph-based module caching.
-
- Parameters
- ----------
- name : str
- Fully-qualified name of the Python module to be found.
- path : list
- List of the absolute paths of all directories to search for this
- module _or_ `None` if the default path list `self.path` is to be
- searched.
- parent : Node
- Package containing this module if this module is a submodule of a
- package _or_ `None` if this is a top-level module.
-
- Returns
- ----------
- (filename, loader)
- See `modulegraph._find_module()` for details.
-
- Raises
- ----------
- ImportError
- If this module is _not_ found.
- """
-
- if parent is not None:
- # assert path is not None
- fullname = parent.identifier + '.' + name
- else:
- fullname = name
-
- node = self.find_node(fullname)
- if node is not None:
- self.msg(3, "find_module: already included?", node)
- raise ImportError(name)
-
- if path is None:
- if name in sys.builtin_module_names:
- return (None, BUILTIN_MODULE)
-
- path = self.path
-
- return self._find_module_path(fullname, name, path)
-
-
- def _find_module_path(self, fullname, module_name, search_dirs):
- """
- 3-tuple describing the physical location of the module with the passed
- name if this module is physically findable _or_ raise `ImportError`.
-
- This low-level function is a variant on the standard `imp.find_module()`
- function with additional support for:
-
- * Multiple search paths. The passed list of absolute paths will be
- iteratively searched for the first directory containing a file
- corresponding to this module.
- * Compressed (e.g., zipped) packages.
-
- For efficiency, the higher level `ModuleGraph._find_module()` method
- wraps this function with support for module caching.
-
- Parameters
- ----------
- module_name : str
- Fully-qualified name of the module to be found.
- search_dirs : list
- List of the absolute paths of all directories to search for this
- module (in order). Searching will halt at the first directory
- containing this module.
-
- Returns
- ----------
- (filename, loader)
- 2-tuple describing the physical location of this module, where:
- * `filename` is the absolute path of this file.
- * `loader` is the import loader.
- In case of a namespace package, this is a NAMESPACE_PACKAGE
- instance
-
- Raises
- ----------
- ImportError
- If this module is _not_ found.
- """
- self.msgin(4, "_find_module_path <-", fullname, search_dirs)
-
- # Top-level 2-tuple to be returned.
- path_data = None
-
- # List of the absolute paths of all directories comprising the
- # namespace package to which this module belongs if any.
- namespace_dirs = []
-
- try:
- for search_dir in search_dirs:
- # PEP 302-compliant importer making loaders for this directory.
- importer = pkgutil.get_importer(search_dir)
-
- # If this directory is not importable, continue.
- if importer is None:
- # self.msg(4, "_find_module_path importer not found", search_dir)
- continue
-
- # Get the PEP 302-compliant loader object loading this module.
- #
- # If this importer defines the PEP 451-compliant find_spec()
- # method, use that, and obtain loader from spec. This should
- # be available on python >= 3.4.
- if hasattr(importer, 'find_spec'):
- loader = None
- spec = importer.find_spec(module_name)
- if spec is not None:
- loader = spec.loader
- namespace_dirs.extend(spec.submodule_search_locations or [])
- # Else if this importer defines the PEP 302-compliant find_loader()
- # method, use that.
- elif hasattr(importer, 'find_loader'):
- loader, loader_namespace_dirs = importer.find_loader(
- module_name)
- namespace_dirs.extend(loader_namespace_dirs)
- # Else if this importer defines the Python 2-specific
- # find_module() method, fall back to that. Despite the method
- # name, this method returns a loader rather than a module.
- elif hasattr(importer, 'find_module'):
- loader = importer.find_module(module_name)
- # Else, raise an exception.
- else:
- raise ImportError(
- "Module %r importer %r loader unobtainable" % (module_name, importer))
-
- # If this module is not loadable from this directory, continue.
- if loader is None:
- # self.msg(4, "_find_module_path loader not found", search_dir)
- continue
-
- # Absolute path of this module. If this module resides in a
- # compressed archive, this is the absolute path of this module
- # after extracting this module from that archive and hence
- # should not exist; else, this path should typically exist.
- pathname = None
-
- # If this loader defines the PEP 302-compliant get_filename()
- # method, preferably call that method first. Most if not all
- # loaders (including zipimporter objects) define this method.
- if hasattr(loader, 'get_filename'):
- pathname = loader.get_filename(module_name)
- # Else if this loader provides a "path" attribute, defer to that.
- elif hasattr(loader, 'path'):
- pathname = loader.path
- # Else, raise an exception.
- else:
- raise ImportError(
- "Module %r loader %r path unobtainable" % (module_name, loader))
-
- # If no path was found, this is probably a namespace package. In
- # such case, continue collecting namespace directories.
- if pathname is None:
- self.msg(4, "_find_module_path path not found", pathname)
- continue
-
- # Return such metadata.
- path_data = (pathname, loader)
- break
- # Else if this is a namespace package, return such metadata.
- else:
- if namespace_dirs:
- path_data = (namespace_dirs[0],
- NAMESPACE_PACKAGE(namespace_dirs))
- except UnicodeDecodeError as exc:
- self.msgout(1, "_find_module_path -> unicode error", exc)
- # Ensure that exceptions are logged, as this function is typically
- # called by the import_module() method which squelches ImportErrors.
- except Exception as exc:
- self.msgout(4, "_find_module_path -> exception", exc)
- raise
-
- # If this module was not found, raise an exception.
- self.msgout(4, "_find_module_path ->", path_data)
- if path_data is None:
- raise ImportError("No module named " + repr(module_name))
-
- return path_data
-
-
- def create_xref(self, out=None):
- global header, footer, entry, contpl, contpl_linked, imports
- if out is None:
- out = sys.stdout
- scripts = []
- mods = []
- for mod in self.iter_graph():
- name = os.path.basename(mod.graphident)
- if isinstance(mod, Script):
- scripts.append((name, mod))
- else:
- mods.append((name, mod))
- scripts.sort()
- mods.sort()
- scriptnames = [sn for sn, m in scripts]
- scripts.extend(mods)
- mods = scripts
-
- title = "modulegraph cross reference for " + ', '.join(scriptnames)
- print(header % {"TITLE": title}, file=out)
-
- def sorted_namelist(mods):
- lst = [os.path.basename(mod.graphident) for mod in mods if mod]
- lst.sort()
- return lst
- for name, m in mods:
- content = ""
- if isinstance(m, BuiltinModule):
- content = contpl % {"NAME": name,
- "TYPE": "(builtin module)"}
- elif isinstance(m, Extension):
- content = contpl % {"NAME": name,
- "TYPE": "%s" % m.filename}
- else:
- url = urllib.request.pathname2url(m.filename or "")
- content = contpl_linked % {"NAME": name, "URL": url,
- 'TYPE': m.__class__.__name__}
- oute, ince = map(sorted_namelist, self.get_edges(m))
- if oute:
- links = []
- for n in oute:
- links.append(""" %s\n""" % (n, n))
- # #8226 = bullet-point; can't use html-entities since the
- # test-suite uses xml.etree.ElementTree.XMLParser, which
- # does't supprot them.
- links = " • ".join(links)
- content += imports % {"HEAD": "imports", "LINKS": links}
- if ince:
- links = []
- for n in ince:
- links.append(""" %s\n""" % (n, n))
- # #8226 = bullet-point; can't use html-entities since the
- # test-suite uses xml.etree.ElementTree.XMLParser, which
- # does't supprot them.
- links = " • ".join(links)
- content += imports % {"HEAD": "imported by", "LINKS": links}
- print(entry % {"NAME": name, "CONTENT": content}, file=out)
- print(footer, file=out)
-
- def itergraphreport(self, name='G', flatpackages=()):
- # XXX: Can this be implemented using Dot()?
- nodes = list(map(self.graph.describe_node, self.graph.iterdfs(self)))
- describe_edge = self.graph.describe_edge
- edges = deque()
- packagenodes = set()
- packageidents = {}
- nodetoident = {}
- inpackages = {}
- mainedges = set()
-
- # XXX - implement
- flatpackages = dict(flatpackages)
-
- def nodevisitor(node, data, outgoing, incoming):
- if not isinstance(data, Node):
- return {'label': str(node)}
- #if isinstance(d, (ExcludedModule, MissingModule, BadModule)):
- # return None
- s = ' ' + type(data).__name__
- for i, v in enumerate(data.infoTuple()[:1], 1):
- s += '| %s' % (i, v)
- return {'label': s, 'shape': 'record'}
-
-
- def edgevisitor(edge, data, head, tail):
- # XXX: This method nonsense, the edge
- # data is never initialized.
- if data == 'orphan':
- return {'style': 'dashed'}
- elif data == 'pkgref':
- return {'style': 'dotted'}
- return {}
-
- yield 'digraph %s {\ncharset="UTF-8";\n' % (name,)
- attr = dict(rankdir='LR', concentrate='true')
- cpatt = '%s="%s"'
- for item in attr.items():
- yield '\t%s;\n' % (cpatt % item,)
-
- # find all packages (subgraphs)
- for (node, data, outgoing, incoming) in nodes:
- nodetoident[node] = getattr(data, 'graphident', None)
- if isinstance(data, Package):
- packageidents[data.graphident] = node
- inpackages[node] = set([node])
- packagenodes.add(node)
-
- # create sets for subgraph, write out descriptions
- for (node, data, outgoing, incoming) in nodes:
- # update edges
- for edge in (describe_edge(e) for e in outgoing):
- edges.append(edge)
-
- # describe node
- yield '\t"%s" [%s];\n' % (
- node,
- ','.join([
- (cpatt % item) for item in
- nodevisitor(node, data, outgoing, incoming).items()
- ]),
- )
-
- inside = inpackages.get(node)
- if inside is None:
- inside = inpackages[node] = set()
- ident = nodetoident[node]
- if ident is None:
- continue
- pkgnode = packageidents.get(ident[:ident.rfind('.')])
- if pkgnode is not None:
- inside.add(pkgnode)
-
- graph = []
- subgraphs = {}
- for key in packagenodes:
- subgraphs[key] = []
-
- while edges:
- edge, data, head, tail = edges.popleft()
- if ((head, tail)) in mainedges:
- continue
- mainedges.add((head, tail))
- tailpkgs = inpackages[tail]
- common = inpackages[head] & tailpkgs
- if not common and tailpkgs:
- usepkgs = sorted(tailpkgs)
- if len(usepkgs) != 1 or usepkgs[0] != tail:
- edges.append((edge, data, head, usepkgs[0]))
- edges.append((edge, 'pkgref', usepkgs[-1], tail))
- continue
- if common:
- common = common.pop()
- if tail == common:
- edges.append((edge, data, tail, head))
- elif head == common:
- subgraphs[common].append((edge, 'pkgref', head, tail))
- else:
- edges.append((edge, data, common, head))
- edges.append((edge, data, common, tail))
-
- else:
- graph.append((edge, data, head, tail))
-
- def do_graph(edges, tabs):
- edgestr = tabs + '"%s" -> "%s" [%s];\n'
- # describe edge
- for (edge, data, head, tail) in edges:
- attribs = edgevisitor(edge, data, head, tail)
- yield edgestr % (
- head,
- tail,
- ','.join([(cpatt % item) for item in attribs.items()]),
- )
-
- for g, edges in subgraphs.items():
- yield '\tsubgraph "cluster_%s" {\n' % (g,)
- yield '\t\tlabel="%s";\n' % (nodetoident[g],)
- for s in do_graph(edges, '\t\t'):
- yield s
- yield '\t}\n'
-
- for s in do_graph(graph, '\t'):
- yield s
-
- yield '}\n'
-
- def graphreport(self, fileobj=None, flatpackages=()):
- if fileobj is None:
- fileobj = sys.stdout
- fileobj.writelines(self.itergraphreport(flatpackages=flatpackages))
-
- def report(self):
- """Print a report to stdout, listing the found modules with their
- paths, as well as modules that are missing, or seem to be missing.
- """
- print()
- print("%-15s %-25s %s" % ("Class", "Name", "File"))
- print("%-15s %-25s %s" % ("-----", "----", "----"))
- for m in sorted(self.iter_graph(), key=lambda n: n.graphident):
- if isinstance(m, AliasNode):
- print("%-15s %-25s %s" % (type(m).__name__, m.graphident, m.identifier))
- else:
- print("%-15s %-25s %s" % (type(m).__name__, m.graphident, m.filename or ""))
-
- def _replace_paths_in_code(self, co):
- new_filename = original_filename = os.path.normpath(co.co_filename)
- for f, r in self.replace_paths:
- f = os.path.join(f, '')
- r = os.path.join(r, '')
- if original_filename.startswith(f):
- new_filename = r + original_filename[len(f):]
- break
-
- else:
- return co
-
- consts = list(co.co_consts)
- for i in range(len(consts)):
- if isinstance(consts[i], type(co)):
- consts[i] = self._replace_paths_in_code(consts[i])
-
- return co.replace(co_consts=tuple(consts), co_filename=new_filename)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/util.py b/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/util.py
deleted file mode 100755
index dab8c06..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/lib/modulegraph/util.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import dis
-import inspect
-
-
-def iterate_instructions(code_object):
- """Delivers the byte-code instructions as a continuous stream.
-
- Yields `dis.Instruction`. After each code-block (`co_code`), `None` is
- yielded to mark the end of the block and to interrupt the steam.
- """
- # The arg extension the EXTENDED_ARG opcode represents is automatically handled by get_instructions() but the
- # instruction is left in. Get rid of it to make subsequent parsing easier/safer.
- yield from (i for i in dis.get_instructions(code_object) if i.opname != "EXTENDED_ARG")
-
- yield None
-
- # For each constant in this code object that is itself a code object,
- # parse this constant in the same manner.
- for constant in code_object.co_consts:
- if inspect.iscode(constant):
- yield from iterate_instructions(constant)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/loader/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/loader/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index c5772bb..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyiboot01_bootstrap.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyiboot01_bootstrap.cpython-312.pyc
deleted file mode 100644
index 53caf12..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyiboot01_bootstrap.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod01_archive.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod01_archive.cpython-312.pyc
deleted file mode 100644
index 04d1dbc..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod01_archive.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod02_importers.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod02_importers.cpython-312.pyc
deleted file mode 100644
index d3ca21b..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod02_importers.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod03_ctypes.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod03_ctypes.cpython-312.pyc
deleted file mode 100644
index f73a357..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod03_ctypes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod04_pywin32.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod04_pywin32.cpython-312.pyc
deleted file mode 100644
index d3abe0e..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/loader/__pycache__/pyimod04_pywin32.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py b/venv/lib/python3.12/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py
deleted file mode 100755
index b0da1dd..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py
+++ /dev/null
@@ -1,95 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-#-- Start bootstrap process
-# Only python built-in modules can be used.
-
-import sys
-
-import pyimod02_importers
-
-# Extend Python import machinery by adding PEP302 importers to sys.meta_path.
-pyimod02_importers.install()
-
-#-- Bootstrap process is complete.
-# We can use other python modules (e.g. os)
-
-import os # noqa: E402
-
-# Let other python modules know that the code is running in frozen mode.
-if not hasattr(sys, 'frozen'):
- sys.frozen = True
-
-# sys._MEIPASS is now set in the bootloader. Hooray.
-
-# Python 3 C-API function Py_SetPath() resets sys.prefix to empty string. Python 2 was using PYTHONHOME for sys.prefix.
-# Let's do the same for Python 3.
-sys.prefix = sys._MEIPASS
-sys.exec_prefix = sys.prefix
-
-# Python 3.3+ defines also sys.base_prefix. Let's set them too.
-sys.base_prefix = sys.prefix
-sys.base_exec_prefix = sys.exec_prefix
-
-# Some packages behave differently when running inside virtual environment. E.g., IPython tries to append path
-# VIRTUAL_ENV to sys.path. For the frozen app we want to prevent this behavior.
-VIRTENV = 'VIRTUAL_ENV'
-if VIRTENV in os.environ:
- # On some platforms (e.g., AIX) 'os.unsetenv()' is unavailable and deleting the var from os.environ does not
- # delete it from the environment.
- os.environ[VIRTENV] = ''
- del os.environ[VIRTENV]
-
-# Ensure sys.path contains absolute paths. Otherwise, import of other python modules will fail when current working
-# directory is changed by the frozen application.
-python_path = []
-for pth in sys.path:
- python_path.append(os.path.abspath(pth))
- sys.path = python_path
-
-# At least on Windows, Python seems to hook up the codecs on this import, so it is not enough to just package up all
-# the encodings.
-#
-# It was also reported that without 'encodings' module, the frozen executable fails to load in some configurations:
-# http://www.pyinstaller.org/ticket/651
-#
-# Importing 'encodings' module in a run-time hook is not enough, since some run-time hooks require this module, and the
-# order of running the code from the run-time hooks is not defined.
-try:
- import encodings # noqa: F401
-except ImportError:
- pass
-
-# In the Python interpreter 'warnings' module is imported when 'sys.warnoptions' is not empty. Mimic this behavior.
-if sys.warnoptions:
- import warnings # noqa: F401
-
-# Install the hooks for ctypes
-import pyimod03_ctypes # noqa: E402
-
-pyimod03_ctypes.install()
-
-# Install the hooks for pywin32 (Windows only)
-if sys.platform.startswith('win'):
- import pyimod04_pywin32
- pyimod04_pywin32.install()
-
-# Apply a hack for metadata that was collected from (unzipped) python eggs; the EGG-INFO directories are collected into
-# their parent directories (my_package-version.egg/EGG-INFO), and for metadata to be discoverable by
-# `importlib.metadata`, the .egg directory needs to be in `sys.path`. The deprecated `pkg_resources` does not have this
-# limitation, and seems to work as long as the .egg directory's parent directory (in our case `sys._MEIPASS` is in
-# `sys.path`.
-for entry in os.listdir(sys._MEIPASS):
- entry = os.path.join(sys._MEIPASS, entry)
- if not os.path.isdir(entry):
- continue
- if entry.endswith('.egg'):
- sys.path.append(entry)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod01_archive.py b/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod01_archive.py
deleted file mode 100755
index 2d70254..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod01_archive.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# **NOTE** This module is used during bootstrap.
-# Import *ONLY* builtin modules or modules that are collected into the base_library.zip archive.
-# List of built-in modules: sys.builtin_module_names
-# List of modules collected into base_library.zip: PyInstaller.compat.PY3_BASE_MODULES
-
-import os
-import struct
-import marshal
-import zlib
-
-# In Python3, the MAGIC_NUMBER value is available in the importlib module. However, in the bootstrap phase we cannot use
-# importlib directly, but rather its frozen variant.
-import _frozen_importlib
-
-PYTHON_MAGIC_NUMBER = _frozen_importlib._bootstrap_external.MAGIC_NUMBER
-
-# Type codes for PYZ PYZ entries
-PYZ_ITEM_MODULE = 0
-PYZ_ITEM_PKG = 1
-PYZ_ITEM_DATA = 2 # deprecated; PYZ does not contain any data entries anymore
-PYZ_ITEM_NSPKG = 3 # PEP-420 namespace package
-
-
-class ArchiveReadError(RuntimeError):
- pass
-
-
-class ZlibArchiveReader:
- """
- Reader for PyInstaller's PYZ (ZlibArchive) archive. The archive is used to store collected byte-compiled Python
- modules, as individually-compressed entries.
- """
- _PYZ_MAGIC_PATTERN = b'PYZ\0'
-
- def __init__(self, filename, start_offset=None, check_pymagic=False):
- self._filename = filename
- self._start_offset = start_offset
-
- self.toc = {}
-
- # If no offset is given, try inferring it from filename
- if start_offset is None:
- self._filename, self._start_offset = self._parse_offset_from_filename(filename)
-
- # Parse header and load TOC. Standard header contains 12 bytes: PYZ magic pattern, python bytecode magic
- # pattern, and offset to TOC (32-bit integer). It might be followed by additional fields, depending on
- # implementation version.
- with open(self._filename, "rb") as fp:
- # Read PYZ magic pattern, located at the start of the file
- fp.seek(self._start_offset, os.SEEK_SET)
-
- magic = fp.read(len(self._PYZ_MAGIC_PATTERN))
- if magic != self._PYZ_MAGIC_PATTERN:
- raise ArchiveReadError("PYZ magic pattern mismatch!")
-
- # Read python magic/version number
- pymagic = fp.read(len(PYTHON_MAGIC_NUMBER))
- if check_pymagic and pymagic != PYTHON_MAGIC_NUMBER:
- raise ArchiveReadError("Python magic pattern mismatch!")
-
- # Read TOC offset
- toc_offset, *_ = struct.unpack('!i', fp.read(4))
-
- # Load TOC
- fp.seek(self._start_offset + toc_offset, os.SEEK_SET)
- self.toc = dict(marshal.load(fp))
-
- @staticmethod
- def _parse_offset_from_filename(filename):
- """
- Parse the numeric offset from filename, stored as: `/path/to/file?offset`.
- """
- offset = 0
-
- idx = filename.rfind('?')
- if idx == -1:
- return filename, offset
-
- try:
- offset = int(filename[idx + 1:])
- filename = filename[:idx] # Remove the offset from filename
- except ValueError:
- # Ignore spurious "?" in the path (for example, like in Windows UNC \\?\).
- pass
-
- return filename, offset
-
- def extract(self, name, raw=False):
- """
- Extract data from entry with the given name.
-
- If the entry belongs to a module or a package, the data is loaded (unmarshaled) into code object. To retrieve
- raw data, set `raw` flag to True.
- """
- # Look up entry
- entry = self.toc.get(name)
- if entry is None:
- raise KeyError(f"No entry named {name!r} found in the archive!")
-
- typecode, entry_offset, entry_length = entry
-
- # PEP-420 namespace package does not have a data blob.
- if typecode == PYZ_ITEM_NSPKG:
- return None
-
- # Read data blob
- try:
- with open(self._filename, "rb") as fp:
- fp.seek(self._start_offset + entry_offset)
- obj = fp.read(entry_length)
- except FileNotFoundError:
- # We open the archive file each time we need to read from it, to avoid locking the file by keeping it open.
- # This allows executable to be deleted or moved (renamed) while it is running, which is useful in certain
- # scenarios (e.g., automatic update that replaces the executable). The caveat is that once the executable is
- # renamed, we cannot read from its embedded PYZ archive anymore. In such case, exit with informative
- # message.
- raise SystemExit(
- f"ERROR: {self._filename} appears to have been moved or deleted since this application was launched. "
- "Continouation from this state is impossible. Exiting now."
- )
-
- try:
- obj = zlib.decompress(obj)
- if typecode in (PYZ_ITEM_MODULE, PYZ_ITEM_PKG) and not raw:
- obj = marshal.loads(obj)
- except EOFError as e:
- raise ImportError(f"Failed to unmarshal PYZ entry {name!r}!") from e
-
- return obj
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod02_importers.py b/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod02_importers.py
deleted file mode 100755
index 68c22bc..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod02_importers.py
+++ /dev/null
@@ -1,781 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-PEP-302 and PEP-451 importers for frozen applications.
-"""
-
-# **NOTE** This module is used during bootstrap.
-# Import *ONLY* builtin modules or modules that are collected into the base_library.zip archive.
-# List of built-in modules: sys.builtin_module_names
-# List of modules collected into base_library.zip: PyInstaller.compat.PY3_BASE_MODULES
-
-import sys
-import os
-import io
-
-import _frozen_importlib
-import _thread
-
-import pyimod01_archive
-
-if sys.flags.verbose and sys.stderr:
-
- def trace(msg, *a):
- sys.stderr.write(msg % a)
- sys.stderr.write("\n")
-else:
-
- def trace(msg, *a):
- pass
-
-
-def _decode_source(source_bytes):
- """
- Decode bytes representing source code and return the string. Universal newline support is used in the decoding.
- Based on CPython's implementation of the same functionality:
- https://github.com/python/cpython/blob/3.9/Lib/importlib/_bootstrap_external.py#L679-L688
- """
- # Local import to avoid including `tokenize` and its dependencies in `base_library.zip`
- from tokenize import detect_encoding
- source_bytes_readline = io.BytesIO(source_bytes).readline
- encoding = detect_encoding(source_bytes_readline)
- newline_decoder = io.IncrementalNewlineDecoder(decoder=None, translate=True)
- return newline_decoder.decode(source_bytes.decode(encoding[0]))
-
-
-# Global instance of PYZ archive reader. Initialized by install().
-pyz_archive = None
-
-# Some runtime hooks might need to traverse available frozen package/module hierarchy to simulate filesystem.
-# Such traversals can be efficiently implemented using a prefix tree (trie), whose computation we defer until first
-# access.
-_pyz_tree_lock = _thread.RLock()
-_pyz_tree = None
-
-
-def get_pyz_toc_tree():
- global _pyz_tree
-
- with _pyz_tree_lock:
- if _pyz_tree is None:
- _pyz_tree = _build_pyz_prefix_tree(pyz_archive)
- return _pyz_tree
-
-
-# Populate list of unresolved (original) and resolved paths to top-level directory, used when trying to determine
-# relative path.
-_TOP_LEVEL_DIRECTORY_PATHS = []
-
-# Original sys._MEIPASS value; ensure separators are normalized (e.g., when using msys2 python).
-_TOP_LEVEL_DIRECTORY = os.path.normpath(sys._MEIPASS)
-_TOP_LEVEL_DIRECTORY_PATHS.append(_TOP_LEVEL_DIRECTORY)
-
-# Fully resolve sys._MEIPASS in case its location is symlinked at some level; for example, system temporary directory
-# (used by onefile builds) is usually a symbolic link under macOS.
-_RESOLVED_TOP_LEVEL_DIRECTORY = os.path.realpath(_TOP_LEVEL_DIRECTORY)
-if os.path.normcase(_RESOLVED_TOP_LEVEL_DIRECTORY) != os.path.normcase(_TOP_LEVEL_DIRECTORY):
- _TOP_LEVEL_DIRECTORY_PATHS.append(_RESOLVED_TOP_LEVEL_DIRECTORY)
-
-# If we are running as macOS .app bundle, compute the alternative top-level directory path as well.
-_is_macos_app_bundle = False
-if sys.platform == 'darwin' and _TOP_LEVEL_DIRECTORY.endswith("Contents/Frameworks"):
- _is_macos_app_bundle = True
-
- _ALTERNATIVE_TOP_LEVEL_DIRECTORY = os.path.join(
- os.path.dirname(_TOP_LEVEL_DIRECTORY),
- 'Resources',
- )
- _TOP_LEVEL_DIRECTORY_PATHS.append(_ALTERNATIVE_TOP_LEVEL_DIRECTORY)
-
- _RESOLVED_ALTERNATIVE_TOP_LEVEL_DIRECTORY = os.path.join(
- os.path.dirname(_RESOLVED_TOP_LEVEL_DIRECTORY),
- 'Resources',
- )
- if _RESOLVED_ALTERNATIVE_TOP_LEVEL_DIRECTORY != _ALTERNATIVE_TOP_LEVEL_DIRECTORY:
- _TOP_LEVEL_DIRECTORY_PATHS.append(_RESOLVED_ALTERNATIVE_TOP_LEVEL_DIRECTORY)
-
-
-# Helper for computing PYZ prefix tree
-def _build_pyz_prefix_tree(pyz_archive):
- tree = dict()
- for entry_name, entry_data in pyz_archive.toc.items():
- name_components = entry_name.split('.')
- typecode = entry_data[0]
- current = tree
- if typecode in {pyimod01_archive.PYZ_ITEM_PKG, pyimod01_archive.PYZ_ITEM_NSPKG}:
- # Package; create new dictionary node for its modules
- for name_component in name_components:
- current = current.setdefault(name_component, {})
- else:
- # Module; create the leaf node (empty string)
- for name_component in name_components[:-1]:
- current = current.setdefault(name_component, {})
- current[name_components[-1]] = ''
- return tree
-
-
-class PyiFrozenFinder:
- """
- PyInstaller's frozen path entry finder for specific search path.
-
- Per-path instances allow us to properly translate the given module name ("fullname") into full PYZ entry name.
- For example, with search path being `sys._MEIPASS`, the module "mypackage.mod" would translate to "mypackage.mod"
- in the PYZ archive. However, if search path was `sys._MEIPASS/myotherpackage/_vendored` (for example, if
- `myotherpacakge` added this path to `sys.path`), then "mypackage.mod" would need to translate to
- "myotherpackage._vendored.mypackage.mod" in the PYZ archive.
- """
- def __repr__(self):
- return f"{self.__class__.__name__}({self._path})"
-
- @classmethod
- def path_hook(cls, path):
- trace(f"PyInstaller: running path finder hook for path: {path!r}")
- try:
- finder = cls(path)
- trace("PyInstaller: hook succeeded")
- return finder
- except Exception as e:
- trace(f"PyInstaller: hook failed: {e}")
- raise
-
- def __init__(self, path):
- self._path = path # Store original path, as given.
- self._pyz_archive = pyz_archive
-
- # Compute relative path to the top-level application directory. Do not try to resolve the path itself, because
- # it might contain symbolic links in parts other than the prefix that corresponds to the top-level application
- # directory. See #8994 for an example (files symlinked from a common directory outside of the top-level
- # application directory). Instead, try to compute relative path w.r.t. the original and the resolved top-level
- # application directory.
- for top_level_path in _TOP_LEVEL_DIRECTORY_PATHS:
- try:
- relative_path = os.path.relpath(path, top_level_path)
- except ValueError:
- continue # Failed to compute relative path w.r.t. the given top-level directory path.
-
- if relative_path.startswith('..'):
- continue # Relative path points outside of the given top-level directory.
-
- break # Successful match; stop here.
- else:
- raise ImportError("Failed to determine relative path w.r.t. top-level application directory.")
-
- # Ensure that path does not point to a file on filesystem. Strictly speaking, we should be checking that the
- # given path is a valid directory, but that would need to check both PYZ and filesystem. So for now, limit the
- # check to catch paths pointing to file, because that breaks `runpy.run_path()`, as per #8767.
- if os.path.isfile(path):
- raise ImportError("only directories are supported")
-
- if relative_path == '.':
- self._pyz_entry_prefix = ''
- else:
- self._pyz_entry_prefix = '.'.join(relative_path.split(os.path.sep))
-
- def _compute_pyz_entry_name(self, fullname):
- """
- Convert module fullname into PYZ entry name, subject to the prefix implied by this finder's search path.
- """
- tail_module = fullname.rpartition('.')[2]
-
- if self._pyz_entry_prefix:
- return self._pyz_entry_prefix + "." + tail_module
- else:
- return tail_module
-
- @property
- def fallback_finder(self):
- """
- Opportunistically create a *fallback finder* using `sys.path_hooks` entries that are located *after* our hook.
- The main goal of this exercise is to obtain an instance of python's FileFinder, but in theory any other hook
- that comes after ours is eligible to be a fallback.
-
- Having this fallback allows our finder to "cooperate" with python's FileFinder, as if the two were a single
- finder, which allows us to work around the python's PathFinder permitting only one finder instance per path
- without subclassing FileFinder.
- """
- if hasattr(self, '_fallback_finder'):
- return self._fallback_finder
-
- # Try to instantiate fallback finder
- our_hook_found = False
-
- self._fallback_finder = None
- for idx, hook in enumerate(sys.path_hooks):
- if hook == self.path_hook:
- our_hook_found = True
- continue # Our hook
-
- if not our_hook_found:
- continue # Skip hooks before our hook
-
- try:
- self._fallback_finder = hook(self._path)
- break
- except ImportError:
- pass
-
- return self._fallback_finder
-
- def _find_fallback_spec(self, fullname, target):
- """
- Attempt to find the spec using fallback finder, which is opportunistically created here. Typically, this would
- be python's FileFinder, which can discover specs for on-filesystem modules, such as extension modules and
- modules that are collected only as source .py files.
-
- Having this fallback allows our finder to "cooperate" with python's FileFinder, as if the two were a single
- finder, which allows us to work around the python's PathFinder permitting only one finder instance per path
- without subclassing FileFinder.
- """
- if not hasattr(self, '_fallback_finder'):
- self._fallback_finder = self._get_fallback_finder()
-
- if self._fallback_finder is None:
- return None
-
- return self._fallback_finder.find_spec(fullname, target)
-
- #-- Core PEP451 finder functionality, modeled after importlib.abc.PathEntryFinder
- # https://docs.python.org/3/library/importlib.html#importlib.abc.PathEntryFinder
- def invalidate_caches(self):
- """
- A method which, when called, should invalidate any internal cache used by the finder. Used by
- importlib.invalidate_caches() when invalidating the caches of all finders on sys.meta_path.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.MetaPathFinder.invalidate_caches
- """
- # We do not use any caches, but if we have created a fallback finder, propagate the function call.
- # NOTE: use getattr() with _fallback_finder attribute, in order to avoid unnecessary creation of the
- # fallback finder in case when it does not exist yet.
- fallback_finder = getattr(self, '_fallback_finder', None)
- if fallback_finder is not None:
- if hasattr(fallback_finder, 'invalidate_caches'):
- fallback_finder.invalidate_caches()
-
- def find_spec(self, fullname, target=None):
- """
- A method for finding a spec for the specified module. The finder will search for the module only within the
- path entry to which it is assigned. If a spec cannot be found, None is returned. When passed in, target is a
- module object that the finder may use to make a more educated guess about what spec to return.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.PathEntryFinder.find_spec
- """
- trace(f"{self}: find_spec: called with fullname={fullname!r}, target={fullname!r}")
-
- # Convert fullname to PYZ entry name.
- pyz_entry_name = self._compute_pyz_entry_name(fullname)
-
- # Try looking up the entry in the PYZ archive
- entry_data = self._pyz_archive.toc.get(pyz_entry_name)
- if entry_data is None:
- # Entry not found - try using fallback finder (for example, python's own FileFinder) to resolve on-disk
- # resources, such as extension modules and modules that are collected only as source .py files.
- trace(f"{self}: find_spec: {fullname!r} not found in PYZ...")
-
- if self.fallback_finder is not None:
- trace(f"{self}: find_spec: attempting resolve using fallback finder {self.fallback_finder!r}.")
- fallback_spec = self.fallback_finder.find_spec(fullname, target)
- trace(f"{self}: find_spec: fallback finder returned spec: {fallback_spec!r}.")
- return fallback_spec
- else:
- trace(f"{self}: find_spec: fallback finder is not available.")
-
- return None
-
- # Entry found
- typecode = entry_data[0]
- trace(f"{self}: find_spec: found {fullname!r} in PYZ as {pyz_entry_name!r}, typecode={typecode}")
-
- if typecode == pyimod01_archive.PYZ_ITEM_NSPKG:
- # PEP420 namespace package
- # We can use regular list for submodule_search_locations; the caller (i.e., python's PathFinder) takes care
- # of constructing _NamespacePath from it.
- spec = _frozen_importlib.ModuleSpec(fullname, None)
- spec.submodule_search_locations = [
- # NOTE: since we are using sys._MEIPASS as prefix, we need to construct path from resolved PYZ entry
- # name (equivalently, we could combine `self._path` and last part of `fullname`).
- os.path.join(sys._MEIPASS, pyz_entry_name.replace('.', os.path.sep)),
- ]
- return spec
-
- is_package = typecode == pyimod01_archive.PYZ_ITEM_PKG
-
- # Instantiate frozen loader for the module
- loader = PyiFrozenLoader(
- name=fullname,
- pyz_archive=self._pyz_archive,
- pyz_entry_name=pyz_entry_name,
- is_package=is_package,
- )
-
- # Resolve full filename, as if the module/package was located on filesystem. This is done by the loader.
- origin = loader.path
-
- # Construct spec for module, using all collected information.
- spec = _frozen_importlib.ModuleSpec(
- fullname,
- loader,
- is_package=is_package,
- origin=origin,
- )
-
- # Make the import machinery set __file__.
- # PEP 451 says: "has_location" is true if the module is locatable. In that case the spec's origin is used
- # as the location and __file__ is set to spec.origin. If additional location information is required
- # (e.g., zipimport), that information may be stored in spec.loader_state.
- spec.has_location = True
-
- # Set submodule_search_locations for packages. Seems to be required for importlib_resources from 3.2.0;
- # see issue #5395.
- if is_package:
- spec.submodule_search_locations = [os.path.dirname(origin)]
-
- return spec
-
- # The following methods are part of legacy PEP302 finder interface. They have been deprecated since python 3.4,
- # and removed in python 3.12. Provide compatibility shims to accommodate code that might still be using them.
- if sys.version_info[:2] < (3, 12):
-
- def find_loader(self, fullname):
- """
- A legacy method for finding a loader for the specified module. Returns a 2-tuple of (loader, portion) where
- portion is a sequence of file system locations contributing to part of a namespace package. The loader may
- be None while specifying portion to signify the contribution of the file system locations to a namespace
- package. An empty list can be used for portion to signify the loader is not part of a namespace package. If
- loader is None and portion is the empty list then no loader or location for a namespace package were found
- (i.e. failure to find anything for the module).
-
- Deprecated since python 3.4, removed in 3.12.
- """
- # Based on:
- # https://github.com/python/cpython/blob/v3.11.9/Lib/importlib/_bootstrap_external.py#L1587-L1600
- spec = self.find_spec(fullname)
- if spec is None:
- return None, []
- return spec.loader, spec.submodule_search_locations or []
-
- def find_module(self, fullname):
- """
- A concrete implementation of Finder.find_module() which is equivalent to self.find_loader(fullname)[0].
-
- Deprecated since python 3.4, removed in 3.12.
- """
- # Based on:
- # https://github.com/python/cpython/blob/v3.11.9/Lib/importlib/_bootstrap_external.py#L1585
- # https://github.com/python/cpython/blob/v3.11.9/Lib/importlib/_bootstrap_external.py#L622-L639
- #
- loader, portions = self.find_loader(fullname)
- return loader
-
-
-# Helper for enforcing module name in PyiFrozenLoader methods.
-def _check_name(method):
- def _check_name_wrapper(self, name, *args, **kwargs):
- if self.name != name:
- raise ImportError(f'loader for {self.name} cannot handle {name}', name=name)
- return method(self, name, *args, **kwargs)
-
- return _check_name_wrapper
-
-
-class PyiFrozenLoader:
- """
- PyInstaller's frozen loader for modules in the PYZ archive, which are discovered by PyiFrozenFinder.
-
- Since this loader is instantiated only from PyiFrozenFinder and since each loader instance is tied to a specific
- module, the fact that the loader was instantiated serves as the proof that the module exists in the PYZ archive.
- Hence, we can avoid any additional validation in the implementation of the loader's methods.
- """
- def __init__(self, name, pyz_archive, pyz_entry_name, is_package):
- # Store the reference to PYZ archive (for code object retrieval), as well as full PYZ entry name
- # and typecode, all of which are passed from the PyiFrozenFinder.
- self._pyz_archive = pyz_archive
- self._pyz_entry_name = pyz_entry_name
- self._is_package = is_package
-
- # Compute the module file path, as if module was located on filesystem.
- #
- # Rather than returning path to the .pyc file, return the path to .py file - which might actually exist, if it
- # was explicitly collected into the frozen application). This improves compliance with
- # https://docs.python.org/3/library/importlib.html#importlib.abc.ExecutionLoader.get_filename
- # as well as general compatibility with 3rd party code that blindly assumes that module's file path points to
- # the source .py file.
- #
- # NOTE: since we are using sys._MEIPASS as prefix, we need to construct path from full PYZ entry name
- # (so that a module with `name`=`jaraco.text` and `pyz_entry_name`=`setuptools._vendor.jaraco.text`
- # ends up with path set to `sys._MEIPASS/setuptools/_vendor/jaraco/text/__init__.pyc` instead of
- # `sys._MEIPASS/jaraco/text/__init__.pyc`).
- if is_package:
- module_file = os.path.join(sys._MEIPASS, pyz_entry_name.replace('.', os.path.sep), '__init__.py')
- else:
- module_file = os.path.join(sys._MEIPASS, pyz_entry_name.replace('.', os.path.sep) + '.py')
-
- # These properties are defined as part of importlib.abc.FileLoader. They are used by our implementation
- # (e.g., module name validation, get_filename(), get_source(), get_resource_reader()), and might also be used
- # by 3rd party code that naively expects to be dealing with a FileLoader instance.
- self.name = name # The name of the module the loader can handle.
- self.path = module_file # Path to the file of the module
-
- #-- Core PEP451 loader functionality as defined by importlib.abc.Loader
- # https://docs.python.org/3/library/importlib.html#importlib.abc.Loader
- def create_module(self, spec):
- """
- A method that returns the module object to use when importing a module. This method may return None, indicating
- that default module creation semantics should take place.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.Loader.create_module
- """
- return None
-
- def exec_module(self, module):
- """
- A method that executes the module in its own namespace when a module is imported or reloaded. The module
- should already be initialized when exec_module() is called. When this method exists, create_module()
- must be defined.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.Loader.exec_module
- """
- spec = module.__spec__
- bytecode = self.get_code(spec.name) # NOTE: get_code verifies that `spec.name` matches `self.name`!
- if bytecode is None:
- raise RuntimeError(f"Failed to retrieve bytecode for {spec.name!r}!")
-
- # Set by the import machinery
- assert hasattr(module, '__file__')
-
- # If `submodule_search_locations` is not None, this is a package; set __path__.
- if spec.submodule_search_locations is not None:
- module.__path__ = spec.submodule_search_locations
-
- exec(bytecode, module.__dict__)
-
- # The following method is part of legacy PEP302 loader interface. It has been deprecated since python 3.4, and
- # slated for removal in python 3.12, although that has not happened yet. Provide compatibility shim to accommodate
- # code that might still be using it.
- if True:
-
- @_check_name
- def load_module(self, fullname):
- """
- A legacy method for loading a module. If the module cannot be loaded, ImportError is raised, otherwise the
- loaded module is returned.
-
- Deprecated since python 3.4, slated for removal in 3.12 (but still present in python's own FileLoader in
- both v3.12.4 and v3.13.0rc1).
- """
- # Based on:
- # https://github.com/python/cpython/blob/v3.11.9/Lib/importlib/_bootstrap_external.py#L942-L945
- import importlib._bootstrap as _bootstrap
- return _bootstrap._load_module_shim(self, fullname)
-
- #-- PEP302 protocol extensions as defined by importlib.abc.ExecutionLoader
- # https://docs.python.org/3/library/importlib.html#importlib.abc.ExecutionLoader
- @_check_name
- def get_filename(self, fullname):
- """
- A method that is to return the value of __file__ for the specified module. If no path is available, ImportError
- is raised.
-
- If source code is available, then the method should return the path to the source file, regardless of whether a
- bytecode was used to load the module.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.ExecutionLoader.get_filename
- """
- return self.path
-
- #-- PEP302 protocol extensions as defined by importlib.abc.InspectLoader
- # https://docs.python.org/3/library/importlib.html#importlib.abc.InspectLoader
- @_check_name
- def get_code(self, fullname):
- """
- Return the code object for a module, or None if the module does not have a code object (as would be the case,
- for example, for a built-in module). Raise an ImportError if loader cannot find the requested module.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.InspectLoader.get_code
- """
- return self._pyz_archive.extract(self._pyz_entry_name)
-
- @_check_name
- def get_source(self, fullname):
- """
- A method to return the source of a module. It is returned as a text string using universal newlines, translating
- all recognized line separators into '\n' characters. Returns None if no source is available (e.g. a built-in
- module). Raises ImportError if the loader cannot find the module specified.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.InspectLoader.get_source
- """
- # The `path` attribute (which is also returned from `get_filename()`) already points to where the source .py
- # file should exist, if it is available.
- filename = self.path
-
- try:
- # Read in binary mode, then decode
- with open(filename, 'rb') as fp:
- source_bytes = fp.read()
- return _decode_source(source_bytes)
- except FileNotFoundError:
- pass
-
- # Source code is unavailable.
- return None
-
- @_check_name
- def is_package(self, fullname):
- """
- A method to return a true value if the module is a package, a false value otherwise. ImportError is raised if
- the loader cannot find the module.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.InspectLoader.is_package
- """
- return self._is_package
-
- #-- PEP302 protocol extensions as dfined by importlib.abc.ResourceLoader
- # https://docs.python.org/3/library/importlib.html#importlib.abc.ResourceLoader
- def get_data(self, path):
- """
- A method to return the bytes for the data located at path. Loaders that have a file-like storage back-end that
- allows storing arbitrary data can implement this abstract method to give direct access to the data stored.
- OSError is to be raised if the path cannot be found. The path is expected to be constructed using a module’s
- __file__ attribute or an item from a package’s __path__.
-
- https://docs.python.org/3/library/importlib.html#importlib.abc.ResourceLoader.get_data
- """
- # Try to fetch the data from the filesystem. Since __file__ attribute works properly, just try to open the file
- # and read it.
- with open(path, 'rb') as fp:
- return fp.read()
-
- #-- Support for `importlib.resources`.
- @_check_name
- def get_resource_reader(self, fullname):
- """
- Return resource reader compatible with `importlib.resources`.
- """
- return PyiFrozenResourceReader(self)
-
-
-class PyiFrozenResourceReader:
- """
- Resource reader for importlib.resources / importlib_resources support.
-
- Supports only on-disk resources, which should cover the typical use cases, i.e., the access to data files;
- PyInstaller collects data files onto filesystem, and as of v6.0.0, the embedded PYZ archive is guaranteed
- to contain only .pyc modules.
-
- When listing resources, source .py files will not be listed as they are not collected by default. Similarly,
- sub-directories that contained only .py files are not reconstructed on filesystem, so they will not be listed,
- either. If access to .py files is required for whatever reason, they need to be explicitly collected as data files
- anyway, which will place them on filesystem and make them appear as resources.
-
- For on-disk resources, we *must* return path compatible with pathlib.Path() in order to avoid copy to a temporary
- file, which might break under some circumstances, e.g., metpy with importlib_resources back-port, due to:
- https://github.com/Unidata/MetPy/blob/a3424de66a44bf3a92b0dcacf4dff82ad7b86712/src/metpy/plots/wx_symbols.py#L24-L25
- (importlib_resources tries to use 'fonts/wx_symbols.ttf' as a temporary filename suffix, which fails as it contains
- a separator).
-
- Furthermore, some packages expect files() to return either pathlib.Path or zipfile.Path, e.g.,
- https://github.com/tensorflow/datasets/blob/master/tensorflow_datasets/core/utils/resource_utils.py#L81-L97
- This makes implementation of mixed support for on-disk and embedded resources using importlib.abc.Traversable
- protocol rather difficult.
-
- So in order to maximize compatibility with unfrozen behavior, the below implementation is basically equivalent of
- importlib.readers.FileReader from python 3.10:
- https://github.com/python/cpython/blob/839d7893943782ee803536a47f1d4de160314f85/Lib/importlib/readers.py#L11
- and its underlying classes, importlib.abc.TraversableResources and importlib.abc.ResourceReader:
- https://github.com/python/cpython/blob/839d7893943782ee803536a47f1d4de160314f85/Lib/importlib/abc.py#L422
- https://github.com/python/cpython/blob/839d7893943782ee803536a47f1d4de160314f85/Lib/importlib/abc.py#L312
- """
- def __init__(self, loader):
- # Local import to avoid including `pathlib` and its dependencies in `base_library.zip`
- import pathlib
- # This covers both modules and (regular) packages. Note that PEP-420 namespace packages are not handled by this
- # resource reader (since they are not handled by PyiFrozenLoader, which uses this reader).
- self.path = pathlib.Path(loader.path).parent
-
- def open_resource(self, resource):
- return self.files().joinpath(resource).open('rb')
-
- def resource_path(self, resource):
- return str(self.path.joinpath(resource))
-
- def is_resource(self, path):
- return self.files().joinpath(path).is_file()
-
- def contents(self):
- return (item.name for item in self.files().iterdir())
-
- def files(self):
- return self.path
-
-
-class PyiFrozenEntryPointLoader:
- """
- A special loader that enables retrieval of the code-object for the __main__ module.
- """
- def __repr__(self):
- return self.__class__.__name__
-
- def get_code(self, fullname):
- if fullname == '__main__':
- # Special handling for __main__ module; the bootloader should store code object to _pyi_main_co
- # attribute of the module.
- return sys.modules['__main__']._pyi_main_co
-
- raise ImportError(f'{self} cannot handle module {fullname!r}')
-
-
-def install():
- """
- Install PyInstaller's frozen finders/loaders/importers into python's import machinery.
- """
- # Setup PYZ archive reader.
- #
- # The bootloader should store the path to PYZ archive (the path to the PKG archive and the offset within it; for
- # executable-embedded archive, this is for example /path/executable_name?117568) into _pyinstaller_pyz
- # attribute of the sys module.
- global pyz_archive
-
- if not hasattr(sys, '_pyinstaller_pyz'):
- raise RuntimeError("Bootloader did not set sys._pyinstaller_pyz!")
-
- try:
- pyz_archive = pyimod01_archive.ZlibArchiveReader(sys._pyinstaller_pyz, check_pymagic=True)
- except Exception as e:
- raise RuntimeError("Failed to setup PYZ archive reader!") from e
-
- delattr(sys, '_pyinstaller_pyz')
-
- # On Windows, there is finder called `_frozen_importlib.WindowsRegistryFinder`, which looks for Python module
- # locations in Windows registry. The frozen application should not look for those, so remove this finder
- # from `sys.meta_path`.
- for entry in sys.meta_path:
- if getattr(entry, '__name__', None) == 'WindowsRegistryFinder':
- sys.meta_path.remove(entry)
- break
-
- # Insert our hook for `PyiFrozenFinder` into `sys.path_hooks`. Place it after `zipimporter`, if available.
- for idx, entry in enumerate(sys.path_hooks):
- if getattr(entry, '__name__', None) == 'zipimporter':
- trace(f"PyInstaller: inserting our finder hook at index {idx + 1} in sys.path_hooks.")
- sys.path_hooks.insert(idx + 1, PyiFrozenFinder.path_hook)
- break
- else:
- trace("PyInstaller: zipimporter hook not found in sys.path_hooks! Prepending our finder hook to the list.")
- sys.path_hooks.insert(0, PyiFrozenFinder.path_hook)
-
- # Monkey-patch `zipimporter.get_source` to allow loading out-of-zip source .py files for modules that are
- # in `base_library.zip`.
- _patch_zipimporter_get_source()
-
- # Python might have already created a `FileFinder` for `sys._MEIPASS`. Remove the entry from path importer cache,
- # so that next loading attempt creates `PyiFrozenFinder` instead. This could probably be avoided altogether if
- # we refrained from adding `sys._MEIPASS` to `sys.path` until our importer hooks is in place.
- sys.path_importer_cache.pop(sys._MEIPASS, None)
-
- # Set the PyiFrozenEntryPointLoader as loader for __main__, in order for python to treat __main__ as a module
- # instead of a built-in, and to allow its code object to be retrieved.
- try:
- sys.modules['__main__'].__loader__ = PyiFrozenEntryPointLoader()
- except Exception:
- pass
-
- # Apply hack for python >= 3.11 and its frozen stdlib modules.
- if sys.version_info >= (3, 11):
- _fixup_frozen_stdlib()
-
-
-# A hack for python >= 3.11 and its frozen stdlib modules. Unless `sys._stdlib_dir` is set, these modules end up
-# missing __file__ attribute, which causes problems with 3rd party code. At the time of writing, python interpreter
-# configuration API does not allow us to influence `sys._stdlib_dir` - it always resets it to `None`. Therefore,
-# we manually set the path, and fix __file__ attribute on modules.
-def _fixup_frozen_stdlib():
- import _imp # built-in
-
- # If sys._stdlib_dir is None or empty, override it with sys._MEIPASS
- if not sys._stdlib_dir:
- try:
- sys._stdlib_dir = sys._MEIPASS
- except AttributeError:
- pass
-
- # The sys._stdlib_dir set above should affect newly-imported python-frozen modules. However, most of them have
- # been already imported during python initialization and our bootstrap, so we need to retroactively fix their
- # __file__ attribute.
- for module_name, module in sys.modules.items():
- if not _imp.is_frozen(module_name):
- continue
-
- is_pkg = _imp.is_frozen_package(module_name)
-
- # Determine "real" name from __spec__.loader_state.
- loader_state = module.__spec__.loader_state
-
- orig_name = loader_state.origname
- if is_pkg:
- orig_name += '.__init__'
-
- # We set suffix to .pyc to be consistent with our PyiFrozenLoader.
- filename = os.path.join(sys._MEIPASS, *orig_name.split('.')) + '.pyc'
-
- # Fixup the __file__ attribute
- if not hasattr(module, '__file__'):
- try:
- module.__file__ = filename
- except AttributeError:
- pass
-
- # Fixup the loader_state.filename
- # Except for _frozen_importlib (importlib._bootstrap), whose loader_state.filename appears to be left at
- # None in python.
- if loader_state.filename is None and orig_name != 'importlib._bootstrap':
- loader_state.filename = filename
-
-
-# Monkey-patch the `get_source` implementation of python's `zipimport.zipimporter` with our custom implementation that
-# looks up for source files in top-level application directory instead of within the zip file. This allows us to collect
-# source .py files for modules that are collected in the `base_library.zip` in the same way as for modules in the PYZ
-# archive.
-def _patch_zipimporter_get_source():
- import zipimport
-
- _orig_get_source = zipimport.zipimporter.get_source
-
- def _get_source(self, fullname):
- # Call original implementation first, in case we are dealing with a zip file other than `base_library.zip` (or
- # if the source .py file is actually in there, for whatever reason). This also implicitly validates the module
- # name, as it raises exception if module does not exist and returns None if module exists but the source code
- # is not present in the archive.
- source = _orig_get_source(self, fullname)
- if source is not None:
- return source
-
- # Our override should apply only to `base_library.zip`.
- if os.path.basename(self.archive) != 'base_library.zip':
- return None
-
- # Translate module/package name into .py filename in the top-level application directory.
- if self.is_package(fullname):
- filename = os.path.join(*fullname.split('.'), '__init__.py')
- else:
- filename = os.path.join(*fullname.split('.')) + '.py'
- filename = os.path.join(_RESOLVED_TOP_LEVEL_DIRECTORY, filename)
-
- try:
- # Read in binary mode, then decode
- with open(filename, 'rb') as fp:
- source_bytes = fp.read()
- return _decode_source(source_bytes)
- except FileNotFoundError:
- pass
-
- # Source code is unavailable.
- return None
-
- zipimport.zipimporter.get_source = _get_source
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod03_ctypes.py b/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod03_ctypes.py
deleted file mode 100755
index ccb9c8d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod03_ctypes.py
+++ /dev/null
@@ -1,131 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License with exception
-# for distributing bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#-----------------------------------------------------------------------------
-"""
-Hooks to make ctypes.CDLL, .PyDLL, etc. look in sys._MEIPASS first.
-"""
-
-import sys
-
-
-def install():
- """
- Install the hooks.
-
- This must be done from a function as opposed to at module-level, because when the module is imported/executed,
- the import machinery is not completely set up yet.
- """
-
- import os
-
- try:
- import ctypes
- except ImportError:
- # ctypes is not included in the frozen application
- return
-
- def _frozen_name(name):
- # If the given (file)name does not exist, fall back to searching for its basename in sys._MEIPASS, where
- # PyInstaller usually collects shared libraries.
- if name and not os.path.isfile(name):
- frozen_name = os.path.join(sys._MEIPASS, os.path.basename(name))
- if os.path.isfile(frozen_name):
- name = frozen_name
- return name
-
- class PyInstallerImportError(OSError):
- def __init__(self, name):
- self.msg = (
- "Failed to load dynlib/dll %r. Most likely this dynlib/dll was not found when the application "
- "was frozen." % name
- )
- self.args = (self.msg,)
-
- class PyInstallerCDLL(ctypes.CDLL):
- def __init__(self, name, *args, **kwargs):
- name = _frozen_name(name)
- try:
- super().__init__(name, *args, **kwargs)
- except Exception as base_error:
- raise PyInstallerImportError(name) from base_error
-
- ctypes.CDLL = PyInstallerCDLL
- ctypes.cdll = ctypes.LibraryLoader(PyInstallerCDLL)
-
- class PyInstallerPyDLL(ctypes.PyDLL):
- def __init__(self, name, *args, **kwargs):
- name = _frozen_name(name)
- try:
- super().__init__(name, *args, **kwargs)
- except Exception as base_error:
- raise PyInstallerImportError(name) from base_error
-
- ctypes.PyDLL = PyInstallerPyDLL
- ctypes.pydll = ctypes.LibraryLoader(PyInstallerPyDLL)
-
- if sys.platform.startswith('win'):
-
- class PyInstallerWinDLL(ctypes.WinDLL):
- def __init__(self, name, *args, **kwargs):
- name = _frozen_name(name)
- try:
- super().__init__(name, *args, **kwargs)
- except Exception as base_error:
- raise PyInstallerImportError(name) from base_error
-
- ctypes.WinDLL = PyInstallerWinDLL
- ctypes.windll = ctypes.LibraryLoader(PyInstallerWinDLL)
-
- class PyInstallerOleDLL(ctypes.OleDLL):
- def __init__(self, name, *args, **kwargs):
- name = _frozen_name(name)
- try:
- super().__init__(name, *args, **kwargs)
- except Exception as base_error:
- raise PyInstallerImportError(name) from base_error
-
- ctypes.OleDLL = PyInstallerOleDLL
- ctypes.oledll = ctypes.LibraryLoader(PyInstallerOleDLL)
-
- try:
- import ctypes.util
- except ImportError:
- # ctypes.util is not included in the frozen application
- return
-
- # Same implementation as ctypes.util.find_library, except it prepends sys._MEIPASS to the search directories.
- def pyinstaller_find_library(name):
- if name in ('c', 'm'):
- return ctypes.util.find_msvcrt()
- # See MSDN for the REAL search order.
- search_dirs = [sys._MEIPASS] + os.environ['PATH'].split(os.pathsep)
- for directory in search_dirs:
- fname = os.path.join(directory, name)
- if os.path.isfile(fname):
- return fname
- if fname.lower().endswith(".dll"):
- continue
- fname = fname + ".dll"
- if os.path.isfile(fname):
- return fname
- return None
-
- ctypes.util.find_library = pyinstaller_find_library
-
-
-# On macOS insert sys._MEIPASS in the first position of the list of paths that ctypes uses to search for libraries.
-#
-# Note: 'ctypes' module will NOT be bundled with every app because code in this module is not scanned for module
-# dependencies. It is safe to wrap 'ctypes' module into 'try/except ImportError' block.
-if sys.platform.startswith('darwin'):
- try:
- from ctypes.macholib import dyld
- dyld.DEFAULT_LIBRARY_FALLBACK.insert(0, sys._MEIPASS)
- except ImportError:
- # Do nothing when module 'ctypes' is not available.
- pass
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod04_pywin32.py b/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod04_pywin32.py
deleted file mode 100755
index b635d75..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/loader/pyimod04_pywin32.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License with exception
-# for distributing bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#-----------------------------------------------------------------------------
-"""
-Set search path for pywin32 DLLs. Due to the large number of pywin32 modules, we use a single loader-level script
-instead of per-module runtime hook scripts.
-"""
-
-import os
-import sys
-
-
-def install():
- # Sub-directories containing extensions. In original python environment, these are added to `sys.path` by the
- # `pywin32.pth` so the extensions end up treated as top-level modules. We attempt to preserve the directory
- # layout, so we need to add these directories to `sys.path` ourselves.
- pywin32_ext_paths = ('win32', 'pythonwin')
- pywin32_ext_paths = [os.path.join(sys._MEIPASS, pywin32_ext_path) for pywin32_ext_path in pywin32_ext_paths]
- pywin32_ext_paths = [path for path in pywin32_ext_paths if os.path.isdir(path)]
- sys.path.extend(pywin32_ext_paths)
-
- # Additional handling of `pywin32_system32` DLL directory
- pywin32_system32_path = os.path.join(sys._MEIPASS, 'pywin32_system32')
-
- if not os.path.isdir(pywin32_system32_path):
- # Either pywin32 is not collected, or we are dealing with version that does not use the pywin32_system32
- # sub-directory. In the latter case, the pywin32 DLLs should be in `sys._MEIPASS`, and nothing
- # else needs to be done here.
- return
-
- # Add the DLL directory to `sys.path`.
- # This is necessary because `__import_pywin32_system_module__` from `pywintypes` module assumes that in a frozen
- # application, the pywin32 DLLs (`pythoncom3X.dll` and `pywintypes3X.dll`) that are normally found in
- # `pywin32_system32` sub-directory in `sys.path` (site-packages, really) are located directly in `sys.path`.
- # This obviously runs afoul of our attempts at preserving the directory layout and placing them in the
- # `pywin32_system32` sub-directory instead of the top-level application directory.
- sys.path.append(pywin32_system32_path)
-
- # Add the DLL directory to DLL search path using os.add_dll_directory().
- # This allows extensions from win32 directory (e.g., win32api, win32crypt) to be loaded on their own without
- # importing pywintypes first. The extensions are linked against pywintypes3X.dll.
- os.add_dll_directory(pywin32_system32_path)
-
- # Add the DLL directory to PATH. This is necessary under certain versions of
- # Anaconda python, where `os.add_dll_directory` does not work.
- path = os.environ.get('PATH', None)
- if not path:
- path = pywin32_system32_path
- else:
- path = pywin32_system32_path + os.pathsep + path
- os.environ['PATH'] = path
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/log.py b/venv/lib/python3.12/site-packages/PyInstaller/log.py
deleted file mode 100755
index 7c5b5ce..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/log.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Logging module for PyInstaller.
-"""
-
-__all__ = ['getLogger', 'INFO', 'WARN', 'DEBUG', 'TRACE', 'ERROR', 'FATAL', 'DEPRECATION']
-
-import os
-import logging
-from logging import DEBUG, ERROR, FATAL, INFO, WARN, getLogger
-
-TRACE = DEBUG - 5
-logging.addLevelName(TRACE, 'TRACE')
-DEPRECATION = WARN + 5
-logging.addLevelName(DEPRECATION, 'DEPRECATION')
-LEVELS = {
- 'TRACE': TRACE,
- 'DEBUG': DEBUG,
- 'INFO': INFO,
- 'WARN': WARN,
- 'DEPRECATION': DEPRECATION,
- 'ERROR': ERROR,
- 'FATAL': FATAL,
-}
-
-FORMAT = '%(relativeCreated)d %(levelname)s: %(message)s'
-_env_level = os.environ.get("PYI_LOG_LEVEL", "INFO")
-try:
- level = LEVELS[_env_level.upper()]
-except KeyError:
- raise SystemExit(f"ERROR: Invalid PYI_LOG_LEVEL value '{_env_level}'. Should be one of {list(LEVELS)}.")
-logging.basicConfig(format=FORMAT, level=level)
-logger = getLogger('PyInstaller')
-
-
-def __add_options(parser):
- parser.add_argument(
- '--log-level',
- choices=LEVELS,
- metavar="LEVEL",
- dest='loglevel',
- help='Amount of detail in build-time console messages. LEVEL may be one of %s (default: INFO). '
- 'Also settable via and overrides the PYI_LOG_LEVEL environment variable.' % ', '.join(LEVELS),
- )
-
-
-def __process_options(parser, opts):
- if opts.loglevel:
- try:
- level = opts.loglevel.upper()
- _level = LEVELS[level]
- except KeyError:
- parser.error('Unknown log level `%s`' % opts.loglevel)
- logger.setLevel(_level)
- os.environ["PYI_LOG_LEVEL"] = level
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index dcd7f93..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/conftest.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/conftest.cpython-312.pyc
deleted file mode 100644
index 33e2e64..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/conftest.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/misc.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/misc.cpython-312.pyc
deleted file mode 100644
index 08f1a24..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/misc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/osx.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/osx.cpython-312.pyc
deleted file mode 100644
index 3a06991..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/osx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/run_tests.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/run_tests.cpython-312.pyc
deleted file mode 100644
index da62c7a..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/run_tests.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/tests.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/tests.cpython-312.pyc
deleted file mode 100644
index 58484b6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/__pycache__/tests.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__init__.py
deleted file mode 100755
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index a7e512d..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/archive_viewer.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/archive_viewer.cpython-312.pyc
deleted file mode 100644
index 74e7a01..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/archive_viewer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/bindepend.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/bindepend.cpython-312.pyc
deleted file mode 100644
index af52f05..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/bindepend.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/grab_version.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/grab_version.cpython-312.pyc
deleted file mode 100644
index 71e01fd..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/grab_version.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/makespec.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/makespec.cpython-312.pyc
deleted file mode 100644
index 9938358..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/makespec.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/set_version.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/set_version.cpython-312.pyc
deleted file mode 100644
index 0689c61..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/__pycache__/set_version.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/archive_viewer.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/archive_viewer.py
deleted file mode 100755
index 24d3fc5..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/archive_viewer.py
+++ /dev/null
@@ -1,271 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Viewer for PyInstaller-generated archives.
-"""
-
-import argparse
-import os
-import sys
-
-import PyInstaller.log
-from PyInstaller.archive.readers import CArchiveReader, ZlibArchiveReader
-
-try:
- from argcomplete import autocomplete
-except ImportError:
-
- def autocomplete(parser):
- return None
-
-
-class ArchiveViewer:
- def __init__(self, filename, interactive_mode, recursive_mode, brief_mode):
- self.filename = filename
- self.interactive_mode = interactive_mode
- self.recursive_mode = recursive_mode
- self.brief_mode = brief_mode
-
- self.stack = []
-
- # Recursive mode implies non-interactive mode
- if self.recursive_mode:
- self.interactive_mode = False
-
- def main(self):
- # Open top-level (initial) archive
- archive = self._open_toplevel_archive(self.filename)
- archive_name = os.path.basename(self.filename)
- self.stack.append((archive_name, archive))
-
- # Not-interactive mode
- if not self.interactive_mode:
- return self._non_interactive_processing()
-
- # Interactive mode; show top-level archive
- self._show_archive_contents(archive_name, archive)
-
- # Interactive command processing
- while True:
- # Read command
- try:
- tokens = input('? ').split(None, 1)
- except EOFError:
- # Ctrl-D
- print(file=sys.stderr) # Clear line.
- break
-
- # Print usage?
- if not tokens:
- self._print_usage()
- continue
-
- # Process
- command = tokens[0].upper()
- if command == 'Q':
- break
- elif command == 'U':
- self._move_up_the_stack()
- elif command == 'O':
- self._open_embedded_archive(*tokens[1:])
- elif command == 'X':
- self._extract_file(*tokens[1:])
- elif command == 'S':
- archive_name, archive = self.stack[-1]
- self._show_archive_contents(archive_name, archive)
- else:
- self._print_usage()
-
- def _non_interactive_processing(self):
- archive_count = 0
-
- while self.stack:
- archive_name, archive = self.stack.pop()
- archive_count += 1
-
- if archive_count > 1:
- print("")
- self._show_archive_contents(archive_name, archive)
-
- if not self.recursive_mode:
- continue
-
- # Scan for embedded archives
- if isinstance(archive, CArchiveReader):
- for name, (*_, typecode) in archive.toc.items():
- if typecode == 'z':
- try:
- embedded_archive = archive.open_embedded_archive(name)
- except Exception as e:
- print(f"Could not open embedded archive {name!r}: {e}", file=sys.stderr)
- self.stack.append((name, embedded_archive))
-
- def _print_usage(self):
- print("U: go up one level", file=sys.stderr)
- print("O : open embedded archive with given name", file=sys.stderr)
- print("X : extract file with given name", file=sys.stderr)
- print("S: list the contents of current archive again", file=sys.stderr)
- print("Q: quit", file=sys.stderr)
-
- def _move_up_the_stack(self):
- if len(self.stack) > 1:
- self.stack.pop()
- archive_name, archive = self.stack[-1]
- self._show_archive_contents(archive_name, archive)
- else:
- print("Already in the top archive!", file=sys.stderr)
-
- def _open_toplevel_archive(self, filename):
- if not os.path.isfile(filename):
- print(f"Archive {filename} does not exist!", file=sys.stderr)
- sys.exit(1)
-
- if filename[-4:].lower() == '.pyz':
- return ZlibArchiveReader(filename)
- return CArchiveReader(filename)
-
- def _open_embedded_archive(self, archive_name=None):
- # Ask for name if not provided
- if not archive_name:
- archive_name = input('Open name? ')
- archive_name = archive_name.strip()
-
- # No name given; abort
- if not archive_name:
- return
-
- # Open the embedded archive
- _, parent_archive = self.stack[-1]
-
- if not hasattr(parent_archive, 'open_embedded_archive'):
- print("Archive does not support embedded archives!", file=sys.stderr)
- return
-
- try:
- archive = parent_archive.open_embedded_archive(archive_name)
- except Exception as e:
- print(f"Could not open embedded archive {archive_name!r}: {e}", file=sys.stderr)
- return
-
- # Add to stack and display contents
- self.stack.append((archive_name, archive))
- self._show_archive_contents(archive_name, archive)
-
- def _extract_file(self, name=None):
- # Ask for name if not provided
- if not name:
- name = input('Extract name? ')
- name = name.strip()
-
- # Archive
- archive_name, archive = self.stack[-1]
-
- # Retrieve data
- try:
- if isinstance(archive, CArchiveReader):
- data = archive.extract(name)
- elif isinstance(archive, ZlibArchiveReader):
- data = archive.extract(name, raw=True)
- if data is None:
- raise ValueError("Entry has no associated data!")
- else:
- raise NotImplementedError(f"Extraction from archive type {type(archive)} not implemented!")
- except Exception as e:
- print(f"Failed to extract data for entry {name!r} from {archive_name!r}: {e}", file=sys.stderr)
- return
-
- # Write to file
- filename = input('Output filename? ')
- if not filename:
- print(repr(data))
- else:
- with open(filename, 'wb') as fp:
- fp.write(data)
-
- def _show_archive_contents(self, archive_name, archive):
- if isinstance(archive, CArchiveReader):
- if archive.options:
- print(f"Options in {archive_name!r} (PKG/CArchive):")
- for option in archive.options:
- print(f" {option}")
- print(f"Contents of {archive_name!r} (PKG/CArchive):")
- if self.brief_mode:
- for name in archive.toc.keys():
- print(f" {name}")
- else:
- print(" position, length, uncompressed_length, is_compressed, typecode, name")
- for name, (position, length, uncompressed_length, is_compressed, typecode) in archive.toc.items():
- print(f" {position}, {length}, {uncompressed_length}, {is_compressed}, {typecode!r}, {name!r}")
- elif isinstance(archive, ZlibArchiveReader):
- print(f"Contents of {archive_name!r} (PYZ):")
- if self.brief_mode:
- for name in archive.toc.keys():
- print(f" {name}")
- else:
- print(" typecode, position, length, name")
- for name, (typecode, position, length) in archive.toc.items():
- print(f" {typecode}, {position}, {length}, {name!r}")
- else:
- print(f"Contents of {name} (unknown)")
- print(f"FIXME: implement content listing for archive type {type(archive)}!")
-
-
-def run():
- parser = argparse.ArgumentParser()
- parser.add_argument(
- '-l',
- '--list',
- default=False,
- action='store_true',
- dest='listing_mode',
- help='List the archive contents and exit (default: %(default)s).',
- )
- parser.add_argument(
- '-r',
- '--recursive',
- default=False,
- action='store_true',
- dest='recursive',
- help='Recursively print an archive log (default: %(default)s). Implies --list.',
- )
- parser.add_argument(
- '-b',
- '--brief',
- default=False,
- action='store_true',
- dest='brief',
- help='When displaying archive contents, show only file names. (default: %(default)s).',
- )
- PyInstaller.log.__add_options(parser)
- parser.add_argument(
- 'filename',
- metavar='pyi_archive',
- help="PyInstaller archive to process.",
- )
-
- autocomplete(parser)
- args = parser.parse_args()
- PyInstaller.log.__process_options(parser, args)
-
- try:
- viewer = ArchiveViewer(
- filename=args.filename,
- interactive_mode=not args.listing_mode,
- recursive_mode=args.recursive,
- brief_mode=args.brief,
- )
- viewer.main()
- except KeyboardInterrupt:
- raise SystemExit("Aborted by user.")
-
-
-if __name__ == '__main__':
- run()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/bindepend.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/bindepend.py
deleted file mode 100755
index ebd5fdf..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/bindepend.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Show dll dependencies of executable files or other dynamic libraries.
-"""
-
-import argparse
-import glob
-
-import PyInstaller.depend.bindepend
-import PyInstaller.log
-
-try:
- from argcomplete import autocomplete
-except ImportError:
-
- def autocomplete(parser):
- return None
-
-
-def run():
- parser = argparse.ArgumentParser()
- PyInstaller.log.__add_options(parser)
- parser.add_argument(
- 'filenames',
- nargs='+',
- metavar='executable-or-dynamic-library',
- help="executables or dynamic libraries for which the dependencies should be shown",
- )
-
- autocomplete(parser)
- args = parser.parse_args()
- PyInstaller.log.__process_options(parser, args)
-
- # Suppress all informative messages from the dependency code.
- PyInstaller.log.getLogger('PyInstaller.build.bindepend').setLevel(PyInstaller.log.WARN)
-
- try:
- for input_filename_or_pattern in args.filenames:
- for filename in glob.glob(input_filename_or_pattern):
- print(f"{filename}:")
- for lib_name, lib_path in sorted(PyInstaller.depend.bindepend.get_imports(filename)):
- print(f" {lib_name} => {lib_path}")
- print("")
- except KeyboardInterrupt:
- raise SystemExit("Aborted by user request.")
-
-
-if __name__ == '__main__':
- run()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/grab_version.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/grab_version.py
deleted file mode 100755
index f8e1193..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/grab_version.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import argparse
-import codecs
-
-try:
- from argcomplete import autocomplete
-except ImportError:
-
- def autocomplete(parser):
- return None
-
-
-def run():
- parser = argparse.ArgumentParser(
- epilog=(
- 'The printed output may be saved to a file, edited and used as the input for a version resource on any of '
- 'the executable targets in a PyInstaller .spec file.'
- )
- )
- parser.add_argument(
- 'exe_file',
- metavar='exe-file',
- help="full pathname of a Windows executable",
- )
- parser.add_argument(
- 'out_filename',
- metavar='out-filename',
- nargs='?',
- default='file_version_info.txt',
- help="filename where the grabbed version info will be saved",
- )
-
- autocomplete(parser)
- args = parser.parse_args()
-
- try:
- from PyInstaller.utils.win32 import versioninfo
- info = versioninfo.read_version_info_from_executable(args.exe_file)
- if not info:
- raise SystemExit("ERROR: VersionInfo resource not found in exe")
- with codecs.open(args.out_filename, 'w', 'utf-8') as fp:
- fp.write(str(info))
- print(f"Version info written to: {args.out_filename!r}")
- except KeyboardInterrupt:
- raise SystemExit("Aborted by user request.")
-
-
-if __name__ == '__main__':
- run()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/makespec.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/makespec.py
deleted file mode 100755
index 6225759..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/makespec.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Automatically build a spec file containing the description of the project.
-"""
-
-import argparse
-import os
-
-import PyInstaller.building.makespec
-import PyInstaller.log
-
-try:
- from argcomplete import autocomplete
-except ImportError:
-
- def autocomplete(parser):
- return None
-
-
-def generate_parser():
- p = argparse.ArgumentParser()
- PyInstaller.building.makespec.__add_options(p)
- PyInstaller.log.__add_options(p)
- p.add_argument(
- 'scriptname',
- nargs='+',
- )
- return p
-
-
-def run():
- p = generate_parser()
- autocomplete(p)
- args = p.parse_args()
- PyInstaller.log.__process_options(p, args)
-
- # Split pathex by using the path separator.
- temppaths = args.pathex[:]
- args.pathex = []
- for p in temppaths:
- args.pathex.extend(p.split(os.pathsep))
-
- try:
- name = PyInstaller.building.makespec.main(args.scriptname, **vars(args))
- print('Wrote %s.' % name)
- print('Now run pyinstaller.py to build the executable.')
- except KeyboardInterrupt:
- raise SystemExit("Aborted by user request.")
-
-
-if __name__ == '__main__':
- run()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/set_version.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/set_version.py
deleted file mode 100755
index b936692..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/cliutils/set_version.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import argparse
-import os
-
-try:
- from argcomplete import autocomplete
-except ImportError:
-
- def autocomplete(parser):
- return None
-
-
-def run():
- parser = argparse.ArgumentParser()
- parser.add_argument(
- 'info_file',
- metavar='info-file',
- help="text file containing version info",
- )
- parser.add_argument(
- 'exe_file',
- metavar='exe-file',
- help="full pathname of a Windows executable",
- )
- autocomplete(parser)
- args = parser.parse_args()
-
- info_file = os.path.abspath(args.info_file)
- exe_file = os.path.abspath(args.exe_file)
-
- try:
- from PyInstaller.utils.win32 import versioninfo
- info = versioninfo.load_version_info_from_text_file(info_file)
- versioninfo.write_version_info_to_executable(exe_file, info)
- print(f"Version info written to: {exe_file!r}")
- except KeyboardInterrupt:
- raise SystemExit("Aborted by user request.")
-
-
-if __name__ == '__main__':
- run()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/conftest.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/conftest.py
deleted file mode 100755
index a62b15d..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/conftest.py
+++ /dev/null
@@ -1,578 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import contextlib
-import copy
-import glob
-import logging
-import os
-import re
-import shutil
-import subprocess
-import sys
-import time
-
-# Set a handler for the root-logger to inhibit 'basicConfig()' (called in PyInstaller.log) is setting up a stream
-# handler writing to stderr. This avoids log messages to be written (and captured) twice: once on stderr and
-# once by pytests's caplog.
-logging.getLogger().addHandler(logging.NullHandler())
-
-# psutil is used for process tree clean-up on time-out when running the test frozen application. If unavailable
-# (for example, on cygwin), we fall back to trying to terminate only the main application process.
-try:
- import psutil # noqa: E402
-except ModuleNotFoundError:
- psutil = None
-
-import pytest # noqa: E402
-
-from PyInstaller import __main__ as pyi_main # noqa: E402
-from PyInstaller import configure # noqa: E402
-from PyInstaller.compat import is_cygwin, is_darwin, is_win # noqa: E402
-from PyInstaller.depend.analysis import initialize_modgraph # noqa: E402
-from PyInstaller.archive.readers import pkg_archive_contents # noqa: E402
-from PyInstaller.utils.tests import gen_sourcefile # noqa: E402
-from PyInstaller.utils.win32 import winutils # noqa: E402
-
-# Timeout for running the executable. If executable does not exit in this time, it is interpreted as a test failure.
-_EXE_TIMEOUT = 3 * 60 # In sec.
-# All currently supported platforms
-SUPPORTED_OSES = {"darwin", "linux", "win32"}
-# Have pyi_builder fixure clean-up the temporary directories of successful tests. Controlled by environment variable.
-_PYI_BUILDER_CLEANUP = os.environ.get("PYI_BUILDER_CLEANUP", "1") == "1"
-
-# Fixtures
-# --------
-
-
-def pytest_runtest_setup(item):
- """
- Markers to skip tests based on the current platform.
- https://pytest.org/en/stable/example/markers.html#marking-platform-specific-tests-with-pytest
-
- Available markers: see pytest.ini markers
- - @pytest.mark.darwin (macOS)
- - @pytest.mark.linux (GNU/Linux)
- - @pytest.mark.win32 (Windows)
- """
- supported_platforms = SUPPORTED_OSES.intersection(mark.name for mark in item.iter_markers())
- plat = sys.platform
- if supported_platforms and plat not in supported_platforms:
- pytest.skip(f"does not run on {plat}")
-
-
-@pytest.hookimpl(tryfirst=True, hookwrapper=True)
-def pytest_runtest_makereport(item, call):
- # Execute all other hooks to obtain the report object.
- outcome = yield
- rep = outcome.get_result()
-
- # Set a report attribute for each phase of a call, which can be "setup", "call", "teardown".
- setattr(item, f"rep_{rep.when}", rep)
-
-
-# Return the base directory which contains the current test module.
-def _get_base_dir(request):
- return request.path.resolve().parent # pathlib.Path instance
-
-
-# Directory with Python scripts for functional tests.
-def _get_script_dir(request):
- return _get_base_dir(request) / 'scripts'
-
-
-# Directory with testing modules used in some tests.
-def _get_modules_dir(request):
- return _get_base_dir(request) / 'modules'
-
-
-# Directory with .toc log files.
-def _get_logs_dir(request):
- return _get_base_dir(request) / 'logs'
-
-
-# Return the directory where data for tests is located.
-def _get_data_dir(request):
- return _get_base_dir(request) / 'data'
-
-
-# Directory with .spec files used in some tests.
-def _get_spec_dir(request):
- return _get_base_dir(request) / 'specs'
-
-
-@pytest.fixture
-def spec_dir(request):
- """
- Return the directory where the test spec-files reside.
- """
- return _get_spec_dir(request)
-
-
-@pytest.fixture
-def script_dir(request):
- """
- Return the directory where the test scripts reside.
- """
- return _get_script_dir(request)
-
-
-# A fixture that copies test's data directory into test's temporary directory. The data directory is assumed to be
-# `data/{test-name}` found next to the .py file that contains test.
-@pytest.fixture
-def data_dir(
- # The request object for this test. Used to infer name of the test and location of the source .py file.
- # See
- # https://pytest.org/latest/builtin.html#_pytest.python.FixtureRequest
- # and
- # https://pytest.org/latest/fixture.html#fixtures-can-introspect-the-requesting-test-context.
- request,
- # The tmp_path object for this test. See: https://pytest.org/latest/tmp_path.html.
- tmp_path
-):
- # Strip the leading 'test_' from the test's name.
- test_name = request.function.__name__[5:]
-
- # Copy to data dir and return the path.
- source_data_dir = _get_data_dir(request) / test_name
- tmp_data_dir = tmp_path / 'data'
- # Copy the data.
- shutil.copytree(source_data_dir, tmp_data_dir)
- # Return the temporary data directory, so that the copied data can now be used.
- return tmp_data_dir
-
-
-class AppBuilder:
- def __init__(self, tmp_path, request, bundle_mode):
- self._tmp_path = tmp_path
- self._request = request
- self._mode = bundle_mode
- self._spec_dir = tmp_path
- self._dist_dir = tmp_path / 'dist'
- self._build_dir = tmp_path / 'build'
- self._is_spec = False
-
- def test_spec(self, specfile, *args, **kwargs):
- """
- Test a Python script that is referenced in the supplied .spec file.
- """
- __tracebackhide__ = True
- specfile = _get_spec_dir(self._request) / specfile
- # 'test_script' should handle .spec properly as script.
- self._is_spec = True
- return self.test_script(specfile, *args, **kwargs)
-
- def test_source(self, source, *args, **kwargs):
- """
- Test a Python script given as source code.
-
- The source will be written into a file named like the test-function. This file will then be passed to
- `test_script`. If you need other related file, e.g., as `.toc`-file for testing the content, put it at at the
- normal place. Just mind to take the basnename from the test-function's name.
-
- :param script: Source code to create executable from. This will be saved into a temporary file which is then
- passed on to `test_script`.
-
- :param test_id: Test-id for parametrized tests. If given, it will be appended to the script filename, separated
- by two underscores.
-
- All other arguments are passed straight on to `test_script`.
- """
- __tracebackhide__ = True
- # For parametrized test append the test-id.
- scriptfile = gen_sourcefile(self._tmp_path, source, kwargs.setdefault('test_id'))
- del kwargs['test_id']
- return self.test_script(scriptfile, *args, **kwargs)
-
- def _display_message(self, step_name, message):
- # Print the given message to both stderr and stdout, and it with APP-BUILDER to make it clear where it
- # originates from.
- print(f'[APP-BUILDER:{step_name}] {message}', file=sys.stdout)
- print(f'[APP-BUILDER:{step_name}] {message}', file=sys.stderr)
-
- def test_script(
- self, script, pyi_args=None, app_name=None, app_args=None, runtime=None, run_from_path=False, **kwargs
- ):
- """
- Main method to wrap all phases of testing a Python script.
-
- :param script: Name of script to create executable from.
- :param pyi_args: Additional arguments to pass to PyInstaller when creating executable.
- :param app_name: Name of the executable. This is equivalent to argument --name=APPNAME.
- :param app_args: Additional arguments to pass to
- :param runtime: Time in seconds how long to keep executable running.
- :param toc_log: List of modules that are expected to be bundled with the executable.
- """
- __tracebackhide__ = True
-
- # Skip interactive tests (the ones with `runtime` set) if `psutil` is unavailable, as we need it to properly
- # clean up the process tree.
- if runtime and psutil is None:
- pytest.skip('Interactive tests require psutil for proper cleanup.')
-
- if pyi_args is None:
- pyi_args = []
- if app_args is None:
- app_args = []
-
- if app_name:
- if not self._is_spec:
- pyi_args.extend(['--name', app_name])
- else:
- # Derive name from script name.
- app_name = os.path.splitext(os.path.basename(script))[0]
-
- # Relative path means that a script from _script_dir is referenced.
- if not os.path.isabs(script):
- script = _get_script_dir(self._request) / script
- self.script = str(script) # might be a pathlib.Path at this point!
- assert os.path.exists(self.script), f'Script {self.script!r} not found.'
-
- self._display_message('TEST-SCRIPT', 'Starting build...')
- if not self._test_building(args=pyi_args):
- pytest.fail(f'Building of {script} failed.')
-
- self._display_message('TEST-SCRIPT', 'Build finished, now running executable...')
- self._test_executables(app_name, args=app_args, runtime=runtime, run_from_path=run_from_path, **kwargs)
- self._display_message('TEST-SCRIPT', 'Running executable finished.')
-
- def _test_executables(self, name, args, runtime, run_from_path, **kwargs):
- """
- Run created executable to make sure it works.
-
- Multipackage-tests generate more than one exe-file and all of them have to be run.
-
- :param args: CLI options to pass to the created executable.
- :param runtime: Time in seconds how long to keep the executable running.
-
- :return: Exit code of the executable.
- """
- __tracebackhide__ = True
- exes = self._find_executables(name)
- # Empty list means that PyInstaller probably failed to create any executable.
- assert exes != [], 'No executable file was found.'
- for exe in exes:
- # Try to find .toc log file. .toc log file has the same basename as exe file.
- toc_log = os.path.splitext(os.path.basename(exe))[0] + '.toc'
- toc_log = _get_logs_dir(self._request) / toc_log
- if toc_log.exists():
- if not self._examine_executable(exe, toc_log):
- pytest.fail(f'Matching .toc of {exe} failed.')
- retcode = self._run_executable(exe, args, run_from_path, runtime)
- if retcode != kwargs.get('retcode', 0):
- pytest.fail(f'Running exe {exe} failed with return-code {retcode}.')
-
- def _find_executables(self, name):
- """
- Search for all executables generated by the testcase.
-
- If the test-case is called e.g. 'test_multipackage1', this is searching for each of 'test_multipackage1.exe'
- and 'multipackage1_?.exe' in both one-file- and one-dir-mode.
-
- :param name: Name of the executable to look for.
-
- :return: List of executables
- """
- exes = []
- onedir_pt = str(self._dist_dir / name / name)
- onefile_pt = str(self._dist_dir / name)
- patterns = [
- onedir_pt,
- onefile_pt,
- # Multipackage one-dir
- onedir_pt + '_?',
- # Multipackage one-file
- onefile_pt + '_?'
- ]
- # For Windows append .exe extension to patterns.
- if is_win:
- patterns = [pt + '.exe' for pt in patterns]
- # For macOS append pattern for .app bundles.
- if is_darwin:
- # e.g: ./dist/name.app/Contents/MacOS/name
- app_bundle_pt = str(self._dist_dir / f'{name}.app' / 'Contents' / 'MacOS' / name)
- patterns.append(app_bundle_pt)
- # Apply file patterns.
- for pattern in patterns:
- for prog in glob.glob(pattern):
- if os.path.isfile(prog):
- exes.append(prog)
- return exes
-
- def _run_executable(self, prog, args, run_from_path, runtime):
- """
- Run executable created by PyInstaller.
-
- :param args: CLI options to pass to the created executable.
- """
- # Run the test in a clean environment to make sure they're really self-contained.
- prog_env = copy.deepcopy(os.environ)
- prog_env['PATH'] = ''
- del prog_env['PATH']
- # For Windows we need to keep minimal PATH for successful running of some tests.
- if is_win:
- # Minimum Windows PATH is in most cases: C:\Windows\system32;C:\Windows
- prog_env['PATH'] = os.pathsep.join(winutils.get_system_path())
- # Same for Cygwin - if /usr/bin is not in PATH, cygwin1.dll cannot be discovered.
- if is_cygwin:
- prog_env['PATH'] = os.pathsep.join(['/usr/local/bin', '/usr/bin'])
- # On macOS, we similarly set up minimal PATH with system directories, in case utilities from there are used by
- # tested python code (for example, matplotlib >= 3.9.0 uses `system_profiler` that is found in /usr/sbin).
- if is_darwin:
- # The following paths are registered when application is launched via Finder, and are a subset of what is
- # typically available in the shell.
- prog_env['PATH'] = os.pathsep.join(['/usr/bin', '/bin', '/usr/sbin', '/sbin'])
-
- exe_path = prog
- if run_from_path:
- # Run executable in the temp directory. Add the directory containing the executable to $PATH. Basically,
- # pretend we are a shell executing the program from $PATH.
- prog_cwd = str(self._tmp_path)
- prog_name = os.path.basename(prog)
- prog_env['PATH'] = os.pathsep.join([prog_env.get('PATH', ''), os.path.dirname(prog)])
-
- else:
- # Run executable in the directory where it is.
- prog_cwd = os.path.dirname(prog)
- # The executable will be called with argv[0] as relative not absolute path.
- prog_name = os.path.join(os.curdir, os.path.basename(prog))
-
- args = [prog_name] + args
- # Using sys.stdout/sys.stderr for subprocess fixes printing messages in Windows command prompt. Py.test is then
- # able to collect stdout/sterr messages and display them if a test fails.
- return self._run_executable_(args, exe_path, prog_env, prog_cwd, runtime)
-
- def _run_executable_(self, args, exe_path, prog_env, prog_cwd, runtime):
- # Use psutil.Popen, if available; otherwise, fall back to subprocess.Popen
- popen_implementation = subprocess.Popen if psutil is None else psutil.Popen
-
- # Run the executable
- self._display_message('RUN-EXE', f'Running {exe_path!r}, args: {args!r}')
- start_time = time.time()
- process = popen_implementation(args, executable=exe_path, env=prog_env, cwd=prog_cwd)
-
- # Wait for the process to finish. If no run-time (= timeout) is specified, we expect the process to exit on
- # its own, and use global _EXE_TIMEOUT. If run-time is specified, we expect the application to be running
- # for at least the specified amount of time, which is useful in "interactive" test applications that are not
- # expected exit on their own.
- stdout = stderr = None
- try:
- timeout = runtime if runtime else _EXE_TIMEOUT
- stdout, stderr = process.communicate(timeout=timeout)
- elapsed = time.time() - start_time
- retcode = process.returncode
- self._display_message(
- 'RUN-EXE', f'Process exited on its own after {elapsed:.1f} seconds with return code {retcode}.'
- )
- except (subprocess.TimeoutExpired) if psutil is None else (psutil.TimeoutExpired, subprocess.TimeoutExpired):
- if runtime:
- # When 'runtime' is set, the expired timeout is a good sign that the executable was running successfully
- # for the specified time.
- self._display_message('RUN-EXE', f'Process reached expected run-time of {runtime} seconds.')
- retcode = 0
- else:
- # Executable is still running and it is not interactive. Clean up the process tree, and fail the test.
- self._display_message('RUN-EXE', f'Timeout while running executable (timeout: {timeout} seconds)!')
- retcode = 1
-
- if psutil is None:
- # We are using subprocess.Popen(). Without psutil, we have no access to process tree; this poses a
- # problem for onefile builds, where we would need to first kill the child (main application) process,
- # and let the onefile parent perform its cleanup. As a best-effort approach, we can first call
- # process.terminate(); on POSIX systems, this sends SIGTERM to the parent process, and in most
- # situations, the bootloader will forward it to the child process. Then wait 5 seconds, and call
- # process.kill() if necessary. On Windows, however, both process.terminate() and process.kill() do
- # the same. Therefore, we should avoid running "interactive" tests with expected run-time if we do
- # not have psutil available.
- try:
- self._display_message('RUN-EXE', 'Stopping the process using Popen.terminate()...')
- process.terminate()
- stdout, stderr = process.communicate(timeout=5)
- self._display_message('RUN-EXE', 'Process stopped.')
- except subprocess.TimeoutExpired:
- # Kill the process.
- try:
- self._display_message('RUN-EXE', 'Stopping the process using Popen.kill()...')
- process.kill()
- # process.communicate() waits for end-of-file, which may never arrive if there is a child
- # process still alive. Nothing we can really do about it here, so add a short timeout and
- # display a warning.
- stdout, stderr = process.communicate(timeout=1)
- self._display_message('RUN-EXE', 'Process stopped.')
- except subprocess.TimeoutExpired:
- self._display_message('RUN-EXE', 'Failed to stop the process (or its child process(es))!')
- else:
- # We are using psutil.Popen(). First, force-kill all child processes; in onefile mode, this includes
- # the application process, whose termination should trigger cleanup and exit of the parent onefile
- # process.
- self._display_message('RUN-EXE', 'Stopping child processes...')
- for child_process in list(process.children(recursive=True)):
- with contextlib.suppress(psutil.NoSuchProcess):
- self._display_message('RUN-EXE', f'Stopping child process {child_process.pid}...')
- child_process.kill()
-
- # Give the main process 5 seconds to exit on its own (to accommodate cleanup in onefile mode).
- try:
- self._display_message('RUN-EXE', f'Waiting for main process ({process.pid}) to stop...')
- stdout, stderr = process.communicate(timeout=5)
- self._display_message('RUN-EXE', 'Process stopped on its own.')
- except (psutil.TimeoutExpired, subprocess.TimeoutExpired):
- # End of the line - kill the main process.
- self._display_message('RUN-EXE', 'Stopping the process using Popen.kill()...')
- with contextlib.suppress(psutil.NoSuchProcess):
- process.kill()
- # Try to retrieve stdout/stderr - but keep a short timeout, just in case...
- try:
- stdout, stderr = process.communicate(timeout=1)
- self._display_message('RUN-EXE', 'Process stopped.')
- except (psutil.TimeoutExpired, subprocess.TimeoutExpire):
- self._display_message('RUN-EXE', 'Failed to stop the process (or its child process(es))!')
-
- self._display_message('RUN-EXE', f'Done! Return code: {retcode}')
-
- return retcode
-
- def _test_building(self, args):
- """
- Run building of test script.
-
- :param args: additional CLI options for PyInstaller.
-
- Return True if build succeeded False otherwise.
- """
- if self._is_spec:
- default_args = [
- '--distpath', str(self._dist_dir),
- '--workpath', str(self._build_dir),
- '--log-level', 'INFO',
- ] # yapf: disable
- else:
- default_args = [
- '--debug=bootloader',
- '--noupx',
- '--specpath', str(self._spec_dir),
- '--distpath', str(self._dist_dir),
- '--workpath', str(self._build_dir),
- '--path', str(_get_modules_dir(self._request)),
- '--log-level', 'INFO',
- ] # yapf: disable
-
- # Choose bundle mode.
- if self._mode == 'onedir':
- default_args.append('--onedir')
- elif self._mode == 'onefile':
- default_args.append('--onefile')
- # if self._mode is None then just the spec file was supplied.
-
- pyi_args = [self.script, *default_args, *args]
- # TODO: fix return code in running PyInstaller programmatically.
- PYI_CONFIG = configure.get_config()
- # Override CACHEDIR for PyInstaller; relocate cache into `self._tmp_path`.
- PYI_CONFIG['cachedir'] = str(self._tmp_path)
-
- pyi_main.run(pyi_args, PYI_CONFIG)
- retcode = 0
-
- return retcode == 0
-
- def _examine_executable(self, exe, toc_log):
- """
- Compare log files (now used mostly by multipackage test_name).
-
- :return: True if .toc files match
- """
- self._display_message('EXAMINE-EXE', f'Matching against TOC log: {str(toc_log)!r}')
- fname_list = pkg_archive_contents(exe)
- with open(toc_log, 'r', encoding='utf-8') as f:
- pattern_list = eval(f.read())
- # Alphabetical order of patterns.
- pattern_list.sort()
- missing = []
- for pattern in pattern_list:
- for fname in fname_list:
- if re.match(pattern, fname):
- self._display_message('EXAMINE-EXE', f'Entry found: {pattern!r} --> {fname!r}')
- break
- else:
- # No matching entry found
- missing.append(pattern)
- self._display_message('EXAMINE-EXE', f'Entry MISSING: {pattern!r}')
-
- # We expect the missing list to be empty
- return not missing
-
-
-# Scope 'session' should keep the object unchanged for whole tests. This fixture caches basic module graph dependencies
-# that are same for every executable.
-@pytest.fixture(scope='session')
-def pyi_modgraph():
- # Explicitly set the log level since the plugin `pytest-catchlog` (un-) sets the root logger's level to NOTSET for
- # the setup phase, which will lead to TRACE messages been written out.
- import PyInstaller.log as logging
- logging.logger.setLevel(logging.DEBUG)
- initialize_modgraph()
-
-
-# Run by default test as onedir and onefile.
-@pytest.fixture(params=['onedir', 'onefile'])
-def pyi_builder(tmp_path, monkeypatch, request, pyi_modgraph):
- # Save/restore environment variable PATH.
- monkeypatch.setenv('PATH', os.environ['PATH'])
- # PyInstaller or a test case might manipulate 'sys.path'. Reset it for every test.
- monkeypatch.syspath_prepend(None)
- # Set current working directory to
- monkeypatch.chdir(tmp_path)
- # Clean up configuration and force PyInstaller to do a clean configuration for another app/test. The value is same
- # as the original value.
- monkeypatch.setattr('PyInstaller.config.CONF', {'pathex': []})
-
- yield AppBuilder(tmp_path, request, request.param)
-
- # Clean up the temporary directory of a successful test
- if _PYI_BUILDER_CLEANUP and request.node.rep_setup.passed and request.node.rep_call.passed:
- if tmp_path.exists():
- shutil.rmtree(tmp_path, ignore_errors=True)
-
-
-# Fixture for .spec based tests. With .spec it does not make sense to differentiate onefile/onedir mode.
-@pytest.fixture
-def pyi_builder_spec(tmp_path, request, monkeypatch, pyi_modgraph):
- # Save/restore environment variable PATH.
- monkeypatch.setenv('PATH', os.environ['PATH'])
- # Set current working directory to
- monkeypatch.chdir(tmp_path)
- # PyInstaller or a test case might manipulate 'sys.path'. Reset it for every test.
- monkeypatch.syspath_prepend(None)
- # Clean up configuration and force PyInstaller to do a clean configuration for another app/test. The value is same
- # as the original value.
- monkeypatch.setattr('PyInstaller.config.CONF', {'pathex': []})
-
- yield AppBuilder(tmp_path, request, None)
-
- # Clean up the temporary directory of a successful test
- if _PYI_BUILDER_CLEANUP and request.node.rep_setup.passed and request.node.rep_call.passed:
- if tmp_path.exists():
- shutil.rmtree(tmp_path, ignore_errors=True)
-
-
-@pytest.fixture
-def pyi_windowed_builder(pyi_builder: AppBuilder):
- """A pyi_builder equivalent for testing --windowed applications."""
-
- # psutil.Popen() somehow bypasses an application's windowed/console mode so that any application built in
- # --windowed mode but invoked with psutil still receives valid std{in,out,err} handles and behaves exactly like
- # a console application. In short, testing windowed mode with psutil is a null test. We must instead use subprocess.
-
- def _run_executable_(args, exe_path, prog_env, prog_cwd, runtime):
- return subprocess.run([exe_path, *args], env=prog_env, cwd=prog_cwd, timeout=runtime).returncode
-
- pyi_builder._run_executable_ = _run_executable_
- yield pyi_builder
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__init__.py
deleted file mode 100755
index 0470263..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__init__.py
+++ /dev/null
@@ -1,1348 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-from __future__ import annotations
-
-import copy
-import os
-import textwrap
-import fnmatch
-from pathlib import Path
-from collections import deque
-from typing import Callable
-
-import packaging.requirements
-
-from PyInstaller import HOMEPATH, compat
-from PyInstaller import log as logging
-from PyInstaller.depend.imphookapi import PostGraphAPI
-from PyInstaller import isolated
-from PyInstaller.compat import importlib_metadata
-
-logger = logging.getLogger(__name__)
-
-# These extensions represent Python executables and should therefore be ignored when collecting data files.
-# NOTE: .dylib files are not Python executable and should not be in this list.
-PY_IGNORE_EXTENSIONS = set(compat.ALL_SUFFIXES)
-
-# Some hooks need to save some values. This is the dict that can be used for that.
-#
-# When running tests this variable should be reset before every test.
-#
-# For example the 'wx' module needs variable 'wxpubsub'. This tells PyInstaller which protocol of the wx module
-# should be bundled.
-hook_variables = {}
-
-
-def __exec_python_cmd(cmd, env=None, capture_stdout=True):
- """
- Executes an externally spawned Python interpreter. If capture_stdout is set to True, returns anything that was
- emitted in the standard output as a single string. Otherwise, returns the exit code.
- """
- # 'PyInstaller.config' cannot be imported as other top-level modules.
- from PyInstaller.config import CONF
- if env is None:
- env = {}
- # Update environment. Defaults to 'os.environ'
- pp_env = copy.deepcopy(os.environ)
- pp_env.update(env)
- # Prepend PYTHONPATH with pathex.
- # Some functions use some PyInstaller code in subprocess, so add PyInstaller HOMEPATH to sys.path as well.
- pp = os.pathsep.join(CONF['pathex'] + [HOMEPATH])
-
- # PYTHONPATH might be already defined in the 'env' argument or in the original 'os.environ'. Prepend it.
- if 'PYTHONPATH' in pp_env:
- pp = os.pathsep.join([pp_env.get('PYTHONPATH'), pp])
- pp_env['PYTHONPATH'] = pp
-
- if capture_stdout:
- txt = compat.exec_python(*cmd, env=pp_env)
- return txt.strip()
- else:
- return compat.exec_python_rc(*cmd, env=pp_env)
-
-
-def __exec_statement(statement, capture_stdout=True):
- statement = textwrap.dedent(statement)
- cmd = ['-c', statement]
- return __exec_python_cmd(cmd, capture_stdout=capture_stdout)
-
-
-def exec_statement(statement: str):
- """
- Execute a single Python statement in an externally-spawned interpreter, and return the resulting standard output
- as a string.
-
- Examples::
-
- tk_version = exec_statement("from _tkinter import TK_VERSION; print(TK_VERSION)")
-
- mpl_data_dir = exec_statement("import matplotlib; print(matplotlib.get_data_path())")
- datas = [ (mpl_data_dir, "") ]
-
- Notes:
- As of v5.0, usage of this function is discouraged in favour of the
- new :mod:`PyInstaller.isolated` module.
-
- """
- return __exec_statement(statement, capture_stdout=True)
-
-
-def exec_statement_rc(statement: str):
- """
- Executes a Python statement in an externally spawned interpreter, and returns the exit code.
- """
- return __exec_statement(statement, capture_stdout=False)
-
-
-def eval_statement(statement: str):
- """
- Execute a single Python statement in an externally-spawned interpreter, and :func:`eval` its output (if any).
-
- Example::
-
- databases = eval_statement('''
- import sqlalchemy.databases
- print(sqlalchemy.databases.__all__)
- ''')
- for db in databases:
- hiddenimports.append("sqlalchemy.databases." + db)
-
- Notes:
- As of v5.0, usage of this function is discouraged in favour of the
- new :mod:`PyInstaller.isolated` module.
-
- """
- txt = exec_statement(statement).strip()
- if not txt:
- # Return an empty string, which is "not true" but is iterable.
- return ''
- return eval(txt)
-
-
-@isolated.decorate
-def get_pyextension_imports(module_name: str):
- """
- Return list of modules required by binary (C/C++) Python extension.
-
- Python extension files ends with .so (Unix) or .pyd (Windows). It is almost impossible to analyze binary extension
- and its dependencies.
-
- Module cannot be imported directly.
-
- Let's at least try import it in a subprocess and observe the difference in module list from sys.modules.
-
- This function could be used for 'hiddenimports' in PyInstaller hooks files.
- """
- import sys
- import importlib
-
- original = set(sys.modules.keys())
-
- # When importing this module - sys.modules gets updated.
- importlib.import_module(module_name)
-
- # Find and return which new modules have been loaded.
- return list(set(sys.modules.keys()) - original - {module_name})
-
-
-def get_homebrew_path(formula: str = ''):
- """
- Return the homebrew path to the requested formula, or the global prefix when called with no argument.
-
- Returns the path as a string or None if not found.
- """
- import subprocess
- brewcmd = ['brew', '--prefix']
- path = None
- if formula:
- brewcmd.append(formula)
- dbgstr = 'homebrew formula "%s"' % formula
- else:
- dbgstr = 'homebrew prefix'
- try:
- path = subprocess.check_output(brewcmd).strip()
- logger.debug('Found %s at "%s"' % (dbgstr, path))
- except OSError:
- logger.debug('Detected homebrew not installed')
- except subprocess.CalledProcessError:
- logger.debug('homebrew formula "%s" not installed' % formula)
- if path:
- return path.decode('utf8') # macOS filenames are UTF-8
- else:
- return None
-
-
-def remove_prefix(string: str, prefix: str):
- """
- This function removes the given prefix from a string, if the string does indeed begin with the prefix; otherwise,
- it returns the original string.
- """
- if string.startswith(prefix):
- return string[len(prefix):]
- else:
- return string
-
-
-def remove_suffix(string: str, suffix: str):
- """
- This function removes the given suffix from a string, if the string does indeed end with the suffix; otherwise,
- it returns the original string.
- """
- # Special case: if suffix is empty, string[:0] returns ''. So, test for a non-empty suffix.
- if suffix and string.endswith(suffix):
- return string[:-len(suffix)]
- else:
- return string
-
-
-# TODO: Do we really need a helper for this? This is pretty trivially obvious.
-def remove_file_extension(filename: str):
- """
- This function returns filename without its extension.
-
- For Python C modules it removes even whole '.cpython-34m.so' etc.
- """
- for suff in compat.EXTENSION_SUFFIXES:
- if filename.endswith(suff):
- return filename[0:filename.rfind(suff)]
- # Fallback to ordinary 'splitext'.
- return os.path.splitext(filename)[0]
-
-
-def can_import_module(module_name: str):
- """
- Check if the specified module can be imported.
-
- Intended as a silent module availability check, as it does not print ModuleNotFoundError traceback to stderr when
- the module is unavailable.
-
- Parameters
- ----------
- module_name : str
- Fully-qualified name of the module.
-
- Returns
- ----------
- bool
- Boolean indicating whether the module can be imported or not.
- """
-
- # Run the check in isolated sub-process, so we can gracefully handle cases when importing the module ends up
- # crashing python interpreter.
- @isolated.decorate
- def _can_import_module(module_name):
- try:
- __import__(module_name)
- return True
- except Exception:
- return False
-
- try:
- return _can_import_module(module_name)
- except isolated.SubprocessDiedError:
- return False
-
-
-# TODO: Replace most calls to exec_statement() with calls to this function.
-def get_module_attribute(module_name: str, attr_name: str):
- """
- Get the string value of the passed attribute from the passed module if this attribute is defined by this module
- _or_ raise `AttributeError` otherwise.
-
- Since modules cannot be directly imported during analysis, this function spawns a subprocess importing this module
- and returning the string value of this attribute in this module.
-
- Parameters
- ----------
- module_name : str
- Fully-qualified name of this module.
- attr_name : str
- Name of the attribute in this module to be retrieved.
-
- Returns
- ----------
- str
- String value of this attribute.
-
- Raises
- ----------
- AttributeError
- If this attribute is undefined.
- """
- @isolated.decorate
- def _get_module_attribute(module_name, attr_name):
- import importlib
- module = importlib.import_module(module_name)
- return getattr(module, attr_name)
-
- # Return AttributeError on any kind of errors, to preserve old behavior.
- try:
- return _get_module_attribute(module_name, attr_name)
- except Exception as e:
- raise AttributeError(f"Failed to retrieve attribute {attr_name} from module {module_name}") from e
-
-
-def get_module_file_attribute(package: str):
- """
- Get the absolute path to the specified module or package.
-
- Modules and packages *must not* be directly imported in the main process during the analysis. Therefore, to
- avoid leaking the imports, this function uses an isolated subprocess when it needs to import the module and
- obtain its ``__file__`` attribute.
-
- Parameters
- ----------
- package : str
- Fully-qualified name of module or package.
-
- Returns
- ----------
- str
- Absolute path of this module.
- """
- # First, try to use 'importlib.util.find_spec' and obtain loader from the spec (and filename from the loader).
- # It is the fastest way, but does not work on certain modules in pywin32 that replace all module attributes with
- # those of the .dll. In addition, we need to avoid it for submodules/subpackages, because it ends up importing
- # their parent package, which would cause an import leak during the analysis.
- filename: str | None = None
- if '.' not in package:
- try:
- import importlib.util
- loader = importlib.util.find_spec(package).loader
- filename = loader.get_filename(package)
- # Apparently in the past, ``None`` could be returned for built-in ``datetime`` module. Just in case this
- # is still possible, return only if filename is valid.
- if filename:
- return filename
- except (ImportError, AttributeError, TypeError, ValueError):
- pass
-
- # Second attempt: try to obtain module/package's __file__ attribute in an isolated subprocess.
- @isolated.decorate
- def _get_module_file_attribute(package):
- # First, try to use 'importlib.util.find_spec' and obtain loader from the spec (and filename from the loader).
- # This should return the filename even if the module or package cannot be imported (e.g., a C-extension module
- # with missing dependencies).
- try:
- import importlib.util
- loader = importlib.util.find_spec(package).loader
- filename = loader.get_filename(package)
- # Safe-guard against ``None`` being returned (see comment in the non-isolated codepath).
- if filename:
- return filename
- except (ImportError, AttributeError, TypeError, ValueError):
- pass
-
- # Fall back to import attempt
- import importlib
- p = importlib.import_module(package)
- return p.__file__
-
- # The old behavior was to return ImportError (and that is what the test are also expecting...).
- try:
- filename = _get_module_file_attribute(package)
- except Exception as e:
- raise ImportError(f"Failed to obtain the __file__ attribute of package/module {package}!") from e
-
- return filename
-
-
-def get_pywin32_module_file_attribute(module_name):
- """
- Get the absolute path of the PyWin32 DLL specific to the PyWin32 module with the passed name (`pythoncom`
- or `pywintypes`).
-
- On import, each PyWin32 module:
-
- * Imports a DLL specific to that module.
- * Overwrites the values of all module attributes with values specific to that DLL. This includes that module's
- `__file__` attribute, which then provides the absolute path of that DLL.
-
- This function imports the module in isolated subprocess and retrieves its `__file__` attribute.
- """
-
- # NOTE: we cannot use `get_module_file_attribute` as it does not account for the __file__ rewriting magic
- # done by the module. Use `get_module_attribute` instead.
- return get_module_attribute(module_name, '__file__')
-
-
-def check_requirement(requirement: str):
- """
- Check if a :pep:`0508` requirement is satisfied. Usually used to check if a package distribution is installed,
- or if it is installed and satisfies the specified version requirement.
-
- Parameters
- ----------
- requirement : str
- Requirement string in :pep:`0508` format.
-
- Returns
- ----------
- bool
- Boolean indicating whether the requirement is satisfied or not.
-
- Examples
- --------
-
- ::
-
- # Assume Pillow 10.0.0 is installed.
- >>> from PyInstaller.utils.hooks import check_requirement
- >>> check_requirement('Pillow')
- True
- >>> check_requirement('Pillow < 9.0')
- False
- >>> check_requirement('Pillow >= 9.0, < 11.0')
- True
- """
- parsed_requirement = packaging.requirements.Requirement(requirement)
-
- # Fetch the actual version of the specified dist
- try:
- version = importlib_metadata.version(parsed_requirement.name)
- except importlib_metadata.PackageNotFoundError:
- return False # Not available at all
-
- # If specifier is not given, the only requirement is that dist is available
- if not parsed_requirement.specifier:
- return True
-
- # Parse specifier, and compare version. Enable pre-release matching,
- # because we need "package >= 2.0.0" to match "2.5.0b1".
- return parsed_requirement.specifier.contains(version, prereleases=True)
-
-
-# Keep the `is_module_satisfies` as an alias for backwards compatibility with existing hooks. The old fallback
-# to module version check does not work any more, though.
-def is_module_satisfies(
- requirements: str,
- version: None = None,
- version_attr: None = None,
-):
- """
- A compatibility wrapper for :func:`check_requirement`, intended for backwards compatibility with existing hooks.
-
- In contrast to original implementation from PyInstaller < 6, this implementation only checks the specified
- :pep:`0508` requirement string; i.e., it tries to retrieve the distribution metadata, and compare its version
- against optional version specifier(s). It does not attempt to fall back to checking the module's version attribute,
- nor does it support ``version`` and ``version_attr`` arguments.
-
- Parameters
- ----------
- requirements : str
- Requirements string passed to the :func:`check_requirement`.
- version : None
- Deprecated and unsupported. Must be ``None``.
- version_attr : None
- Deprecated and unsupported. Must be ``None``.
-
- Returns
- ----------
- bool
- Boolean indicating whether the requirement is satisfied or not.
-
- Raises
- ----------
- ValueError
- If either ``version`` or ``version_attr`` are specified and are not None.
- """
- if version is not None:
- raise ValueError("Calling is_module_satisfies with version argument is not supported anymore.")
- if version_attr is not None:
- raise ValueError("Calling is_module_satisfies with version argument_attr is not supported anymore.")
- return check_requirement(requirements)
-
-
-def is_package(module_name: str):
- """
- Check if a Python module is really a module or is a package containing other modules, without importing anything
- in the main process.
-
- :param module_name: Module name to check.
- :return: True if module is a package else otherwise.
- """
- def _is_package(module_name: str):
- """
- Determines whether the given name represents a package or not. If the name represents a top-level module or
- a package, it is not imported. If the name represents a sub-module or a sub-package, its parent is imported.
- In such cases, this function should be called from an isolated suprocess.
-
- NOTE: the fallback check for `__init__.py` is there because `_distutils_hack.DistutilsMetaFinder` from
- `setuptools` does not set spec.submodule_search_locations for `distutils` / `setuptools._distutils` even though
- it is a package. The alternative would be to always perform full import, and check for the `__path__` attribute,
- but that would also always require full isolation.
- """
- try:
- import importlib.util
- spec = importlib.util.find_spec(module_name)
- return bool(spec.submodule_search_locations) or spec.origin.endswith('__init__.py')
- except Exception:
- return False
-
- # For top-level packages/modules, we can perform check in the main process; otherwise, we need to isolate the
- # call to prevent import leaks in the main process.
- if '.' not in module_name:
- return _is_package(module_name)
- else:
- return isolated.call(_is_package, module_name)
-
-
-def get_all_package_paths(package: str):
- """
- Given a package name, return all paths associated with the package. Typically, packages have a single location
- path, but PEP 420 namespace packages may be split across multiple locations. Returns an empty list if the specified
- package is not found or is not a package.
- """
- def _get_package_paths(package: str):
- """
- Retrieve package path(s), as advertised by submodule_search_paths attribute of the spec obtained via
- importlib.util.find_spec(package). If the name represents a top-level package, the package is not imported.
- If the name represents a sub-module or a sub-package, its parent is imported. In such cases, this function
- should be called from an isolated suprocess. Returns an empty list if specified package is not found or is not
- a package.
- """
- try:
- import importlib.util
- spec = importlib.util.find_spec(package)
- if not spec or not spec.submodule_search_locations:
- return []
- return [str(path) for path in spec.submodule_search_locations]
- except Exception:
- return []
-
- # For top-level packages/modules, we can perform check in the main process; otherwise, we need to isolate the
- # call to prevent import leaks in the main process.
- if '.' not in package:
- pkg_paths = _get_package_paths(package)
- else:
- pkg_paths = isolated.call(_get_package_paths, package)
-
- return pkg_paths
-
-
-def package_base_path(package_path: str, package: str):
- """
- Given a package location path and package name, return the package base path, i.e., the directory in which the
- top-level package is located. For example, given the path ``/abs/path/to/python/libs/pkg/subpkg`` and
- package name ``pkg.subpkg``, the function returns ``/abs/path/to/python/libs``.
- """
- return remove_suffix(package_path, package.replace('.', os.sep)) # Base directory
-
-
-def get_package_paths(package: str):
- """
- Given a package, return the path to packages stored on this machine and also returns the path to this particular
- package. For example, if pkg.subpkg lives in /abs/path/to/python/libs, then this function returns
- ``(/abs/path/to/python/libs, /abs/path/to/python/libs/pkg/subpkg)``.
-
- NOTE: due to backwards compatibility, this function returns only one package path along with its base directory.
- In case of PEP 420 namespace package with multiple location, only first location is returned. To obtain all
- package paths, use the ``get_all_package_paths`` function and obtain corresponding base directories using the
- ``package_base_path`` helper.
- """
- pkg_paths = get_all_package_paths(package)
- if not pkg_paths:
- raise ValueError(f"Package '{package}' does not exist or is not a package!")
-
- if len(pkg_paths) > 1:
- logger.warning(
- "get_package_paths - package %s has multiple paths (%r); returning only first one!", package, pkg_paths
- )
-
- pkg_dir = pkg_paths[0]
- pkg_base = package_base_path(pkg_dir, package)
-
- return pkg_base, pkg_dir
-
-
-def collect_submodules(
- package: str,
- filter: Callable[[str], bool] = lambda name: True,
- on_error: str = "warn once",
-):
- """
- List all submodules of a given package.
-
- Arguments:
- package:
- An ``import``-able package.
- filter:
- Filter the submodules found: A callable that takes a submodule name and returns True if it should be
- included.
- on_error:
- The action to take when a submodule fails to import. May be any of:
-
- - raise: Errors are reraised and terminate the build.
- - warn: Errors are downgraded to warnings.
- - warn once: The first error issues a warning but all
- subsequent errors are ignored to minimise *stderr pollution*. This
- is the default.
- - ignore: Skip all errors. Don't warn about anything.
- Returns:
- All submodules to be assigned to ``hiddenimports`` in a hook.
-
- This function is intended to be used by hook scripts, not by main PyInstaller code.
-
- Examples::
-
- # Collect all submodules of Sphinx don't contain the word ``test``.
- hiddenimports = collect_submodules(
- "Sphinx", ``filter=lambda name: 'test' not in name)
-
- .. versionchanged:: 4.5
- Add the **on_error** parameter.
-
- """
- # Accept only strings as packages.
- if not isinstance(package, str):
- raise TypeError('package must be a str')
- if on_error not in ("ignore", "warn once", "warn", "raise"):
- raise ValueError(
- f"Invalid on-error action '{on_error}': Must be one of ('ignore', 'warn once', 'warn', 'raise')"
- )
-
- logger.debug('Collecting submodules for %s', package)
-
- # Skip a module which is not a package.
- if not is_package(package):
- logger.debug('collect_submodules - %s is not a package.', package)
- # If module is importable, return its name in the list, in order to keep behavior consistent with the
- # one we have for packages (i.e., we include the package in the list of returned names)
- if can_import_module(package):
- return [package]
- return []
-
- # Determine the filesystem path(s) to the specified package.
- package_submodules = []
-
- todo = deque()
- todo.append(package)
-
- with isolated.Python() as isolated_python:
- while todo:
- # Scan the given (sub)package
- name = todo.pop()
- modules, subpackages, on_error = isolated_python.call(_collect_submodules, name, on_error)
-
- # Add modules to the list of all submodules
- package_submodules += [module for module in modules if filter(module)]
-
- # Add sub-packages to deque for subsequent recursion
- for subpackage_name in subpackages:
- if filter(subpackage_name):
- todo.append(subpackage_name)
-
- package_submodules = sorted(package_submodules)
-
- logger.debug("collect_submodules - found submodules: %s", package_submodules)
- return package_submodules
-
-
-# This function is called in an isolated sub-process via `isolated.Python.call`.
-def _collect_submodules(name, on_error):
- import sys
- import pkgutil
- from traceback import format_exception_only
-
- from PyInstaller.utils.hooks import logger
-
- logger.debug("collect_submodules - scanning (sub)package %s", name)
-
- modules = []
- subpackages = []
-
- # Resolve package location(s)
- try:
- __import__(name)
- except Exception as ex:
- # Catch all errors and either raise, warn, or ignore them as determined by the *on_error* parameter.
- if on_error in ("warn", "warn once"):
- from PyInstaller.log import logger
- ex = "".join(format_exception_only(type(ex), ex)).strip()
- logger.warning(f"Failed to collect submodules for '{name}' because importing '{name}' raised: {ex}")
- if on_error == "warn once":
- on_error = "ignore"
- return modules, subpackages, on_error
- elif on_error == "raise":
- raise ImportError(f"Unable to load subpackage '{name}'.") from ex
-
- # Do not attempt to recurse into package if it did not make it into sys.modules.
- if name not in sys.modules:
- return modules, subpackages, on_error
-
- # Or if it does not have __path__ attribute.
- paths = getattr(sys.modules[name], '__path__', None) or []
- if not paths:
- return modules, subpackages, on_error
-
- # Package was successfully imported - include it in the list of modules.
- modules.append(name)
-
- # Iterate package contents
- logger.debug("collect_submodules - scanning (sub)package %s in location(s): %s", name, paths)
- for importer, name, ispkg in pkgutil.iter_modules(paths, name + '.'):
- if not ispkg:
- modules.append(name)
- else:
- subpackages.append(name)
-
- return modules, subpackages, on_error
-
-
-def is_module_or_submodule(name: str, mod_or_submod: str):
- """
- This helper function is designed for use in the ``filter`` argument of :func:`collect_submodules`, by returning
- ``True`` if the given ``name`` is a module or a submodule of ``mod_or_submod``.
-
- Examples:
-
- The following excludes ``foo.test`` and ``foo.test.one`` but not ``foo.testifier``. ::
-
- collect_submodules('foo', lambda name: not is_module_or_submodule(name, 'foo.test'))``
- """
- return name.startswith(mod_or_submod + '.') or name == mod_or_submod
-
-
-# Patterns of dynamic library filenames that might be bundled with some installed Python packages.
-PY_DYLIB_PATTERNS = [
- '*.dll',
- '*.dylib',
- 'lib*.so',
-]
-
-
-def collect_dynamic_libs(package: str, destdir: str | None = None, search_patterns: list = PY_DYLIB_PATTERNS):
- """
- This function produces a list of (source, dest) of dynamic library files that reside in package. Its output can be
- directly assigned to ``binaries`` in a hook script. The package parameter must be a string which names the package.
-
- :param destdir: Relative path to ./dist/APPNAME where the libraries should be put.
- :param search_patterns: List of dynamic library filename patterns to collect.
- """
- logger.debug('Collecting dynamic libraries for %s' % package)
-
- # Accept only strings as packages.
- if not isinstance(package, str):
- raise TypeError('package must be a str')
-
- # Skip a module which is not a package.
- if not is_package(package):
- logger.warning(
- "collect_dynamic_libs - skipping library collection for module '%s' as it is not a package.", package
- )
- return []
-
- pkg_dirs = get_all_package_paths(package)
- dylibs = []
- for pkg_dir in pkg_dirs:
- pkg_base = package_base_path(pkg_dir, package)
- # Recursively glob for all file patterns in the package directory
- for pattern in search_patterns:
- files = Path(pkg_dir).rglob(pattern)
- for source in files:
- # Produce the tuple ('/abs/path/to/source/mod/submod/file.pyd', 'mod/submod')
- if destdir:
- # Put libraries in the specified target directory.
- dest = destdir
- else:
- # Preserve original directory hierarchy.
- dest = source.parent.relative_to(pkg_base)
- logger.debug(' %s, %s' % (source, dest))
- dylibs.append((str(source), str(dest)))
-
- return dylibs
-
-
-def collect_data_files(
- package: str,
- include_py_files: bool = False,
- subdir: str | os.PathLike | None = None,
- excludes: list | None = None,
- includes: list | None = None,
-):
- r"""
- This function produces a list of ``(source, dest)`` entries for data files that reside in ``package``.
- Its output can be directly assigned to ``datas`` in a hook script; for example, see ``hook-sphinx.py``.
- The data files are all files that are not shared libraries / binary python extensions (based on extension
- check) and are not python source (.py) files or byte-compiled modules (.pyc). Collection of the .py and .pyc
- files can be toggled via the ``include_py_files`` flag.
- Parameters:
-
- - The ``package`` parameter is a string which names the package.
- - By default, python source files and byte-compiled modules (files with ``.py`` and ``.pyc`` suffix) are not
- collected; setting the ``include_py_files`` argument to ``True`` collects these files as well. This is typically
- used when a package requires source .py files to be available; for example, JIT compilation used in
- deep-learning frameworks, code that requires access to .py files (for example, to check their date), or code
- that tries to extend `sys.path` with subpackage paths in a way that is incompatible with PyInstaller's frozen
- importer.. However, in contemporary PyInstaller versions, the preferred way of collecting source .py files is by
- using the **module collection mode** setting (which enables collection of source .py files in addition to or
- in lieu of collecting byte-compiled modules into PYZ archive).
- - The ``subdir`` argument gives a subdirectory relative to ``package`` to search, which is helpful when submodules
- are imported at run-time from a directory lacking ``__init__.py``.
- - The ``excludes`` argument contains a sequence of strings or Paths. These provide a list of
- `globs `_
- to exclude from the collected data files; if a directory matches the provided glob, all files it contains will
- be excluded as well. All elements must be relative paths, which are relative to the provided package's path
- (/ ``subdir`` if provided).
-
- Therefore, ``*.txt`` will exclude only ``.txt`` files in ``package``\ 's path, while ``**/*.txt`` will exclude
- all ``.txt`` files in ``package``\ 's path and all its subdirectories. Likewise, ``**/__pycache__`` will exclude
- all files contained in any subdirectory named ``__pycache__``.
- - The ``includes`` function like ``excludes``, but only include matching paths. ``excludes`` override
- ``includes``: a file or directory in both lists will be excluded.
-
- This function does not work on zipped Python eggs.
-
- This function is intended to be used by hook scripts, not by main PyInstaller code.
- """
- logger.debug('Collecting data files for %s' % package)
-
- # Accept only strings as packages.
- if not isinstance(package, str):
- raise TypeError('package must be a str')
-
- # Skip a module which is not a package.
- if not is_package(package):
- logger.warning("collect_data_files - skipping data collection for module '%s' as it is not a package.", package)
- return []
-
- # Make sure the excludes are a list; this also makes a copy, so we don't modify the original.
- excludes = list(excludes) if excludes else []
- # These excludes may contain directories which need to be searched.
- excludes_len = len(excludes)
- # Including py files means don't exclude them. This pattern will search any directories for containing files, so
- # do not modify ``excludes_len``.
- if not include_py_files:
- excludes += ['**/*' + s for s in compat.ALL_SUFFIXES]
- else:
- # include_py_files should collect only .py and .pyc files, and not the extensions / shared libs.
- excludes += ['**/*' + s for s in compat.ALL_SUFFIXES if s not in {'.py', '.pyc'}]
-
- # Never, ever, collect .pyc files from __pycache__.
- excludes.append('**/__pycache__/*.pyc')
-
- # If not specified, include all files. Follow the same process as the excludes.
- includes = list(includes) if includes else ["**/*"]
- includes_len = len(includes)
-
- # A helper function to glob the in/ex "cludes", adding a wildcard to refer to all files under a subdirectory if a
- # subdirectory is matched by the first ``clude_len`` patterns. Otherwise, it in/excludes the matched file.
- # **This modifies** ``cludes``.
- def clude_walker(
- # Package directory to scan
- pkg_dir,
- # A list of paths relative to ``pkg_dir`` to in/exclude.
- cludes,
- # The number of ``cludes`` for which matching directories should be searched for all files under them.
- clude_len,
- # True if the list is includes, False for excludes.
- is_include
- ):
- for i, c in enumerate(cludes):
- for g in Path(pkg_dir).glob(c):
- # The path obtained from `pathlib.Path.glob()` should already be an instance of `pathlib.Path`; however,
- # under msys2/mingw python 3.13, it uses inconsistent mix of POSIX-style separators (for base part) and
- # Windows separators (for the globbed part), which causes issues further down the road. Explicitly
- # constructing a `Path` instance seems to normalize the separators and works around the problem.
- g = Path(g)
- if g.is_dir():
- # Only files are sources. Subdirectories are not.
- if i < clude_len:
- # In/exclude all files under a matching subdirectory.
- cludes.append(str((g / "**/*").relative_to(pkg_dir)))
- else:
- # In/exclude a matching file.
- sources.add(g) if is_include else sources.discard(g)
-
- # Obtain all paths for the specified package, and process each path independently.
- datas = []
-
- pkg_dirs = get_all_package_paths(package)
- for pkg_dir in pkg_dirs:
- sources = set() # Reset sources set
-
- pkg_base = package_base_path(pkg_dir, package)
- if subdir:
- pkg_dir = os.path.join(pkg_dir, subdir)
-
- # Process the package path with clude walker
- clude_walker(pkg_dir, includes, includes_len, True)
- clude_walker(pkg_dir, excludes, excludes_len, False)
-
- # Transform the sources into tuples for ``datas``.
- datas += [(str(s), str(s.parent.relative_to(pkg_base))) for s in sources]
-
- logger.debug("collect_data_files - Found files: %s", datas)
- return datas
-
-
-def collect_system_data_files(path: str, destdir: str | os.PathLike | None = None, include_py_files: bool = False):
- """
- This function produces a list of (source, dest) non-Python (i.e., data) files that reside somewhere on the system.
- Its output can be directly assigned to ``datas`` in a hook script.
-
- This function is intended to be used by hook scripts, not by main PyInstaller code.
- """
- # Accept only strings as paths.
- if not isinstance(path, str):
- raise TypeError('path must be a str')
-
- # Walk through all file in the given package, looking for data files.
- datas = []
- for dirpath, dirnames, files in os.walk(path):
- for f in files:
- extension = os.path.splitext(f)[1]
- if include_py_files or (extension not in PY_IGNORE_EXTENSIONS):
- # Produce the tuple: (/abs/path/to/source/mod/submod/file.dat, mod/submod/destdir)
- source = os.path.join(dirpath, f)
- dest = str(Path(dirpath).relative_to(path))
- if destdir is not None:
- dest = os.path.join(destdir, dest)
- datas.append((source, dest))
-
- return datas
-
-
-def copy_metadata(package_name: str, recursive: bool = False):
- """
- Collect distribution metadata so that ``importlib.metadata.distribution()`` or ``pkg_resources.get_distribution()``
- can find it.
-
- This function returns a list to be assigned to the ``datas`` global variable. This list instructs PyInstaller to
- copy the metadata for the given package to the frozen application's data directory.
-
- Parameters
- ----------
- package_name : str
- Specifies the name of the package for which metadata should be copied.
- recursive : bool
- If true, collect metadata for the package's dependencies too. This enables use of
- ``importlib.metadata.requires('package')`` or ``pkg_resources.require('package')`` inside the frozen
- application.
-
- Returns
- -------
- list
- This should be assigned to ``datas``.
-
- Examples
- --------
- >>> from PyInstaller.utils.hooks import copy_metadata
- >>> copy_metadata('sphinx')
- [('c:\\python27\\lib\\site-packages\\Sphinx-1.3.2.dist-info',
- 'Sphinx-1.3.2.dist-info')]
-
-
- Some packages rely on metadata files accessed through the ``importlib.metadata`` (or the now-deprecated
- ``pkg_resources``) module. PyInstaller does not collect these metadata files by default.
- If a package fails without the metadata (either its own, or of another package that it depends on), you can use this
- function in a hook to collect the corresponding metadata files into the frozen application. The tuples in the
- returned list contain two strings. The first is the full path to the package's metadata directory on the system. The
- second is the destination name, which typically corresponds to the basename of the metadata directory. Adding these
- tuples the the ``datas`` hook global variable, the metadata is collected into top-level application directory (where
- it is usually searched for).
-
- .. versionchanged:: 4.3.1
-
- Prevent ``dist-info`` metadata folders being renamed to ``egg-info`` which broke ``pkg_resources.require`` with
- *extras* (see :issue:`#3033`).
-
- .. versionchanged:: 4.4.0
-
- Add the **recursive** option.
- """
- from collections import deque
-
- todo = deque([package_name])
- done = set()
- out = []
-
- while todo:
- package_name = todo.pop()
- if package_name in done:
- continue
-
- dist = importlib_metadata.distribution(package_name)
-
- # We support only `importlib_metadata.PathDistribution`, since we need to rely on its private `_path` attribute
- # to obtain the path to metadata file/directory. But we need to account for possible sub-classes and vendored
- # variants (`setuptools._vendor.importlib_metadata.PathDistribution`), so just check that `_path` is available.
- if not hasattr(dist, '_path'):
- raise RuntimeError(
- f"Unsupported distribution type {type(dist)} for {package_name} - does not have _path attribute"
- )
- src_path = dist._path
-
- # We expect the `_path` attribute to be an instance of `pathlib.Path`. This assumption is violated when the
- # package happens to be installed as a zipped egg. In such case, `_path` is an instance of either `zipp.Path`
- # (when using `importlib.metadata` from `importlib-metadata`, which in turn uses 3rd party `zipp` package) or
- # `zipfile.Path` (when using stdlib's `importlib.metadata`). While we could attempt to read the metadata
- # from the zip, we dropped geberal support for zipped eggs from PyInstaller in 6.0, so raise an error.
- if not isinstance(src_path, Path):
- # NOTE: `src_path.parent` is also an instance of `zipfile.Path` or `zipp.Path`, and calling its `is_file()`
- # method returns False, because the root of zip file is (rightfully) considered a directory. Therefore, we
- # convert the path to `pathlib.Path` by taking the parent of `src_path.parent` (which turns out to be a
- # `pathlib.Path`) and add to it the name of the `src_path.parent` (the name of .egg file).
- try:
- src_parent = src_path.parent.parent / src_path.parent.name
- except Exception:
- src_parent = src_path.parent
-
- if src_parent.is_file() and src_parent.name.endswith('.egg'):
- raise RuntimeError(
- f"Cannot collect metadata from path {str(src_path)!r}, which appears to be inside a zipped egg. "
- f"PyInstaller >= 6.0 does not support zipped eggs anymore. Please reinstall {package_name!r} "
- "using modern package installation method instead of deprecated 'python setup.py install'. "
- "For example, if you are using pip package manager:\n"
- "1. uninstall the zipped egg:\n"
- f" pip uninstall {package_name}\n"
- "2. make sure pip and its dependencies are up-to-date:\n"
- " python -m pip install --upgrade pip setuptools\n"
- "3. install the package:\n"
- f" pip install {package_name}\n"
- "To install a package from source, pass the path to the source directory to 'pip install' command."
- )
- else:
- # Generic message for unforeseen cases.
- raise RuntimeError(
- f"Cannot collect metadata from path {src_path!r}, which is of unsupported type {type(src_path)}."
- )
-
- if src_path.is_dir():
- # The metadata is stored in a directory (.egg-info, .dist-info), so collect the whole directory. If the
- # package is installed as an egg, the metadata directory is ([...]/package_name-version.egg/EGG-INFO),
- # and requires special handling (as of PyInstaller v6, we support only non-zipped eggs).
- if src_path.name == 'EGG-INFO' and src_path.parent.name.endswith('.egg'):
- dest_path = os.path.join(*src_path.parts[-2:])
- else:
- dest_path = src_path.name
- elif src_path.is_file():
- # The metadata is stored in a single file. Collect it into top-level application directory.
- # The .egg-info file is commonly used by Debian/Ubuntu when packaging python packages.
- dest_path = '.'
- else:
- raise RuntimeError(
- f"Distribution metadata path {src_path!r} for {package_name} is neither file nor directory!"
- )
-
- # Hack for metadata from packages vendored by setuptools >= 71. If source path is rooted in setuptools/_vendor,
- # prepend the same to the destination path and avoid collecting into top-level directory.
- if src_path.parent.name == '_vendor' and src_path.parent.parent.name == 'setuptools':
- dest_path = os.path.join('setuptools', '_vendor', dest_path)
-
- out.append((str(src_path), str(dest_path)))
-
- if not recursive:
- return out
- done.add(package_name)
-
- # Process requirements; `importlib.metadata` has no API for parsing requirements, so we need to use
- # `packaging.requirements`. This is necessary to discard requirements with markers that do not match the
- # environment (e.g., `python_version`, `sys_platform`).
- requirements = [packaging.requirements.Requirement(req) for req in dist.requires or []]
- requirements = [req.name for req in requirements if req.marker is None or req.marker.evaluate()]
-
- todo += requirements
-
- return out
-
-
-def get_installer(dist_name: str):
- """
- Try to find which package manager installed the specified distribution (e.g., pip, conda, rpm) by reading INSTALLER
- file from distribution's metadata.
-
- If the specified distribution does not exist, fall back to treating the passed name as importable package/module
- name, and attempt to look up its associated distribution name; this matches the behavior of implementation found
- in older PyInstaller versions (<= v6.12.0).
-
- :param dist_name: Name of distribution to look up
- :return: Name of package manager or None
-
- .. versionchanged:: 6.13
- The passed name is now first treated as a distribution name (direct look-up), and only if that fails, it is
- treated as importable package/module name.
- """
-
- # First, perform direct look-up via the passed name, treating it as distribution name.
- try:
- dist = importlib_metadata.distribution(dist_name)
- installer_text = dist.read_text('INSTALLER')
- if installer_text is not None:
- return installer_text.strip()
- else:
- # Distribution exists, but does not have an INSTALLER file; stop the search here.
- return None
- except importlib_metadata.PackageNotFoundError:
- pass
-
- # Fall back to treating the passed name as importable package/module name, and try to resolve its associated
- # distribution name (e.g., enchant -> pyenchant). This requires distributions to explicitly list their top-level
- # importable names in `top_level.txt` file in metadata, or `importlib.metadata` that can inferring top-level
- # importable names (available in stdlib for python >= 3.11, or in importlib-metadata >= 4.8.1).
- module_name = dist_name
- pkg_to_dist = importlib_metadata.packages_distributions()
- dist_names = pkg_to_dist.get(module_name)
-
- # A namespace package might result in multiple dists; take the first one that has INSTALLER file available...
- for dist_name in dist_names or []:
- try:
- dist = importlib_metadata.distribution(dist_name)
- installer_text = dist.read_text('INSTALLER')
- if installer_text is not None:
- return installer_text.strip()
- except importlib_metadata.PackageNotFoundError:
- # This might happen with eggs if the egg directory name does not match the dist name declared in the
- # metadata.
- pass
-
- return None
-
-
-def collect_all(
- package_name: str,
- include_py_files: bool = True,
- filter_submodules: Callable = lambda name: True,
- exclude_datas: list | None = None,
- include_datas: list | None = None,
- on_error: str = "warn once",
-):
- """
- Collect everything for a given package name.
-
- Arguments:
- package_name:
- An ``import``-able package name.
- include_py_files:
- Forwarded to :func:`collect_data_files`.
- filter_submodules:
- Forwarded to :func:`collect_submodules`.
- exclude_datas:
- Forwarded to :func:`collect_data_files`.
- include_datas:
- Forwarded to :func:`collect_data_files`.
- on_error:
- Forwarded onto :func:`collect_submodules`.
-
- Returns:
- tuple: A ``(datas, binaries, hiddenimports)`` triplet containing:
-
- - All data files, raw Python files (if **include_py_files**), and distribution metadata directories (if
- applicable).
- - All dynamic libraries as returned by :func:`collect_dynamic_libs`.
- - All submodules of **package_name**.
-
- Typical use::
-
- datas, binaries, hiddenimports = collect_all('my_package_name')
- """
- datas = collect_data_files(package_name, include_py_files, excludes=exclude_datas, includes=include_datas)
- binaries = collect_dynamic_libs(package_name)
- hiddenimports = collect_submodules(package_name, on_error=on_error, filter=filter_submodules)
-
- # `copy_metadata` requires a dist name instead of importable/package name.
- # A namespace package might belong to multiple distributions, so process all of them.
- pkg_to_dist = importlib_metadata.packages_distributions()
- dist_names = set(pkg_to_dist.get(package_name, []))
- for dist_name in dist_names:
- # Copy metadata
- try:
- datas += copy_metadata(dist_name)
- except Exception:
- pass
-
- return datas, binaries, hiddenimports
-
-
-def collect_entry_point(name: str):
- """
- Collect modules and metadata for all exporters of a given entry point.
-
- Args:
- name:
- The name of the entry point. Check the documentation for the library that uses the entry point to find
- its name.
- Returns:
- A ``(datas, hiddenimports)`` pair that should be assigned to the ``datas`` and ``hiddenimports``, respectively.
-
- For libraries, such as ``pytest`` or ``keyring``, that rely on plugins to extend their behaviour.
-
- Examples:
- Pytest uses an entry point called ``'pytest11'`` for its extensions.
- To collect all those extensions use::
-
- datas, hiddenimports = collect_entry_point("pytest11")
-
- These values may be used in a hook or added to the ``datas`` and ``hiddenimports`` arguments in the ``.spec``
- file. See :ref:`using spec files`.
-
- .. versionadded:: 4.3
- """
- datas = []
- imports = []
- for entry_point in importlib_metadata.entry_points(group=name):
- datas += copy_metadata(entry_point.dist.name)
- imports.append(entry_point.module)
- return datas, imports
-
-
-def get_hook_config(hook_api: PostGraphAPI, module_name: str, key: str):
- """
- Get user settings for hooks.
-
- Args:
- module_name:
- The module/package for which the key setting belong to.
- key:
- A key for the config.
- Returns:
- The value for the config. ``None`` if not set.
-
- The ``get_hook_config`` function will lookup settings in the ``Analysis.hooksconfig`` dict.
-
- The hook settings can be added to ``.spec`` file in the form of::
-
- a = Analysis(["my-app.py"],
- ...
- hooksconfig = {
- "gi": {
- "icons": ["Adwaita"],
- "themes": ["Adwaita"],
- "languages": ["en_GB", "zh_CN"],
- },
- },
- ...
- )
- """
- config = hook_api.analysis.hooksconfig
- value = None
- if module_name in config and key in config[module_name]:
- value = config[module_name][key]
- return value
-
-
-def include_or_exclude_file(
- filename: str,
- include_list: list | None = None,
- exclude_list: list | None = None,
-):
- """
- Generic inclusion/exclusion decision function based on filename and list of include and exclude patterns.
-
- Args:
- filename:
- Filename considered for inclusion.
- include_list:
- List of inclusion file patterns.
- exclude_list:
- List of exclusion file patterns.
-
- Returns:
- A boolean indicating whether the file should be included or not.
-
- If ``include_list`` is provided, True is returned only if the filename matches one of include patterns (and does not
- match any patterns in ``exclude_list``, if provided). If ``include_list`` is not provided, True is returned if
- filename does not match any patterns in ``exclude list``, if provided. If neither list is provided, True is
- returned for any filename.
- """
- if include_list is not None:
- for pattern in include_list:
- if fnmatch.fnmatch(filename, pattern):
- break
- else:
- return False # Not explicitly included; exclude
-
- if exclude_list is not None:
- for pattern in exclude_list:
- if fnmatch.fnmatch(filename, pattern):
- return False # Explicitly excluded
-
- return True
-
-
-def collect_delvewheel_libs_directory(package_name, libdir_name=None, datas=None, binaries=None):
- """
- Collect data files and binaries from the .libs directory of a delvewheel-enabled python wheel. Such wheels ship
- their shared libraries in a .libs directory that is located next to the package directory, and therefore falls
- outside the purview of the collect_dynamic_libs() utility function.
-
- Args:
- package_name:
- Name of the package (e.g., scipy).
- libdir_name:
- Optional name of the .libs directory (e.g., scipy.libs). If not provided, ".libs" is added to
- ``package_name``.
- datas:
- Optional list of datas to which collected data file entries are added. The combined result is retuned
- as part of the output tuple.
- binaries:
- Optional list of binaries to which collected binaries entries are added. The combined result is retuned
- as part of the output tuple.
-
- Returns:
- tuple: A ``(datas, binaries)`` pair that should be assigned to the ``datas`` and ``binaries``, respectively.
-
- Examples:
- Collect the ``scipy.libs`` delvewheel directory belonging to the Windows ``scipy`` wheel::
-
- datas, binaries = collect_delvewheel_libs_directory("scipy")
-
- When the collected entries should be added to existing ``datas`` and ``binaries`` listst, the following form
- can be used to avoid using intermediate temporary variables and merging those into existing lists::
-
- datas, binaries = collect_delvewheel_libs_directory("scipy", datas=datas, binaries=binaries)
-
- .. versionadded:: 5.6
- """
-
- datas = datas or []
- binaries = binaries or []
-
- if libdir_name is None:
- libdir_name = package_name + '.libs'
-
- # delvewheel is applicable only to Windows wheels
- if not compat.is_win:
- return datas, binaries
-
- # Get package's parent path
- pkg_base, pkg_dir = get_package_paths(package_name)
- pkg_base = Path(pkg_base)
- libs_dir = pkg_base / libdir_name
-
- if not libs_dir.is_dir():
- return datas, binaries
-
- # Collect all dynamic libs - collect them as binaries in order to facilitate proper binary dependency analysis
- # (for example, to ensure that system-installed VC runtime DLLs are collected, if needed).
- # As of PyInstaller 5.4, this should be safe (should not result in duplication), because binary dependency
- # analysis attempts to preserve the DLL directory structure.
- binaries += [(str(dll_file), str(dll_file.parent.relative_to(pkg_base))) for dll_file in libs_dir.glob('*.dll')]
-
- # Collect the .load-order file; strictly speaking, this should be necessary only under python < 3.8, but let us
- # collect it for completeness sake. Differently named variants have been observed: `.load_order`, `.load-order`,
- # and `.load-order-Name`.
- datas += [(str(load_order_file), str(load_order_file.parent.relative_to(pkg_base)))
- for load_order_file in libs_dir.glob('.load[-_]order*')]
-
- return datas, binaries
-
-
-if compat.is_pure_conda:
- from PyInstaller.utils.hooks import conda as conda_support # noqa: F401
-elif compat.is_conda:
- from PyInstaller.utils.hooks.conda import CONDA_META_DIR as _tmp
- logger.warning(
- "Assuming this is not an Anaconda environment or an additional venv/pipenv/... environment manager is being "
- "used on top, because the conda-meta folder %s does not exist.", _tmp
- )
- del _tmp
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 969a6f6..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/conda.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/conda.cpython-312.pyc
deleted file mode 100644
index af808ba..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/conda.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/django.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/django.cpython-312.pyc
deleted file mode 100644
index b99ddd9..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/django.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/gi.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/gi.cpython-312.pyc
deleted file mode 100644
index a819734..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/gi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/setuptools.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/setuptools.cpython-312.pyc
deleted file mode 100644
index ca38372..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/setuptools.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/tcl_tk.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/tcl_tk.cpython-312.pyc
deleted file mode 100644
index f811851..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/__pycache__/tcl_tk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/conda.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/conda.py
deleted file mode 100755
index a237102..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/conda.py
+++ /dev/null
@@ -1,401 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# language=rst
-"""
-Additional helper methods for working specifically with Anaconda distributions are found at
-:mod:`PyInstaller.utils.hooks.conda_support`
-which is designed to mimic (albeit loosely) the `importlib.metadata`_ package. These functions find and parse the
-distribution metadata from json files located in the ``conda-meta`` directory.
-
-.. versionadded:: 4.2.0
-
-This module is available only if run inside a Conda environment. Usage of this module should therefore be wrapped in
-a conditional clause::
-
- from PyInstaller.compat import is_pure_conda
-
- if is_pure_conda:
- from PyInstaller.utils.hooks import conda_support
-
- # Code goes here. e.g.
- binaries = conda_support.collect_dynamic_libs("numpy")
- ...
-
-Packages are all referenced by the *distribution name* you use to install it, rather than the *package name* you import
-it with. I.e., use ``distribution("pillow")`` instead of ``distribution("PIL")`` or use ``package_distribution("PIL")``.
-"""
-from __future__ import annotations
-
-import fnmatch
-import json
-import pathlib
-import sys
-from typing import Iterable, List
-from importlib.metadata import PackagePath as _PackagePath
-
-from PyInstaller import compat
-from PyInstaller.log import logger
-
-# Conda virtual environments each get their own copy of `conda-meta` so the use of `sys.prefix` instead of
-# `sys.base_prefix`, `sys.real_prefix` or anything from our `compat` module is intentional.
-CONDA_ROOT = pathlib.Path(sys.prefix)
-CONDA_META_DIR = CONDA_ROOT / "conda-meta"
-
-# Find all paths in `sys.path` that are inside Conda root.
-PYTHONPATH_PREFIXES = []
-for _path in sys.path:
- _path = pathlib.Path(_path)
- try:
- PYTHONPATH_PREFIXES.append(_path.relative_to(sys.prefix))
- except ValueError:
- pass
-
-PYTHONPATH_PREFIXES.sort(key=lambda p: len(p.parts), reverse=True)
-
-
-class Distribution:
- """
- A bucket class representation of a Conda distribution.
-
- This bucket exports the following attributes:
-
- :ivar name: The distribution's name.
- :ivar version: Its version.
- :ivar files: All filenames as :meth:`PackagePath`\\ s included with this distribution.
- :ivar dependencies: Names of other distributions that this distribution depends on (with version constraints
- removed).
- :ivar packages: Names of importable packages included in this distribution.
-
- This class is not intended to be constructed directly by users. Rather use :meth:`distribution` or
- :meth:`package_distribution` to provide one for you.
- """
- def __init__(self, json_path: str):
- try:
- self._json_path = pathlib.Path(json_path)
- assert self._json_path.exists()
- except (TypeError, AssertionError):
- raise TypeError(
- "Distribution requires a path to a conda-meta json. Perhaps you want "
- "`distribution({})` instead?".format(repr(json_path))
- )
-
- # Everything we need (including this distribution's name) is kept in the metadata json.
- self.raw: dict = json.loads(self._json_path.read_text())
-
- # Unpack the more useful contents of the json.
- self.name: str = self.raw["name"]
- self.version: str = self.raw["version"]
- self.files = [PackagePath(i) for i in self.raw["files"]]
- self.dependencies = self._init_dependencies()
- self.packages = self._init_package_names()
-
- def __repr__(self):
- return "{}(name=\"{}\", packages={})".format(type(self).__name__, self.name, self.packages)
-
- def _init_dependencies(self):
- """
- Read dependencies from ``self.raw["depends"]``.
-
- :return: Dependent distribution names.
- :rtype: list
-
- The names in ``self.raw["depends"]`` come with extra version constraint information which must be stripped.
- """
- dependencies = []
- # For each dependency:
- for dependency in self.raw.get("depends", []):
- # ``dependency`` is a string of the form: "[name] [version constraints]"
- name, *version_constraints = dependency.split(maxsplit=1)
- dependencies.append(name)
- return dependencies
-
- def _init_package_names(self):
- """
- Search ``self.files`` for package names shipped by this distribution.
-
- :return: Package names.
- :rtype: list
-
- These are names you would ``import`` rather than names you would install.
- """
- packages = []
- for file in self.files:
- package = _get_package_name(file)
- if package is not None:
- packages.append(package)
- return packages
-
- @classmethod
- def from_name(cls, name: str):
- """
- Get distribution information for a given distribution **name** (i.e., something you would ``conda install``).
-
- :rtype: :class:`Distribution`
- """
- if name in distributions:
- return distributions[name]
- raise ModuleNotFoundError(
- "Distribution {} is either not installed or was not installed using Conda.".format(name)
- )
-
- @classmethod
- def from_package_name(cls, name: str):
- """
- Get distribution information for a **package** (i.e., something you would import).
-
- :rtype: :class:`Distribution`
-
- For example, the package ``pkg_resources`` belongs to the distribution ``setuptools``, which contains three
- packages.
-
- >>> package_distribution("pkg_resources")
- Distribution(name="setuptools",
- packages=['easy_install', 'pkg_resources', 'setuptools'])
- """
- if name in distributions_by_package:
- return distributions_by_package[name]
- raise ModuleNotFoundError("Package {} is either not installed or was not installed using Conda.".format(name))
-
-
-distribution = Distribution.from_name
-package_distribution = Distribution.from_package_name
-
-
-class PackagePath(_PackagePath):
- """
- A filename relative to Conda's root (``sys.prefix``).
-
- This class inherits from :class:`pathlib.PurePosixPath` even on non-Posix OSs. To convert to a :class:`pathlib.Path`
- pointing to the real file, use the :meth:`locate` method.
- """
- def locate(self):
- """
- Return a path-like object for this path pointing to the file's true location.
- """
- return pathlib.Path(sys.prefix) / self
-
-
-def walk_dependency_tree(initial: str, excludes: Iterable[str] | None = None):
- """
- Collect a :class:`Distribution` and all direct and indirect dependencies of that distribution.
-
- Arguments:
- initial:
- Distribution name to collect from.
- excludes:
- Distributions to exclude.
- Returns:
- A ``{name: distribution}`` mapping where ``distribution`` is the output of
- :func:`conda_support.distribution(name) `.
- """
- if excludes is not None:
- excludes = set(excludes)
-
- # Rather than use true recursion, mimic it with a to-do queue.
- from collections import deque
- done = {}
- names_to_do = deque([initial])
-
- while names_to_do:
- # Grab a distribution name from the to-do list.
- name = names_to_do.pop()
- try:
- # Collect and save it's metadata.
- done[name] = distribution = Distribution.from_name(name)
- logger.debug("Collected Conda distribution '%s', a dependency of '%s'.", name, initial)
- except ModuleNotFoundError:
- logger.warning(
- "Conda distribution '%s', dependency of '%s', was not found. "
- "If you installed this distribution with pip then you may ignore this warning.", name, initial
- )
- continue
- # For each dependency:
- for _name in distribution.dependencies:
- if _name in done:
- # Skip anything already done.
- continue
- if _name == name:
- # Avoid infinite recursion if a distribution depends on itself. This will probably never happen but I
- # certainly would not chance it.
- continue
- if excludes is not None and _name in excludes:
- # Do not recurse to excluded dependencies.
- continue
- names_to_do.append(_name)
- return done
-
-
-def _iter_distributions(name, dependencies, excludes):
- if dependencies:
- return walk_dependency_tree(name, excludes).values()
- else:
- return [Distribution.from_name(name)]
-
-
-def requires(name: str, strip_versions: bool = False) -> List[str]:
- """
- List requirements of a distribution.
-
- Arguments:
- name:
- The name of the distribution.
- strip_versions:
- List only their names, not their version constraints.
- Returns:
- A list of distribution names.
- """
- if strip_versions:
- return distribution(name).dependencies
- return distribution(name).raw["depends"]
-
-
-def files(name: str, dependencies: bool = False, excludes: list | None = None) -> List[PackagePath]:
- """
- List all files belonging to a distribution.
-
- Arguments:
- name:
- The name of the distribution.
- dependencies:
- Recursively collect files of dependencies too.
- excludes:
- Distributions to ignore if **dependencies** is true.
- Returns:
- All filenames belonging to the given distribution.
-
- With ``dependencies=False``, this is just a shortcut for::
-
- conda_support.distribution(name).files
- """
- return [file for dist in _iter_distributions(name, dependencies, excludes) for file in dist.files]
-
-
-if compat.is_win:
- lib_dir = pathlib.PurePath("Library", "bin")
-else:
- lib_dir = pathlib.PurePath("lib")
-
-
-def collect_dynamic_libs(name: str, dest: str = ".", dependencies: bool = True, excludes: Iterable[str] | None = None):
- """
- Collect DLLs for distribution **name**.
-
- Arguments:
- name:
- The distribution's project-name.
- dest:
- Target destination, defaults to ``'.'``.
- dependencies:
- Recursively collect libs for dependent distributions (recommended).
- excludes:
- Dependent distributions to skip, defaults to ``None``.
- Returns:
- List of DLLs in PyInstaller's ``(source, dest)`` format.
-
- This collects libraries only from Conda's shared ``lib`` (Unix) or ``Library/bin`` (Windows) folders. To collect
- from inside a distribution's installation use the regular :func:`PyInstaller.utils.hooks.collect_dynamic_libs`.
- """
- DLL_SUFFIXES = ("*.dll", "*.dylib", "*.so", "*.so.*")
- _files = []
- for file in files(name, dependencies, excludes):
- # A file is classified as a dynamic library if:
- # 1) it lives inside the dedicated ``lib_dir`` DLL folder.
- #
- # NOTE: `file` is an instance of `PackagePath`, which inherits from `pathlib.PurePosixPath` even on Windows.
- # Therefore, it does not properly handle cases when metadata paths contain Windows-style separator, which does
- # seem to be used on some Windows installations (see #9113). Therefore, cast `file` to `pathlib.PurePath`
- # before comparing its parent to `lib_dir` (which should also be a `pathlib.PurePath`).
- if pathlib.PurePath(file).parent != lib_dir:
- continue
- # 2) it is a file (and not a directory or a symbolic link pointing to a directory)
- resolved_file = file.locate()
- if not resolved_file.is_file():
- continue
- # 3) has a correct suffix
- if not any([resolved_file.match(suffix) for suffix in DLL_SUFFIXES]):
- continue
-
- _files.append((str(resolved_file), dest))
- return _files
-
-
-# --- Map packages to distributions and vice-versa ---
-
-
-def _get_package_name(file: PackagePath):
- """
- Determine the package name of a Python file in :data:`sys.path`.
-
- Arguments:
- file:
- A Python filename relative to Conda root (sys.prefix).
- Returns:
- Package name or None.
-
- This function only considers single file packages e.g. ``foo.py`` or top level ``foo/__init__.py``\\ s.
- Anything else is ignored (returning ``None``).
- """
- file = pathlib.Path(file)
- # TODO: Handle PEP 420 namespace packages (which are missing `__init__` module). No such Conda PEP 420 namespace
- # packages are known.
-
- # Get top-level folders by finding parents of `__init__.xyz`s
- if file.stem == "__init__" and file.suffix in compat.ALL_SUFFIXES:
- file = file.parent
- elif file.suffix not in compat.ALL_SUFFIXES:
- # Keep single-file packages but skip DLLs, data and junk files.
- return
-
- # Check if this file/folder's parent is in ``sys.path`` i.e. it's directly importable. This intentionally excludes
- # submodules which would cause confusion because ``sys.prefix`` is in ``sys.path``, meaning that every file in an
- # Conda installation is a submodule.
- for prefix in PYTHONPATH_PREFIXES:
- if len(file.parts) != len(prefix.parts) + 1:
- # This check is redundant but speeds it up quite a bit.
- continue
- # There are no wildcards involved here. The use of ``fnmatch`` is simply to handle the `if case-insensitive
- # file system: use case-insensitive string matching.`
- if fnmatch.fnmatch(str(file.parent), str(prefix)):
- return file.stem
-
-
-# All the information we want is organised the wrong way.
-
-# We want to look up distribution based on package names, but we can only search for packages using distribution names.
-# And we would like to search for a distribution's json file, but, due to the noisy filenames of the jsons, we can only
-# find a json's distribution rather than a distribution's json.
-
-# So we have to read everything, then regroup distributions in the ways we want them grouped. This will likely be a
-# spectacular bottleneck on full-blown Conda (non miniconda) with 250+ packages by default at several GiBs. I suppose we
-# could cache this on a per-json basis if it gets too much.
-
-
-def _init_distributions():
- distributions = {}
- for path in CONDA_META_DIR.glob("*.json"):
- dist = Distribution(path)
- distributions[dist.name] = dist
- return distributions
-
-
-distributions = _init_distributions()
-
-
-def _init_packages():
- distributions_by_package = {}
- for distribution in distributions.values():
- for package in distribution.packages:
- distributions_by_package[package] = distribution
- return distributions_by_package
-
-
-distributions_by_package = _init_packages()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/django.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/django.py
deleted file mode 100755
index 5b8bdae..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/django.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# ----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# ----------------------------------------------------------------------------
-import os
-
-from PyInstaller import isolated
-
-
-@isolated.decorate
-def django_dottedstring_imports(django_root_dir):
- """
- An isolated helper that returns list of all Django dependencies, parsed from the `mysite.settings` module.
-
- NOTE: With newer version of Django this is most likely the part of PyInstaller that will be broken.
-
- Tested with Django 2.2
- """
-
- import sys
- import os
-
- import PyInstaller.utils.misc
- from PyInstaller.utils import hooks as hookutils
-
- # Extra search paths to add to sys.path:
- # - parent directory of the django_root_dir
- # - django_root_dir itself; often, Django users do not specify absolute imports in the settings module.
- search_paths = [
- PyInstaller.utils.misc.get_path_to_toplevel_modules(django_root_dir),
- django_root_dir,
- ]
- sys.path += search_paths
-
- # Set the path to project's settings module
- default_settings_module = os.path.basename(django_root_dir) + '.settings'
- settings_module = os.environ.get('DJANGO_SETTINGS_MODULE', default_settings_module)
- os.environ['DJANGO_SETTINGS_MODULE'] = settings_module
-
- # Calling django.setup() avoids the exception AppRegistryNotReady() and also reads the user settings
- # from DJANGO_SETTINGS_MODULE.
- # https://stackoverflow.com/questions/24793351/django-appregistrynotready
- import django # noqa: E402
-
- django.setup()
-
- # This allows to access all django settings even from the settings.py module.
- from django.conf import settings # noqa: E402
-
- hiddenimports = list(settings.INSTALLED_APPS)
-
- # Do not fail script when settings does not have such attributes.
- if hasattr(settings, 'TEMPLATE_CONTEXT_PROCESSORS'):
- hiddenimports += list(settings.TEMPLATE_CONTEXT_PROCESSORS)
-
- if hasattr(settings, 'TEMPLATE_LOADERS'):
- hiddenimports += list(settings.TEMPLATE_LOADERS)
-
- hiddenimports += [settings.ROOT_URLCONF]
-
- def _remove_class(class_name):
- return '.'.join(class_name.split('.')[0:-1])
-
- #-- Changes in Django 1.7.
-
- # Remove class names and keep just modules.
- if hasattr(settings, 'AUTHENTICATION_BACKENDS'):
- for cl in settings.AUTHENTICATION_BACKENDS:
- cl = _remove_class(cl)
- hiddenimports.append(cl)
- # Deprecated since 4.2, may be None until it is removed
- cl = getattr(settings, 'DEFAULT_FILE_STORAGE', None)
- if cl:
- hiddenimports.append(_remove_class(cl))
- if hasattr(settings, 'FILE_UPLOAD_HANDLERS'):
- for cl in settings.FILE_UPLOAD_HANDLERS:
- cl = _remove_class(cl)
- hiddenimports.append(cl)
- if hasattr(settings, 'MIDDLEWARE_CLASSES'):
- for cl in settings.MIDDLEWARE_CLASSES:
- cl = _remove_class(cl)
- hiddenimports.append(cl)
- # Templates is a dict:
- if hasattr(settings, 'TEMPLATES'):
- for templ in settings.TEMPLATES:
- backend = _remove_class(templ['BACKEND'])
- hiddenimports.append(backend)
- # Include context_processors.
- if hasattr(templ, 'OPTIONS'):
- if hasattr(templ['OPTIONS'], 'context_processors'):
- # Context processors are functions - strip last word.
- mods = templ['OPTIONS']['context_processors']
- mods = [_remove_class(x) for x in mods]
- hiddenimports += mods
- # Include database backends - it is a dict.
- for v in settings.DATABASES.values():
- hiddenimports.append(v['ENGINE'])
-
- # Add templatetags and context processors for each installed app.
- for app in settings.INSTALLED_APPS:
- app_templatetag_module = app + '.templatetags'
- app_ctx_proc_module = app + '.context_processors'
- hiddenimports.append(app_templatetag_module)
- hiddenimports += hookutils.collect_submodules(app_templatetag_module)
- hiddenimports.append(app_ctx_proc_module)
-
- # Deduplicate imports.
- hiddenimports = list(set(hiddenimports))
-
- # Return the hidden imports
- return hiddenimports
-
-
-def django_find_root_dir():
- """
- Return path to directory (top-level Python package) that contains main django files. Return None if no directory
- was detected.
-
- Main Django project directory contain files like '__init__.py', 'settings.py' and 'url.py'.
-
- In Django 1.4+ the script 'manage.py' is not in the directory with 'settings.py' but usually one level up. We
- need to detect this special case too.
- """
- # 'PyInstaller.config' cannot be imported as other top-level modules.
- from PyInstaller.config import CONF
-
- # Get the directory with manage.py. Manage.py is supplied to PyInstaller as the first main executable script.
- manage_py = CONF['main_script']
- manage_dir = os.path.dirname(os.path.abspath(manage_py))
-
- # Get the Django root directory. The directory that contains settings.py and url.py. It could be the directory
- # containing manage.py or any of its subdirectories.
- settings_dir = None
- files = set(os.listdir(manage_dir))
- if ('settings.py' in files or 'settings' in files) and 'urls.py' in files:
- settings_dir = manage_dir
- else:
- for f in files:
- if os.path.isdir(os.path.join(manage_dir, f)):
- subfiles = os.listdir(os.path.join(manage_dir, f))
- # Subdirectory contains critical files.
- if ('settings.py' in subfiles or 'settings' in subfiles) and 'urls.py' in subfiles:
- settings_dir = os.path.join(manage_dir, f)
- break # Find the first directory.
-
- return settings_dir
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/gi.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/gi.py
deleted file mode 100755
index 9ae06ce..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/gi.py
+++ /dev/null
@@ -1,457 +0,0 @@
-# ----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# ----------------------------------------------------------------------------
-import os
-import pathlib
-import shutil
-import subprocess
-import hashlib
-import re
-
-from PyInstaller.depend.utils import _resolveCtypesImports
-from PyInstaller.utils.hooks import collect_submodules, collect_system_data_files, get_hook_config
-from PyInstaller import isolated
-from PyInstaller import log as logging
-from PyInstaller import compat
-from PyInstaller.depend.bindepend import findSystemLibrary
-
-logger = logging.getLogger(__name__)
-
-
-class GiModuleInfo:
- def __init__(self, module, version, hook_api=None):
- self.name = module
- self.version = version
- self.available = False
- self.sharedlibs = []
- self.typelib = None
- self.dependencies = []
-
- # If hook API is available, use it to override the version from hookconfig.
- if hook_api is not None:
- module_versions = get_hook_config(hook_api, 'gi', 'module-versions')
- if module_versions:
- self.version = module_versions.get(module, version)
-
- logger.debug("Gathering GI module info for %s %s", module, self.version)
-
- @isolated.decorate
- def _get_module_info(module, version):
- import gi
-
- # Ideally, we would use gi.Repository, which provides common abstraction for some of the functions we use in
- # this codepath (e.g., `require`, `get_typelib_path`, `get_immediate_dependencies`). However, it lacks the
- # `get_shared_library` function, which is why we are using "full" bindings via `gi.repository.GIRepository`.
- #
- # PyGObject 3.52.0 switched from girepository-1.0 to girepository-2.0, which means that GIRepository version
- # has changed from 2.0 to 3.0 and some of the API has changed.
- try:
- gi.require_version("GIRepository", "3.0")
- new_api = True
- except ValueError:
- gi.require_version("GIRepository", "2.0")
- new_api = False
-
- from gi.repository import GIRepository
-
- # The old API had `get_default` method to obtain global singleton object; it was removed in the new API,
- # which requires creation of separate GIRepository instances.
- if new_api:
- repo = GIRepository.Repository()
- try:
- repo.require(module, version, GIRepository.RepositoryLoadFlags.LAZY)
- except ValueError:
- return None # Module not available
-
- # The new API returns the list of shared libraries.
- sharedlibs = repo.get_shared_libraries(module)
- else:
- repo = GIRepository.Repository.get_default()
- try:
- repo.require(module, version, GIRepository.RepositoryLoadFlags.IREPOSITORY_LOAD_FLAG_LAZY)
- except ValueError:
- return None # Module not available
-
- # Shared library/libraries
- # Comma-separated list of paths to shared libraries, or None if none are associated. Convert to list.
- sharedlibs = repo.get_shared_library(module)
- sharedlibs = [lib.strip() for lib in sharedlibs.split(",")] if sharedlibs else []
-
- # Path to .typelib file
- typelib = repo.get_typelib_path(module)
-
- # Dependencies
- # GIRepository.Repository.get_immediate_dependencies is available from gobject-introspection v1.44 on
- if hasattr(repo, 'get_immediate_dependencies'):
- dependencies = repo.get_immediate_dependencies(module)
- else:
- dependencies = repo.get_dependencies(module)
-
- return {
- 'sharedlibs': sharedlibs,
- 'typelib': typelib,
- 'dependencies': dependencies,
- }
-
- # Try to query information; if this fails, mark module as unavailable.
- try:
- info = _get_module_info(module, self.version)
- if info is None:
- logger.debug("GI module info %s %s not found.", module, self.version)
- else:
- logger.debug("GI module info %s %s found.", module, self.version)
- self.sharedlibs = info['sharedlibs']
- self.typelib = info['typelib']
- self.dependencies = info['dependencies']
- self.available = True
- except Exception as e:
- logger.warning("Failed to query GI module %s %s: %s", module, self.version, e)
-
- def get_libdir(self):
- """
- Return the path to shared library used by the module. If no libraries are associated with the typelib, None is
- returned. If multiple library names are associated with the typelib, the path to the first resolved shared
- library is returned. Raises exception if module is unavailable or none of the shared libraries could be
- resolved.
- """
- # Module unavailable
- if not self.available:
- raise ValueError(f"Module {self.name} {self.version} is unavailable!")
- # Module has no associated shared libraries
- if not self.sharedlibs:
- return None
- for lib in self.sharedlibs:
- path = findSystemLibrary(lib)
- if path:
- return os.path.normpath(os.path.dirname(path))
- raise ValueError(f"Could not resolve any shared library of {self.name} {self.version}: {self.sharedlibs}!")
-
- def collect_typelib_data(self):
- """
- Return a tuple of (binaries, datas, hiddenimports) to be used by PyGObject related hooks.
- """
- datas = []
- binaries = []
- hiddenimports = []
-
- logger.debug("Collecting module data for %s %s", self.name, self.version)
-
- # Module unavailable
- if not self.available:
- raise ValueError(f"Module {self.name} {self.version} is unavailable!")
-
- # Find shared libraries
- resolved_libs = _resolveCtypesImports(self.sharedlibs)
- for resolved_lib in resolved_libs:
- logger.debug("Collecting shared library %s at %s", resolved_lib[0], resolved_lib[1])
- binaries.append((resolved_lib[1], "."))
-
- # Find and collect .typelib file. Run it through the `gir_library_path_fix` to fix the library path, if
- # necessary.
- typelib_entry = gir_library_path_fix(self.typelib)
- if typelib_entry:
- logger.debug('Collecting gir typelib at %s', typelib_entry[0])
- datas.append(typelib_entry)
-
- # Overrides for the module
- hiddenimports += collect_submodules('gi.overrides', lambda name: name.endswith('.' + self.name))
-
- # Module dependencies
- for dep in self.dependencies:
- dep_module, _ = dep.rsplit('-', 1)
- hiddenimports += [f'gi.repository.{dep_module}']
-
- return binaries, datas, hiddenimports
-
-
-# The old function, provided for backwards compatibility in 3rd party hooks.
-def get_gi_libdir(module, version):
- module_info = GiModuleInfo(module, version)
- return module_info.get_libdir()
-
-
-# The old function, provided for backwards compatibility in 3rd party hooks.
-def get_gi_typelibs(module, version):
- """
- Return a tuple of (binaries, datas, hiddenimports) to be used by PyGObject related hooks. Searches for and adds
- dependencies recursively.
-
- :param module: GI module name, as passed to 'gi.require_version()'
- :param version: GI module version, as passed to 'gi.require_version()'
- """
- module_info = GiModuleInfo(module, version)
- return module_info.collect_typelib_data()
-
-
-def gir_library_path_fix(path):
- import subprocess
-
- # 'PyInstaller.config' cannot be imported as other top-level modules.
- from PyInstaller.config import CONF
-
- path = os.path.abspath(path)
-
- # On macOS we need to recompile the GIR files to reference the loader path,
- # but this is not necessary on other platforms.
- if compat.is_darwin:
-
- # If using a virtualenv, the base prefix and the path of the typelib
- # have really nothing to do with each other, so try to detect that.
- common_path = os.path.commonprefix([compat.base_prefix, path])
- if common_path == '/':
- logger.debug("virtualenv detected? fixing the gir path...")
- common_path = os.path.abspath(os.path.join(path, '..', '..', '..'))
-
- gir_path = os.path.join(common_path, 'share', 'gir-1.0')
-
- typelib_name = os.path.basename(path)
- gir_name = os.path.splitext(typelib_name)[0] + '.gir'
-
- gir_file = os.path.join(gir_path, gir_name)
-
- if not os.path.exists(gir_path):
- logger.error(
- "Unable to find gir directory: %s.\nTry installing your platform's gobject-introspection package.",
- gir_path
- )
- return None
- if not os.path.exists(gir_file):
- logger.error(
- "Unable to find gir file: %s.\nTry installing your platform's gobject-introspection package.", gir_file
- )
- return None
-
- with open(gir_file, 'r', encoding='utf-8') as f:
- lines = f.readlines()
- # GIR files are `XML encoded `_,
- # which means they are by definition encoded using UTF-8.
- with open(os.path.join(CONF['workpath'], gir_name), 'w', encoding='utf-8') as f:
- for line in lines:
- if 'shared-library' in line:
- split = re.split('(=)', line)
- files = re.split('(["|,])', split[2])
- for count, item in enumerate(files):
- if 'lib' in item:
- files[count] = '@loader_path/' + os.path.basename(item)
- line = ''.join(split[0:2]) + ''.join(files)
- f.write(line)
-
- # g-ir-compiler expects a file so we cannot just pipe the fixed file to it.
- command = subprocess.Popen((
- 'g-ir-compiler', os.path.join(CONF['workpath'], gir_name),
- '-o', os.path.join(CONF['workpath'], typelib_name)
- )) # yapf: disable
- command.wait()
-
- return os.path.join(CONF['workpath'], typelib_name), 'gi_typelibs'
- else:
- return path, 'gi_typelibs'
-
-
-@isolated.decorate
-def get_glib_system_data_dirs():
- import gi
- gi.require_version('GLib', '2.0')
- from gi.repository import GLib
- return GLib.get_system_data_dirs()
-
-
-def get_glib_sysconf_dirs():
- """
- Try to return the sysconf directories (e.g., /etc).
- """
- if compat.is_win:
- # On Windows, if you look at gtkwin32.c, sysconfdir is actually relative to the location of the GTK DLL. Since
- # that is what we are actually interested in (not the user path), we have to do that the hard way...
- return [os.path.join(get_gi_libdir('GLib', '2.0'), 'etc')]
-
- @isolated.call
- def data_dirs():
- import gi
- gi.require_version('GLib', '2.0')
- from gi.repository import GLib
- return GLib.get_system_config_dirs()
-
- return data_dirs
-
-
-def collect_glib_share_files(*path):
- """
- Path is relative to the system data directory (e.g., /usr/share).
- """
- glib_data_dirs = get_glib_system_data_dirs()
- if glib_data_dirs is None:
- return []
-
- destdir = os.path.join('share', *path)
-
- # TODO: will this return too much?
- collected = []
- for data_dir in glib_data_dirs:
- p = os.path.join(data_dir, *path)
- collected += collect_system_data_files(p, destdir=destdir, include_py_files=False)
-
- return collected
-
-
-def collect_glib_etc_files(*path):
- """
- Path is relative to the system config directory (e.g., /etc).
- """
- glib_config_dirs = get_glib_sysconf_dirs()
- if glib_config_dirs is None:
- return []
-
- destdir = os.path.join('etc', *path)
-
- # TODO: will this return too much?
- collected = []
- for config_dir in glib_config_dirs:
- p = os.path.join(config_dir, *path)
- collected += collect_system_data_files(p, destdir=destdir, include_py_files=False)
-
- return collected
-
-
-_glib_translations = None
-
-
-def collect_glib_translations(prog, lang_list=None):
- """
- Return a list of translations in the system locale directory whose names equal prog.mo.
- """
- global _glib_translations
- if _glib_translations is None:
- if lang_list is not None:
- trans = []
- for lang in lang_list:
- trans += collect_glib_share_files(os.path.join("locale", lang))
- _glib_translations = trans
- else:
- _glib_translations = collect_glib_share_files('locale')
-
- names = [os.sep + prog + '.mo', os.sep + prog + '.po']
- namelen = len(names[0])
-
- return [(src, dst) for src, dst in _glib_translations if src[-namelen:] in names]
-
-
-# Not a hook utility function per-se (used by main Analysis class), but kept here to have all GLib/GObject functions
-# in one place...
-def compile_glib_schema_files(datas_toc, workdir, collect_source_files=False):
- """
- Compile collected GLib schema files. Extracts the list of GLib schema files from the given input datas TOC, copies
- them to temporary working directory, and compiles them. The resulting `gschemas.compiled` file is added to the
- output TOC, replacing any existing entry with that name. If `collect_source_files` flag is set, the source XML
- schema files are also (re)added to the output TOC; by default, they are not. This function is no-op (returns the
- original TOC) if no GLib schemas are found in TOC or if `glib-compile-schemas` executable is not found in `PATH`.
- """
- SCHEMA_DEST_DIR = pathlib.PurePath("share/glib-2.0/schemas")
- workdir = pathlib.Path(workdir)
-
- schema_files = []
- output_toc = []
- for toc_entry in datas_toc:
- dest_name, src_name, typecode = toc_entry
- dest_name = pathlib.PurePath(dest_name)
- src_name = pathlib.PurePath(src_name)
-
- # Pass-through for non-schema files, identified based on the destination directory.
- if dest_name.parent != SCHEMA_DEST_DIR:
- output_toc.append(toc_entry)
- continue
-
- # It seems schemas directory contains different files with different suffices:
- # - .gschema.xml
- # - .schema.override
- # - .enums.xml
- # To avoid omitting anything, simply collect everything into temporary directory.
- # Exemptions are gschema.dtd (which should be unnecessary) and gschemas.compiled (which we will generate
- # ourselves in this function).
- if src_name.name in {"gschema.dtd", "gschemas.compiled"}:
- continue
-
- schema_files.append(src_name)
-
- # If there are no schema files available, simply return the input datas TOC.
- if not schema_files:
- return datas_toc
-
- # Ensure that `glib-compile-schemas` executable is in PATH, just in case...
- schema_compiler_exe = shutil.which('glib-compile-schemas')
- if not schema_compiler_exe:
- logger.warning("GLib schema compiler (glib-compile-schemas) not found! Skipping GLib schema recompilation...")
- return datas_toc
-
- # If `gschemas.compiled` file already exists in the temporary working directory, record its modification time and
- # hash. This will allow us to restore the modification time on the newly-compiled copy, if the latter turns out
- # to be identical to the existing old one. Just in case, if the file becomes subject to timestamp-based caching
- # mechanism.
- compiled_file = workdir / "gschemas.compiled"
- old_compiled_file_hash = None
- old_compiled_file_stat = None
-
- if compiled_file.is_file():
- # Record creation/modification time
- old_compiled_file_stat = compiled_file.stat()
- # Compute SHA1 hash; since compiled schema files are relatively small, do it in single step.
- old_compiled_file_hash = hashlib.sha1(compiled_file.read_bytes()).digest()
-
- # Ensure that temporary working directory exists, and is empty.
- if workdir.exists():
- shutil.rmtree(workdir)
- workdir.mkdir(exist_ok=True)
-
- # Copy schema (source) files to temporary working directory
- for schema_file in schema_files:
- shutil.copy(schema_file, workdir)
-
- # Compile. The glib-compile-schema might produce warnings on its own (e.g., schemas using deprecated paths, or
- # overrides for non-existent keys). Since these are non-actionable, capture and display them only as a DEBUG
- # message, or as a WARNING one if the command fails.
- logger.info("Compiling collected GLib schema files in %r...", str(workdir))
- try:
- cmd_args = [schema_compiler_exe, str(workdir), '--targetdir', str(workdir)]
- p = subprocess.run(
- cmd_args,
- stdin=subprocess.DEVNULL,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- check=True,
- errors='ignore',
- encoding='utf-8',
- )
- logger.debug("Output from glib-compile-schemas:\n%s", p.stdout)
- except subprocess.CalledProcessError as e:
- # The called glib-compile-schema returned error. Display stdout/stderr, and return original datas TOC to
- # minimize damage.
- logger.warning("Failed to recompile GLib schemas! Returning collected files as-is!", exc_info=True)
- logger.warning("Output from glib-compile-schemas:\n%s", e.stdout)
- return datas_toc
- except Exception:
- # Compilation failed for whatever reason. Return original datas TOC to minimize damage.
- logger.warning("Failed to recompile GLib schemas! Returning collected files as-is!", exc_info=True)
- return datas_toc
-
- # Compute the checksum of the new compiled file, and if it matches the old checksum, restore the modification time.
- if old_compiled_file_hash is not None:
- new_compiled_file_hash = hashlib.sha1(compiled_file.read_bytes()).digest()
- if new_compiled_file_hash == old_compiled_file_hash:
- os.utime(compiled_file, ns=(old_compiled_file_stat.st_atime_ns, old_compiled_file_stat.st_mtime_ns))
-
- # Add the resulting gschemas.compiled file to the output TOC
- output_toc.append((str(SCHEMA_DEST_DIR / compiled_file.name), str(compiled_file), "DATA"))
-
- # Include source schema files in the output TOC (optional)
- if collect_source_files:
- for schema_file in schema_files:
- output_toc.append((str(SCHEMA_DEST_DIR / schema_file.name), str(schema_file), "DATA"))
-
- return output_toc
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__init__.py
deleted file mode 100755
index fbefbe3..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__init__.py
+++ /dev/null
@@ -1,1427 +0,0 @@
-# ----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import glob
-import os
-import pathlib
-import re
-
-from PyInstaller import compat
-from PyInstaller import isolated
-from PyInstaller import log as logging
-from PyInstaller.depend import bindepend
-from PyInstaller.utils import hooks, misc
-from PyInstaller.utils.hooks.qt import _modules_info
-
-logger = logging.getLogger(__name__)
-
-# Qt deployment approach
-# ----------------------
-# This is the core of PyInstaller's approach to Qt deployment. It is based on:
-#
-# - Discovering the location of Qt libraries by introspection, using QtLibraryInfo_. This provides compatibility with
-# many variants of Qt5/6 (conda, self-compiled, provided by a Linux distro, etc.) and many versions of Qt5/6, all of
-# which vary in the location of Qt files.
-#
-# - Placing all frozen PyQt5/6 or PySide2/6 Qt files in a standard subdirectory layout, which matches the layout of the
-# corresponding wheel on PyPI. This is necessary to support Qt installs which are not in a subdirectory of the PyQt5/6
-# or PySide2/6 wrappers. See ``hooks/rthooks/pyi_rth_qt5.py`` for the use of environment variables to establish this
-# layout.
-#
-# - Emitting warnings on missing QML and translation files which some installations do not have.
-#
-# - Determining additional files needed for deployment based on the information in the centralized Qt module information
-# list in the ``_modules_info`` module. This includes plugins and translation files associated with each Qt python
-# extension module, as well as additional python Qt extension modules.
-#
-# - Collecting additional files that are specific to each module and are handled separately, for example:
-#
-# - For dynamic OpenGL applications, the ``libEGL.dll``, ``libGLESv2.dll``, ``d3dcompiler_XX.dll`` (the XX is a
-# version number), and ``opengl32sw.dll`` libraries need to be collected on Windows. This is handled by the
-# "base" bindings hook, for example ``hook-PyQt5.py``.
-#
-# - If Qt was configured to use ICU, the ``icudtXX.dll``, ``icuinXX.dll``, and ``icuucXX.dll`` libraries need to
-# be collected on Windows. This is handled by the "base" bindings hook, for example ``hook-PyQt5.py``.
-#
-# - Per the `Deploying QML Applications `_ page, QML-based
-# applications need the ``qml/`` directory available. This is handled by ``QtQuick`` hook, for example
-# ``hook-PyQt5.QtQuick.py``.
-#
-# - For ``QtWebEngine``-based applications, we follow the `deployWebEngineCore
-# `_
-# function copies the following files from ``resources/``, and also copies the web engine process executable.
-# - ``icudtl.dat``
-# - ``qtwebengine_devtools_resources.pak``
-# - ``qtwebengine_resources.pak``
-# - ``qtwebengine_resources_100p.pak``
-# - ``qtwebengine_resources_200p.pak``
-#
-# This is handled by the ``QtWebEngineCore`` hook, for example ``hook-PyQt5.QtWebEngineCore.py``.
-#
-# For details and references, see the `original write-up
-# `_
-# and the documentation in the ``_modules_info`` module.
-
-
-# QtModuleInfo
-# ------------
-# This class contains information about python module (extension), its corresponding Qt module (shared library), and
-# associated plugins and translations. It is used within QtLibraryInfo_ to establish name-based mappings for file
-# collection.
-class QtModuleInfo:
- def __init__(self, module, shared_lib=None, translations=None, plugins=None):
- # Python module (extension) name without package namespace. For example, `QtCore`.
- # Can be None if python bindings do not bind the module, but we still need to establish relationship between
- # the Qt module (shared library) and its plugins and translations.
- self.module = module
- # Associated Qt module (shared library), if any. Used during recursive dependency analysis, where a python
- # module (extension) is analyzed for linked Qt modules (shared libraries), and then their corresponding
- # python modules (extensions) are added to hidden imports. For example, the Qt module name is `Qt5Core` or
- # `Qt6Core`, depending on the Qt version. Can be None for python modules that are not tied to a particular
- # Qt shared library (for example, the corresponding Qt module is headers-only) and hence they cannot be
- # inferred from recursive link-time dependency analysis.
- self.shared_lib = shared_lib
- # List of base names of translation files (if any) associated with the Qt module. Multiple base names may be
- # associated with a single module.
- # For example, `['qt', 'qtbase']` for `QtCore` or `['qtmultimedia']` for `QtMultimedia`.
- self.translations = translations or []
- # List of plugins associated with the Qt module.
- self.plugins = plugins or []
-
- def __repr__(self):
- return f"(module={self.module!r}, shared_lib={self.shared_lib!r}, " \
- f"translations={self.translations!r}, plugins={self.plugins!r}"
-
-
-# QtLibraryInfo
-# --------------
-# This class uses introspection to determine the location of Qt files. This is essential to deal with the many variants
-# of the PyQt5/6 and PySide2/6 package, each of which places files in a different location. Therefore, this class
-# provides all location-related members of `QLibraryInfo `_.
-class QtLibraryInfo:
- def __init__(self, namespace):
- if namespace not in ['PyQt5', 'PyQt6', 'PySide2', 'PySide6']:
- raise Exception('Invalid namespace: {0}'.format(namespace))
- self.namespace = namespace
- # Distinction between PyQt5/6 and PySide2/6
- self.is_pyqt = namespace in {'PyQt5', 'PyQt6'}
- # Distinction between Qt5 and Qt6
- self.qt_major = 6 if namespace in {'PyQt6', 'PySide6'} else 5
- # Determine relative path where Qt libraries and data need to be collected in the frozen application. This
- # varies between PyQt5/PyQt6/PySide2/PySide6, their versions, and platforms. NOTE: it is tempting to consider
- # deriving this path as simply the value of QLibraryInfo.PrefixPath, taken relative to the package's root
- # directory. However, we also need to support non-wheel deployments (e.g., with Qt installed in custom path on
- # Windows, or with Qt and PyQt5 installed on linux using native package manager), and in those, the Qt
- # PrefixPath does not reflect the required relative target path for the frozen application.
- if namespace == 'PyQt5':
- if self._use_new_layout("PyQt5", "5.15.4", False):
- self.qt_rel_dir = os.path.join('PyQt5', 'Qt5')
- else:
- self.qt_rel_dir = os.path.join('PyQt5', 'Qt')
- elif namespace == 'PyQt6':
- if self._use_new_layout("PyQt6", "6.0.3", True):
- self.qt_rel_dir = os.path.join('PyQt6', 'Qt6')
- else:
- self.qt_rel_dir = os.path.join('PyQt6', 'Qt')
- elif namespace == 'PySide2':
- # PySide2 uses PySide2/Qt on linux and macOS, and PySide2 on Windows
- if compat.is_win:
- self.qt_rel_dir = 'PySide2'
- else:
- self.qt_rel_dir = os.path.join('PySide2', 'Qt')
- else:
- # PySide6 follows the same logic as PySide2
- if compat.is_win:
- self.qt_rel_dir = 'PySide6'
- else:
- self.qt_rel_dir = os.path.join('PySide6', 'Qt')
-
- # Process module information list to construct python-module-name -> info and shared-lib-name -> info mappings.
- self._load_module_info()
-
- def __repr__(self):
- return f"QtLibraryInfo({self.namespace})"
-
- # Delay initialization of the Qt library information until the corresponding attributes are first requested.
- def __getattr__(self, name):
- if 'version' in self.__dict__:
- # Initialization was already done, but requested attribute is not available.
- raise AttributeError(name)
-
- # Load Qt library info...
- self._load_qt_info()
- # ... and return the requested attribute
- return getattr(self, name)
-
- # Check whether we must use the new layout (e.g. PyQt5/Qt5, PyQt6/Qt6) instead of the old layout (PyQt5/Qt,
- # PyQt6/Qt).
- @staticmethod
- def _use_new_layout(package_basename: str, version: str, fallback_value: bool) -> bool:
- # The PyQt wheels come in both non-commercial and commercial variants. So we need to check if a particular
- # variant is installed before testing its version.
- if hooks.check_requirement(package_basename):
- return hooks.check_requirement(f"{package_basename} >= {version}")
- if hooks.check_requirement(f"{package_basename}_commercial"):
- return hooks.check_requirement(f"{package_basename}_commercial >= {version}")
- return fallback_value
-
- # Load Qt information (called on first access to related fields)
- def _load_qt_info(self):
- """
- Load and process Qt library information. Called on the first access to the related attributes of the class
- (e.g., `version` or `location`).
- """
-
- # Ensure self.version exists, even if PyQt{5,6}/PySide{2,6} cannot be imported. Hooks and util functions use
- # `if .version` to check whether package was imported and other attributes are expected to be available.
- # This also serves as a marker that initialization was already done.
- self.version = None
-
- # Get library path information from Qt. See QLibraryInfo_.
- @isolated.decorate
- def _read_qt_library_info(package):
- import os
- import sys
- import importlib
-
- # Import the Qt-based package
- # equivalent to: from package.QtCore import QLibraryInfo, QCoreApplication
- try:
- QtCore = importlib.import_module('.QtCore', package)
- except ModuleNotFoundError:
- return None # Signal that package is unavailable
- QLibraryInfo = QtCore.QLibraryInfo
- QCoreApplication = QtCore.QCoreApplication
-
- # QLibraryInfo is not always valid until a QCoreApplication is instantiated.
- app = QCoreApplication(sys.argv) # noqa: F841
-
- # Qt6 deprecated QLibraryInfo.location() in favor of QLibraryInfo.path(), and
- # QLibraryInfo.LibraryLocation enum was replaced by QLibraryInfo.LibraryPath.
- if hasattr(QLibraryInfo, 'path'):
- # Qt6; enumerate path enum values directly from the QLibraryInfo.LibraryPath enum.
- path_names = [x for x in dir(QLibraryInfo.LibraryPath) if x.endswith('Path')]
- location = {x: QLibraryInfo.path(getattr(QLibraryInfo.LibraryPath, x)) for x in path_names}
- else:
- # Qt5; in recent versions, location enum values can be enumeratd from QLibraryInfo.LibraryLocation.
- # However, in older versions of Qt5 and its python bindings, that is unavailable. Hence the
- # enumeration of "*Path"-named members of QLibraryInfo.
- path_names = [x for x in dir(QLibraryInfo) if x.endswith('Path')]
- location = {x: QLibraryInfo.location(getattr(QLibraryInfo, x)) for x in path_names}
-
- # Determine the python-based package location, by looking where the QtCore module is located.
- package_location = os.path.dirname(QtCore.__file__)
-
- # Determine Qt version. Works for Qt 5.8 and later, where QLibraryInfo.version() was introduced.
- try:
- version = QLibraryInfo.version().segments()
- except AttributeError:
- version = []
-
- return {
- 'is_debug_build': QLibraryInfo.isDebugBuild(),
- 'version': version,
- 'location': location,
- 'package_location': package_location,
- }
-
- try:
- qt_info = _read_qt_library_info(self.namespace)
- except Exception as e:
- logger.warning("%s: failed to obtain Qt library info: %s", self, e)
- return
-
- # If package could not be imported, `_read_qt_library_info` returns None. In such cases, emit a debug message
- # instead of a warning, because this initialization might be triggered by a helper function that is trying to
- # determine availability of bindings by inspecting the `version` attribute of `QtLibraryInfo` for all bindings.
- if qt_info is None:
- logger.debug("%s: failed to obtain Qt library info: %s.QtCore could not be imported.", self, self.namespace)
- return
-
- for k, v in qt_info.items():
- setattr(self, k, v)
-
- # Turn package_location into pathlib.Path(), and fully resolve it.
- self.package_location = pathlib.Path(self.package_location).resolve()
-
- # Determine if the Qt is bundled with python package itself; this usually means we are dealing with with PyPI
- # wheels.
- resolved_qt_prefix_path = pathlib.Path(self.location['PrefixPath']).resolve()
- self.qt_inside_package = (
- self.package_location == resolved_qt_prefix_path or # PySide2 and PySide6 Windows PyPI wheels
- self.package_location in resolved_qt_prefix_path.parents
- )
-
- # Determine directory that contains Qt shared libraries. On non-Windows, this is typically location given by
- # `LibrariesPath`. On Windows, it is usually `BinariesPath`, except for PySide PyPI wheels, where DLLs are
- # placed in top-level `PrefixPath`.
- if compat.is_win:
- if self.qt_inside_package and not self.is_pyqt:
- # Windows PyPI wheel
- qt_lib_dir = self.location['PrefixPath']
- else:
- qt_lib_dir = self.location['BinariesPath']
- else:
- qt_lib_dir = self.location['LibrariesPath']
- self.qt_lib_dir = pathlib.Path(qt_lib_dir).resolve()
-
- # Module information list loading/processing
- def _load_module_info(self):
- """
- Process the Qt modules info definition list and construct two dictionaries:
- - dictionary that maps Qt python module names to Qt module info entries
- - dictionary that maps shared library names to Qt module info entries
- """
-
- self.python_modules = dict()
- self.shared_libraries = dict()
-
- for entry in _modules_info.QT_MODULES_INFO:
- # If entry specifies applicable bindings, check them
- if entry.bindings:
- applicable_bindings = _modules_info.process_namespace_strings(entry.bindings)
- if self.namespace not in applicable_bindings:
- continue
-
- # Create a QtModuleInfo entry
- info_entry = QtModuleInfo(
- module=entry.module,
- shared_lib=f"Qt{self.qt_major}{entry.shared_lib}" if entry.shared_lib else None,
- translations=entry.translations,
- plugins=entry.plugins
- )
-
- # If we have python module (extension) name, create python-module-name -> info mapping.
- if info_entry.module is not None:
- self.python_modules[info_entry.module] = info_entry
-
- # If we have Qt module (shared library) name, create shared-lib-name -> info mapping.
- if info_entry.shared_lib is not None:
- self.shared_libraries[info_entry.shared_lib.lower()] = info_entry
-
- def _normalize_shared_library_name(self, filename):
- """
- Normalize a shared library name into common form that we can use for look-ups and comparisons.
- Primarily intended for Qt shared library names.
- """
-
- # Take base name, remove suffix, and lower case it.
- lib_name = os.path.splitext(os.path.basename(filename))[0].lower()
- # Linux libraries sometimes have a dotted version number -- ``libfoo.so.3``. It is now ''libfoo.so``,
- # but the ``.so`` must also be removed.
- if compat.is_linux and os.path.splitext(lib_name)[1] == '.so':
- lib_name = os.path.splitext(lib_name)[0]
- # Remove the "lib" prefix (Linux, macOS).
- if lib_name.startswith('lib'):
- lib_name = lib_name[3:]
- # macOS: handle different naming schemes. PyPI wheels ship framework-enabled Qt builds, where shared
- # libraries are part of .framework bundles (e.g., ``PyQt5/Qt5/lib/QtCore.framework/Versions/5/QtCore``).
- # In Anaconda (Py)Qt installations, the shared libraries are installed in environment's library directory,
- # and contain versioned extensions, e.g., ``libQt5Core.5.dylib``.
- if compat.is_darwin:
- if lib_name.startswith('qt') and not lib_name.startswith('qt' + str(self.qt_major)):
- # Qt library from a framework bundle (e.g., ``QtCore``); change prefix from ``qt`` to ``qt5`` or
- # ``qt6`` to match names in Windows/Linux.
- lib_name = 'qt' + str(self.qt_major) + lib_name[2:]
- if lib_name.endswith('.' + str(self.qt_major)):
- # Qt library from Anaconda, which originally had versioned extension, e.g., ``libfoo.5.dynlib``.
- # The above processing turned it into ``foo.5``, so we need to remove the last two characters.
- lib_name = lib_name[:-2]
-
- # Handle cases with QT_LIBINFIX set to '_conda', i.e. conda-forge builds.
- if lib_name.endswith('_conda'):
- lib_name = lib_name[:-6]
-
- return lib_name
-
- # Collection
- def collect_module(self, module_name):
- """
- Collect all dependencies (hiddenimports, binaries, datas) for the given Qt python module.
-
- This function performs recursive analysis of extension module's link-time dependencies, and uses dictionaries
- built by `_load_module_info` to discover associated plugin types, translation file base names, and hidden
- imports that need to be collected.
- """
-
- # Accumulate all dependencies in a set to avoid duplicates.
- hiddenimports = set()
- translation_base_names = set()
- plugin_types = set()
-
- # Exit if the requested library cannot be imported.
- # NOTE: self..version can be empty list on older Qt5 versions (#5381).
- if self.version is None:
- return [], [], []
-
- logger.debug('%s: processing module %s...', self, module_name)
-
- # Look up the associated Qt module information by python module name.
- # This allows us to collect associated module data directly, even if there is no associated shared library
- # (e.g., header-only Qt module, or statically-built one).
- short_module_name = module_name.split('.', 1)[-1] # PySide2.QtModule -> QtModule
- if short_module_name in self.python_modules:
- qt_module_info = self.python_modules[short_module_name]
-
- # NOTE: no need to add a hiddenimport here, because this is the module under consideration.
-
- # Add plugins
- plugin_types.update(qt_module_info.plugins)
-
- # Add translation base name(s)
- translation_base_names.update(qt_module_info.translations)
-
- # Find the actual module extension file.
- module_file = hooks.get_module_file_attribute(module_name)
-
- # Additional search path for shared library resolution. This is mostly required for library resolution on
- # Windows (Linux and macOS binaries use run paths to find Qt libs).
- qtlib_search_paths = [
- # For PyQt5 and PyQt6 wheels, shared libraries should be in BinariesPath, while for PySide2 and PySide6,
- # they should be in PrefixPath.
- self.location['BinariesPath' if self.is_pyqt else 'PrefixPath'],
- ]
-
- # Walk through all the link-time dependencies of a dynamically-linked library (``.so``/``.dll``/``.dylib``).
- imported_libraries = bindepend.get_imports(module_file, qtlib_search_paths)
- while imported_libraries:
- imported_lib_name, imported_lib_path = imported_libraries.pop() # (name, fullpath) tuple
-
- # Skip unresolved libraries
- if imported_lib_path is None:
- logger.debug("%s: ignoring unresolved library import %r", self, imported_lib_name)
- continue
-
- # Normalize the shared library name
- lib_name = self._normalize_shared_library_name(imported_lib_path)
- logger.debug(
- '%s: imported library %r, full path %r -> parsed name %r.', self, imported_lib_name, imported_lib_path,
- lib_name
- )
-
- # PySide2 and PySide6 on linux seem to link all extension modules against libQt5Core, libQt5Network, and
- # libQt5Qml (or their libQt6* equivalents). While the first two are reasonable, the libQt5Qml dependency
- # pulls in whole QtQml module, along with its data and plugins, which in turn pull in several other Qt
- # libraries, greatly inflating the bundle size (see #6447).
- #
- # Similarly, some extension modules (QtWebChannel, QtWebEngine*) seem to be also linked against libQt5Qml,
- # even when the module can be used without having the whole QtQml module collected.
- #
- # Therefore, we explicitly prevent inclusion of QtQml based on the dynamic library dependency, except for
- # QtQml* and QtQuick* modules, whose use directly implies the use of QtQml.
- if lib_name in ("qt5qml", "qt6qml"):
- if not short_module_name.startswith(('QtQml', 'QtQuick')):
- logger.debug('%s: ignoring imported library %r.', self, lib_name)
- continue
-
- # Use the parsed library name to look up associated Qt module information.
- if lib_name in self.shared_libraries:
- logger.debug('%s: collecting Qt module associated with %r.', self, lib_name)
-
- # Look up associated module info
- qt_module_info = self.shared_libraries[lib_name]
-
- # If there is a python extension module associated with Qt module, add it to hiddenimports. Since this
- # means that we (most likely) have a hook available for that module, we can avoid analyzing the shared
- # library itself (i.e., stop the recursive analysis), because this will be done by the corresponding
- # hook.
- if qt_module_info.module:
- if qt_module_info.module == short_module_name:
- # The one exception is if we are analyzing shared library associated with the input module; in
- # that case, avoid adding a hidden import and analyze the library's link-time dependencies. We
- # do not need to worry about plugins and translations for this particular module, because those
- # have been handled at the beginning of this function.
- imported_libraries.update(bindepend.get_imports(imported_lib_path, qtlib_search_paths))
- else:
- hiddenimports.add(self.namespace + "." + qt_module_info.module)
- continue
-
- # Add plugins
- plugin_types.update(qt_module_info.plugins)
-
- # Add translation base name(s)
- translation_base_names.update(qt_module_info.translations)
-
- # Analyze the linked shared libraries for its dependencies (recursive analysis).
- imported_libraries.update(bindepend.get_imports(imported_lib_path, qtlib_search_paths))
-
- # Collect plugin files.
- binaries = []
- for plugin_type in plugin_types:
- binaries += self.collect_plugins(plugin_type)
-
- # Collect translation files.
- datas = []
- translation_src = self.location['TranslationsPath']
- translation_dst = os.path.join(self.qt_rel_dir, 'translations')
-
- for translation_base_name in translation_base_names:
- # Not all PyQt5 installations include translations. See
- # https://github.com/pyinstaller/pyinstaller/pull/3229#issuecomment-359479893
- # and
- # https://github.com/pyinstaller/pyinstaller/issues/2857#issuecomment-368744341.
- translation_pattern = os.path.join(translation_src, translation_base_name + '_*.qm')
- translation_files = glob.glob(translation_pattern)
- if translation_files:
- datas += [(translation_file, translation_dst) for translation_file in translation_files]
- else:
- logger.warning(
- '%s: could not find translations with base name %r! These translations will not be collected.',
- self, translation_base_name
- )
-
- # Convert hiddenimports to a list.
- hiddenimports = list(hiddenimports)
-
- logger.debug(
- '%s: dependencies for %s:\n'
- ' hiddenimports = %r\n'
- ' binaries = %r\n'
- ' datas = %r', self, module_name, hiddenimports, binaries, datas
- )
-
- return hiddenimports, binaries, datas
-
- @staticmethod
- def _filter_release_plugins(plugin_files):
- """
- Filter the provided list of Qt plugin files and remove the debug variants, under the assumption that both the
- release version of a plugin (qtplugin.dll) and its debug variant (qtplugind.dll) appear in the list.
- """
- # All basenames for lookup
- plugin_basenames = {os.path.normcase(os.path.basename(f)) for f in plugin_files}
- # Process all given filenames
- release_plugin_files = []
- for plugin_filename in plugin_files:
- plugin_basename = os.path.normcase(os.path.basename(plugin_filename))
- if plugin_basename.endswith('d.dll'):
- # If we can find a variant without trailing 'd' in the plugin list, then the DLL we are dealing with is
- # a debug variant and needs to be excluded.
- release_name = os.path.splitext(plugin_basename)[0][:-1] + '.dll'
- if release_name in plugin_basenames:
- continue
- release_plugin_files.append(plugin_filename)
- return release_plugin_files
-
- def collect_plugins(self, plugin_type):
- """
- Collect all plugins of the specified type from the Qt plugin directory.
-
- Returns list of (src, dst) tuples.
- """
- # Ensure plugin directory exists
- plugin_src_dir = self.location['PluginsPath']
- if not os.path.isdir(plugin_src_dir):
- raise Exception(f"Qt plugin directory '{plugin_src_dir}' does not exist!")
-
- # Collect all shared lib files in plugin type (sub)directory
- plugin_files = misc.dlls_in_dir(os.path.join(plugin_src_dir, plugin_type))
-
- # Windows:
- #
- # dlls_in_dir() grabs all files ending with ``*.dll``, ``*.so`` and ``*.dylib`` in a certain directory. On
- # Windows this would grab debug copies of Qt plugins, which then causes PyInstaller to add a dependency on the
- # Debug CRT *in addition* to the release CRT.
- if compat.is_win:
- plugin_files = self._filter_release_plugins(plugin_files)
-
- logger.debug("%s: found plugin files for plugin type %r: %r", self, plugin_type, plugin_files)
-
- plugin_dst_dir = os.path.join(self.qt_rel_dir, 'plugins', plugin_type)
-
- # Exclude plugins with invalid Qt dependencies.
- binaries = []
- for plugin_file in plugin_files:
- valid, reason = self._validate_plugin_dependencies(plugin_file)
- if valid:
- binaries.append((plugin_file, plugin_dst_dir))
- else:
- logger.debug("%s: excluding plugin %r (%r)! Reason: %s", self, plugin_file, plugin_type, reason)
- return binaries
-
- def _validate_plugin_dependencies(self, plugin_file):
- """
- Validate Qt dependencies of the given Qt plugin file. For the plugin to pass validation, all its Qt dependencies
- must be available (resolvable), and must be resolvable from the default Qt shared library directory (to avoid
- pulling in libraries from unrelated Qt installations that happen to be in search path).
- """
-
- imported_libraries = bindepend.get_imports(plugin_file, search_paths=[self.qt_lib_dir])
- for imported_lib_name, imported_lib_path in imported_libraries:
- # Parse/normalize the (unresolved) library name, to determine if dependency is a Qt shared library. If not,
- # skip the validation.
- lib_name = self._normalize_shared_library_name(imported_lib_name)
- if not lib_name.startswith(f"qt{self.qt_major}"):
- continue
-
- if imported_lib_path is None:
- return False, f"Missing Qt dependency {imported_lib_name!r}."
-
- imported_lib_path = pathlib.Path(imported_lib_path).resolve()
- if self.qt_lib_dir not in imported_lib_path.parents:
- return (
- False,
- f"Qt dependency {imported_lib_name!r} ({str(imported_lib_path)!r}) has been resolved outside of "
- f"the Qt shared library directory ({str(self.qt_lib_dir)!r})."
- )
-
- return True, None
-
- def _collect_all_or_none(self, mandatory_dll_patterns, optional_dll_patterns=None):
- """
- Try to find Qt DLLs from the specified mandatory pattern list. If all mandatory patterns resolve to DLLs,
- collect them all, as well as any DLLs from the optional pattern list. If a mandatory pattern fails to resolve
- to a DLL, return an empty list.
-
- This allows all-or-none collection of particular groups of Qt DLLs that may or may not be available.
- """
- optional_dll_patterns = optional_dll_patterns or []
-
- # Package parent path; used to preserve the directory structure when DLLs are collected from the python
- # package (e.g., PyPI wheels).
- package_parent_path = self.package_location.parent
-
- # On Windows, DLLs are typically placed in `location['BinariesPath']`, except for PySide PyPI wheels, where
- # `location['PrefixPath']` is used. This difference is already handled by `qt_lib_dir`, which is also fully
- # resolved.
- dll_path = self.qt_lib_dir
-
- # Helper for processing single DLL pattern
- def _process_dll_pattern(dll_pattern):
- discovered_dlls = []
-
- dll_files = dll_path.glob(dll_pattern)
- for dll_file in dll_files:
- if package_parent_path in dll_file.parents:
- # The DLL is located within python package; preserve the layout
- dst_dll_dir = dll_file.parent.relative_to(package_parent_path)
- else:
- # The DLL is not located within python package; collect into top-level directory
- dst_dll_dir = '.'
- discovered_dlls.append((str(dll_file), str(dst_dll_dir)))
-
- return discovered_dlls
-
- # Process mandatory patterns
- collected_dlls = []
- for pattern in mandatory_dll_patterns:
- discovered_dlls = _process_dll_pattern(pattern)
- if not discovered_dlls:
- return [] # Mandatory pattern resulted in no DLLs; abort
- collected_dlls += discovered_dlls
-
- # Process optional patterns
- for pattern in optional_dll_patterns:
- collected_dlls += _process_dll_pattern(pattern)
-
- return collected_dlls
-
- # Collect required Qt binaries, but only if all binaries in a group exist.
- def collect_extra_binaries(self):
- """
- Collect extra binaries/DLLs required by Qt. These include ANGLE DLLs, OpenGL software renderer DLL, and ICU
- DLLs. Applicable only on Windows (on other OSes, empty list is returned).
- """
-
- binaries = []
-
- # Applicable only to Windows.
- if not compat.is_win:
- return []
-
- # OpenGL: EGL/GLES via ANGLE, software OpenGL renderer.
- binaries += self._collect_all_or_none(['libEGL.dll', 'libGLESv2.dll'], ['d3dcompiler_??.dll'])
- binaries += self._collect_all_or_none(['opengl32sw.dll'])
-
- # Include ICU files, if they exist.
- # See the "Deployment approach" section at the top of this file.
- binaries += self._collect_all_or_none(['icudt??.dll', 'icuin??.dll', 'icuuc??.dll'])
-
- return binaries
-
- # Collect additional shared libraries required for SSL support in QtNetwork, if they are available.
- # Primarily applicable to Windows (see issue #3520, #4048).
- def collect_qtnetwork_files(self):
- """
- Collect extra binaries/shared libraries required by the QtNetwork module, such as OpenSSL shared libraries.
- """
-
- # No-op if requested Qt-based package is not available.
- if self.version is None:
- return []
-
- # Check if QtNetwork supports SSL and has OpenSSL backend available (Qt >= 6.1).
- # Also query the run-time OpenSSL version, so we know what dynamic libraries we need to search for.
- @isolated.decorate
- def _check_if_openssl_enabled(package):
- import sys
- import importlib
-
- # Import the Qt-based package
- # equivalent to: from package.QtCore import QCoreApplication
- QtCore = importlib.import_module('.QtCore', package)
- QCoreApplication = QtCore.QCoreApplication
- QLibraryInfo = QtCore.QLibraryInfo
- # equivalent to: from package.QtNetwork import QSslSocket
- QtNetwork = importlib.import_module('.QtNetwork', package)
- QSslSocket = QtNetwork.QSslSocket
-
- # Instantiate QCoreApplication to suppress warnings
- app = QCoreApplication(sys.argv) # noqa: F841
-
- if not QSslSocket.supportsSsl():
- return False, None
-
- # Query the run-time OpenSSL version
- openssl_version = QSslSocket.sslLibraryVersionNumber()
-
- # For Qt >= 6.1, check if `openssl` TLS backend is available
- try:
- qt_version = QLibraryInfo.version().segments()
- except AttributeError:
- qt_version = [] # Qt <= 5.8
-
- if qt_version < [6, 1]:
- return True, openssl_version # TLS backends not implemented yet
-
- return ('openssl' in QSslSocket.availableBackends(), openssl_version)
-
- openssl_enabled, openssl_version = _check_if_openssl_enabled(self.namespace)
- if not openssl_enabled or openssl_version == 0:
- logger.debug("%s: QtNetwork: does not support SSL or does not use OpenSSL.", self)
- return []
-
- # The actual search is handled in OS-specific ways.
- if compat.is_win:
- return self._collect_qtnetwork_openssl_windows(openssl_version)
- elif compat.is_darwin:
- return self._collect_qtnetwork_openssl_macos(openssl_version)
- elif compat.is_linux:
- return self._collect_qtnetwork_openssl_linux(openssl_version)
- else:
- logger.warning("%s: QtNetwork: collection of OpenSSL not implemented for this platform!")
- return []
-
- def _collect_qtnetwork_openssl_windows(self, openssl_version):
- """
- Windows-specific collection of OpenSSL DLLs required by QtNetwork module.
- """
-
- # Package parent path; used to preserve the directory structure when DLLs are collected from the python
- # package (e.g., PyPI wheels).
- package_parent_path = self.package_location.parent
-
- # The OpenSSL DLLs might be shipped with PyPI wheel (PyQt5), might be available in the environment (msys2,
- # anaconda), or might be expected to be available in the environment (PySide2, PySide6, PyQt6 PyPI wheels).
- #
- # The OpenSSL DLL naming scheme depends on the version:
- # - OpenSSL 1.0.x: libeay32.dll, ssleay32.dll
- # - OpenSSL 1.1.x 32-bit: libssl-1_1.dll, libcrypto-1_1.dll
- # - OpenSSL 1.1.x 64-bit: libssl-1_1-x64.dll, libcrypto-1_1-x64.dll
- # - OpenSSL 3.0.x 32-bit: libssl-1.dll, libcrypto-3.dll
- # - OpenSSL 3.0.x 64-bit: libssl-3-x64.dll, libcrypto-3-x64.dll
- #
- # The official Qt builds (which are used by PySide and PyQt PyPI wheels) seem to be build against:
- # - OpenSSL 1.1.x starting with Qt5 5.14.2:
- # https://www.qt.io/blog/2019/06/17/qt-5-12-4-released-support-openssl-1-1-1
- # - OpenSSL 3.x starting with Qt6 6.5.0:
- # https://www.qt.io/blog/moving-to-openssl-3-in-binary-builds-starting-from-qt-6.5-beta-2
- #
- # However, a package can build Qt against OpenSSL version of their own choice. For example, at the time of
- # writing, both mingw-w64-x86_64-qt5-base 5.15.11+kde+r138-1 and mingw-w64-x86_64-qt6-base 6.6.0-2 packages
- # depend on mingw-w64-x86_64-openssl 3.1.4-1 (so OpenSSL 3).
- #
- # Luckily, we can query the run-time version of OpenSSL by calling `QSslSocket.sslLibraryVersionNumber()`,
- # and narrow down the search for specific version.
- if openssl_version >= 0x10000000 and openssl_version < 0x10100000:
- # OpenSSL 1.0.x - used by old Qt5 builds
- dll_names = (
- 'libeay32.dll',
- 'ssleay32.dll',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 1.0.x DLLs: %r", self, dll_names)
- elif openssl_version >= 0x10100000 and openssl_version < 0x30000000:
- # OpenSSL 1.1.x
- dll_names = (
- 'libssl-1_1-x64.dll' if compat.is_64bits else 'libssl-1_1.dll',
- 'libcrypto-1_1-x64.dll' if compat.is_64bits else 'libcrypto-1_1.dll',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 1.1.x DLLs: %r", self, dll_names)
- elif openssl_version >= 0x30000000 and openssl_version < 0x40000000:
- # OpenSSL 3.0.x
- dll_names = (
- 'libssl-3-x64.dll' if compat.is_64bits else 'libssl-3.dll',
- 'libcrypto-3-x64.dll' if compat.is_64bits else 'libcrypto-3.dll',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 3.0.x DLLs: %r", self, dll_names)
- else:
- dll_names = [] # Nothing to search for
- logger.warning("%s: QtNetwork: unsupported OpenSSL version: %X", self, openssl_version)
-
- binaries = []
- found_in_package = False
- for dll in dll_names:
- # Attempt to resolve the DLL path
- dll_file_path = bindepend.resolve_library_path(dll, search_paths=[self.qt_lib_dir])
- if dll_file_path is None:
- continue
- dll_file_path = pathlib.Path(dll_file_path).resolve()
- if package_parent_path in dll_file_path.parents:
- # The DLL is located within python package; preserve the layout
- dst_dll_path = dll_file_path.parent.relative_to(package_parent_path)
- found_in_package = True
- else:
- # The DLL is not located within python package; collect into top-level directory
- dst_dll_path = '.'
- binaries.append((str(dll_file_path), str(dst_dll_path)))
-
- # If we found at least one OpenSSL DLL in the bindings' python package directory, discard all external
- # OpenSSL DLLs.
- if found_in_package:
- binaries = [(dll_src_path, dll_dest_path) for dll_src_path, dll_dest_path in binaries
- if package_parent_path in pathlib.Path(dll_src_path).parents]
-
- return binaries
-
- def _collect_qtnetwork_openssl_macos(self, openssl_version):
- """
- macOS-specific collection of OpenSSL dylibs required by QtNetwork module.
- """
-
- # The official Qt5 builds on macOS (shipped by PyPI wheels) appear to be built with Apple's SecureTransport API
- # instead of OpenSSL; for example, `QSslSocket.sslLibraryVersionNumber` returns 0, while
- # `sslLibraryVersionString()` returns "Secure Transport, macOS 12.6". So with PySide2 and PyQt5, we do not need
- # to worry about collection of OpenSSL shared libraries.
- #
- # Support for OpenSSL was introduced in Qt 6.1 with `openssl` TLS backend; the official Qt6 builds prior to 6.5
- # seem to be built with OpenSSL 1.1.x, and later versions with 3.0.x. However, PySide6 and PyQt6 PyPI wheels do
- # not ship OpenSSL dynamic libraries at all , so whether `openssl` TLS backend is used or not depends on the
- # presence of externally provided OpenSSL dynamic libraries (for example, provided by Homebrew). It is worth
- # noting that python.org python installers *do* provide OpenSSL shared libraries (1.1.x for python <= 3.10,
- # 3.0.x for python >= 3.12, and both for python 3.11) for its `_ssl` extension - however, these are NOT visible
- # to Qt and its QtNetwork module.
- #
- # When the frozen application is built and we collect python's `_ssl` extension, we also collect the OpenSSL
- # shared libraries shipped by python. So at least in theory, those should be available to QtNetwork module as
- # well (assuming they are of compatible version). However, this is not exactly the case - QtNetwork looks for
- # the libraries in locations given by `DYLD_LIBRARY_PATH` environment variable and in .app/Contents/Frameworks
- # (if the program is an .app bundle):
- #
- # https://github.com/qt/qtbase/blob/6.6.0/src/plugins/tls/openssl/qsslsocket_openssl_symbols.cpp#L590-L599
- #
- # So it works out-of-the box for our .app bundles, because starting with PyInstaller 6.0, `sys._MEIPASS` is in
- # .app/Contents/Frameworks. But it does not with POSIX builds, because bootloader does not modify the
- # `DYLD_LIBRARY_PATH` environment variable to include `sys._MEIPASS` (since we usually do not need that;
- # regular linked library resolution in our macOS builds is done via path rewriting and rpaths). So either we
- # need a run-time hook to add `sys._MEIPASS` to `DYLD_LIBRARY_PATH`, or modify the bootloader to always do that.
- #
- # Collecting the OpenSSL library and making it discoverable by adding `sys._MEIPASS` to `DYLD_LIBRARY_PATH`
- # should also prevent QtNetwork from "accidentally" pulling in Homebrew version at run-time (if Homebrew is
- # installed on the target system and provides compatible OpenSSL version).
- #
- # Therefore, try to resolve OpenSSL library via the version indicated by `QSslSocket.sslLibraryVersionNumber`;
- # however, we first explicitly search only {sys.base_prefix}/lib (which is where python.org builds put their
- # dynamic libs), and only if that fails, perform regular dylib path resolution. This way we ensure that if the
- # OpenSSL dylibs are provided by python itself, we always prefer those over the Homebrew version (since we are
- # very likely going to collect them for python's `_ssl` extension anyway).
-
- # As per above text, we need to worry only about Qt6, and thus OpenSSL 1.1.x or 3.0.x
- if openssl_version >= 0x10100000 and openssl_version < 0x30000000:
- # OpenSSL 1.1.x
- dylib_names = (
- 'libcrypto.1.1.dylib',
- 'libssl.1.1.dylib',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 1.1.x dylibs: %r", self, dylib_names)
- elif openssl_version >= 0x30000000 and openssl_version < 0x40000000:
- # OpenSSL 3.0.x
- dylib_names = (
- 'libcrypto.3.dylib',
- 'libssl.3.dylib',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 3.0.x dylibs: %r", self, dylib_names)
- else:
- dylib_names = [] # Nothing to search for
- logger.warning("%s: QtNetwork: unsupported OpenSSL version: %X", self, openssl_version)
-
- # Compared to Windows, we do not have to worry about dylib's path preservation, as these are never part of
- # the package, and are therefore always collected to the top-level application directory.
- binaries = []
- base_prefix_lib_dir = os.path.join(compat.base_prefix, 'lib')
- for dylib in dylib_names:
- # First, attempt to resolve using only {sys.base_prefix}/lib - `bindepend.resolve_library_path` uses
- # standard dyld search semantics and uses the given search paths as fallback (and would therefore
- # favor Homebrew-provided version of the library).
- dylib_path = bindepend._resolve_library_path_in_search_paths(dylib, search_paths=[base_prefix_lib_dir])
- if dylib_path is None:
- dylib_path = bindepend.resolve_library_path(dylib, search_paths=[base_prefix_lib_dir, self.qt_lib_dir])
- if dylib_path is None:
- continue
- binaries.append((str(dylib_path), '.'))
-
- return binaries
-
- def _collect_qtnetwork_openssl_linux(self, openssl_version):
- """
- Linux-specific collection of OpenSSL dylibs required by QtNetwork module.
- """
-
- # Out of the supported OSes, Linux is by far the most straight-forward, because OpenSSL shared libraries are
- # expected to be provided by the system. So we can just use standard library path resolution with library names
- # inferred from the run-time OpenSSL version. At run-time, QtNetwork searches paths from `LD_LIBRARY_PATH`, and
- # on Linux, our bootloader already adds `sys._MEIPASS` to that environment variable.
-
- if openssl_version >= 0x10000000 and openssl_version < 0x10100000:
- # OpenSSL 1.0.x - used by old Qt5 builds
- shlib_names = (
- 'libcrypto.so.10',
- 'libssl.so.10',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 1.0.x shared libraries: %r", self, shlib_names)
- elif openssl_version >= 0x10100000 and openssl_version < 0x30000000:
- # OpenSSL 1.1.x
- shlib_names = (
- 'libcrypto.so.1.1',
- 'libssl.so.1.1',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 1.1.x shared libraries: %r", self, shlib_names)
- elif openssl_version >= 0x30000000 and openssl_version < 0x40000000:
- # OpenSSL 3.0.x
- shlib_names = (
- 'libcrypto.so.3',
- 'libssl.so.3',
- )
- logger.debug("%s: QtNetwork: looking for OpenSSL 3.0.x shared libraries: %r", self, shlib_names)
- else:
- shlib_names = [] # Nothing to search for
- logger.warning("%s: QtNetwork: unsupported OpenSSL version: %X", self, openssl_version)
-
- binaries = []
- for shlib in shlib_names:
- shlib_path = bindepend.resolve_library_path(shlib)
- if shlib_path is None:
- continue
- binaries.append((str(shlib_path), '.'))
-
- return binaries
-
- def collect_qtqml_files(self):
- """
- Collect additional binaries and data for QtQml module.
- """
-
- # No-op if requested Qt-based package is not available.
- if self.version is None:
- return [], []
-
- # Not all PyQt5/PySide2 installs have QML files. In this case, location['Qml2ImportsPath'] is empty.
- # Furthermore, even if location path is provided, the directory itself may not exist.
- #
- # https://github.com/pyinstaller/pyinstaller/pull/3229#issuecomment-359735031
- # https://github.com/pyinstaller/pyinstaller/issues/3864
- #
- # In Qt 6, Qml2ImportsPath was deprecated in favor of QmlImportsPath. The former is not available in PySide6
- # 6.4.0 anymore (but is in PyQt6 6.4.0). Use the new QmlImportsPath if available.
- if 'QmlImportsPath' in self.location:
- qml_src_dir = self.location['QmlImportsPath']
- else:
- qml_src_dir = self.location['Qml2ImportsPath']
- if not qml_src_dir or not os.path.isdir(qml_src_dir):
- logger.warning('%s: QML directory %r does not exist. QML files not packaged.', self, qml_src_dir)
- return [], []
-
- qml_src_path = pathlib.Path(qml_src_dir).resolve()
- qml_dest_path = pathlib.PurePath(self.qt_rel_dir) / 'qml'
-
- binaries = []
- datas = []
-
- # Helper that computes the destination directory for the given file or directory from a QML plugin directory.
- def _compute_dest_dir(src_filename):
- if src_filename.is_dir():
- rel_path = src_filename.relative_to(qml_src_path)
- else:
- rel_path = src_filename.relative_to(qml_src_path).parent
- return qml_dest_path / rel_path
-
- # Discover all QML plugin sub-directories by searching for `qmldir` files.
- qmldir_files = qml_src_path.rglob('**/qmldir')
- for qmldir_file in sorted(qmldir_files):
- plugin_dir = qmldir_file.parent
- logger.debug("%s: processing QML plugin directory %s", self, plugin_dir)
-
- try:
- # Obtain lists of source files (separated into binaries and data files).
- plugin_binaries, plugin_datas = self._process_qml_plugin(qmldir_file)
- # Convert into (src, dest) tuples.
- binaries += [(str(src_file), str(_compute_dest_dir(src_file))) for src_file in plugin_binaries]
- datas += [(str(src_file), str(_compute_dest_dir(src_file))) for src_file in plugin_datas]
- except Exception:
- logger.warning("%s: failed to process QML plugin directory %s", self, plugin_dir, exc_info=True)
-
- return binaries, datas
-
- # https://doc.qt.io/qt-6/qtqml-modules-qmldir.html#plugin-declaration
- # [optional] plugin [
- _qml_plugin_def = re.compile(r"^(?:(?:optional)\s+)?(?:plugin)\s+(?P\w+)(?:\s+(?P\.+))?$")
-
- def _process_qml_plugin(self, qmldir_file):
- """
- Processes the QML directory corresponding to the given `qmldir` file.
-
- Returns lists of binaries and data files, but only the source file names. It is up to caller to turn these into
- lists of (src, dest) tuples.
- """
- plugin_dir = qmldir_file.parent
-
- plugin_binaries = set()
-
- # Read the `qmldir` file to determine the names of plugin binaries, if any.
- contents = qmldir_file.read_text(encoding="utf-8")
- for line in contents.splitlines():
- m = self._qml_plugin_def.match(line)
- if m is None:
- continue
-
- plugin_name = m.group("name")
- plugin_path = m.group("path")
-
- # We currently do not support custom plugin path - neither relative nor absolute (the latter will never
- # be supported, because to make it relocatable, we would need to modify the `qmpldir file`).
- if plugin_path is not None:
- raise Exception(f"Non-empty plugin path ({plugin_path!r} is not supported yet!")
-
- # Turn the plugin base name into actual shared lib name.
- if compat.is_linux:
- plugin_file = plugin_dir / f"lib{plugin_name}.so"
- elif compat.is_win:
- plugin_file = plugin_dir / f"{plugin_name}.dll"
- elif compat.is_darwin:
- plugin_file = plugin_dir / f"lib{plugin_name}.dylib"
- else:
- continue # This implicitly disables subsequent validation on unhandled platforms.
-
- # Warn if plugin file does not exist
- if not plugin_file.is_file():
- logger.warn("%s: QML plugin binary %r does not exist!", str(plugin_file))
- continue
-
- plugin_binaries.add(plugin_file)
-
- # Exclude plugins with invalid Qt dependencies.
- invalid_binaries = False
- for plugin_binary in plugin_binaries:
- valid, reason = self._validate_plugin_dependencies(plugin_binary)
- if not valid:
- logger.debug("%s: excluding QML plugin binary %r! Reason: %s", self, str(plugin_binary), reason)
- invalid_binaries = True
-
- # If there was an invalid binary, discard the plugin.
- if invalid_binaries:
- logger.debug("%s: excluding QML plugin directory %r due to invalid plugin binaries!", self, str(plugin_dir))
- return [], []
-
- # Generate binaries list.
- binaries = sorted(plugin_binaries)
-
- # Generate list of data files - all content of this directory, except for the plugin binaries. Sub-directories
- # are included if they do not contain a `qmldir` file (we do not recurse into the directory, but instead pass
- # only its name, leaving the recursion to PyInstaller's built-in expansion of paths returned by hooks).
- datas = []
- for entry in plugin_dir.iterdir():
- if entry.is_file():
- if entry in plugin_binaries:
- continue
- else:
- if (entry / "qmldir").is_file():
- continue
- datas.append(entry)
-
- return binaries, datas
-
- def collect_qtwebengine_files(self):
- """
- Collect QtWebEngine helper process executable, translations, and resources.
- """
-
- binaries = []
- datas = []
-
- # Output directory (varies between PyQt and PySide and among OSes; the difference is abstracted by
- # QtLibraryInfo.qt_rel_dir)
- rel_data_path = self.qt_rel_dir
-
- is_macos_framework = False
- if compat.is_darwin:
- # Determine if we are dealing with a framework-based Qt build (e.g., PyPI wheels) or a dylib-based one
- # (e.g., Anaconda). The former requires special handling, while the latter is handled in the same way as
- # Windows and Linux builds.
- is_macos_framework = os.path.exists(
- os.path.join(self.location['LibrariesPath'], 'QtWebEngineCore.framework')
- )
-
- if is_macos_framework:
- # macOS .framework bundle
- src_framework_path = os.path.join(self.location['LibrariesPath'], 'QtWebEngineCore.framework')
-
- # If Qt libraries are bundled with the package, collect the .framework bundle into corresponding package's
- # subdirectory, because binary dependency analysis will also try to preserve the directory structure.
- # However, if we are collecting from system-wide Qt installation (e.g., Homebrew-installed Qt), the binary
- # depndency analysis will attempt to re-create .framework bundle in top-level directory, so we need to
- # collect the extra files there.
- bundled_qt_libs = pathlib.Path(self.package_location) in pathlib.Path(src_framework_path).parents
- if bundled_qt_libs:
- dst_framework_path = os.path.join(rel_data_path, 'lib/QtWebEngineCore.framework')
- else:
- dst_framework_path = 'QtWebEngineCore.framework' # In top-level directory
-
- # Determine the version directory - for now, we assume we are dealing with single-version framework;
- # i.e., the Versions directory contains only a single directory, and Current symlink to it.
- versions = sorted([
- version for version in os.listdir(os.path.join(src_framework_path, 'Versions')) if version != 'Current'
- ])
- if len(versions) == 0:
- raise RuntimeError("Could not determine version of the QtWebEngineCore.framework!")
- elif len(versions) > 1:
- logger.warning(
- "Found multiple versions in QtWebEngineCore.framework (%r) - using the last one!", versions
- )
- version = versions[-1]
-
- # Collect the Helpers directory. In well-formed .framework bundles (such as the ones provided by Homebrew),
- # the Helpers directory is located in the versioned directory, and symlinked to the top-level directory.
- src_helpers_path = os.path.join(src_framework_path, 'Versions', version, 'Helpers')
- dst_helpers_path = os.path.join(dst_framework_path, 'Versions', version, 'Helpers')
- if not os.path.exists(src_helpers_path):
- # Alas, the .framework bundles shipped with contemporary PyPI PyQt/PySide wheels are not well-formed
- # (presumably because .whl cannot preserve symlinks?). The Helpers in the top-level directory is in fact
- # the hard copy, and there is either no Helpers in versioned directory, or there is a duplicate.
- # So fall back to collecting from the top-level, but collect into versioned directory in order to
- # be compliant with codesign's expectations.
- src_helpers_path = os.path.join(src_framework_path, 'Helpers')
-
- helper_datas = hooks.collect_system_data_files(src_helpers_path, dst_helpers_path)
-
- # Filter out the actual helper executable from datas, and add it to binaries instead. This ensures that it
- # undergoes additional binary processing that rewrites the paths to linked libraries.
- HELPER_EXE = 'QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess'
- for src_name, dest_name in helper_datas:
- if src_name.endswith(HELPER_EXE):
- binaries.append((src_name, dest_name))
- else:
- datas.append((src_name, dest_name))
-
- # Collect the Resources directory; same logic is used as with Helpers directory.
- src_resources_path = os.path.join(src_framework_path, 'Versions', version, 'Resources')
- dst_resources_path = os.path.join(dst_framework_path, 'Versions', version, 'Resources')
- if not os.path.exists(src_resources_path):
- src_resources_path = os.path.join(src_framework_path, 'Resources')
-
- datas += hooks.collect_system_data_files(src_resources_path, dst_resources_path)
-
- # NOTE: the QtWebEngineProcess helper is actually sought within the `QtWebEngineCore.framework/Helpers`,
- # which ought to be a symlink to `QtWebEngineCore.framework/Versions/Current/Helpers`, where `Current`
- # is also a symlink to the actual version directory, `A`.
- #
- # These symlinks are created automatically when the TOC list of collected resources is post-processed
- # using `PyInstaller.utils.osx.collect_files_from_framework_bundles` helper, so we do not have to
- # worry about them here...
- else:
- # Windows and linux (or Anaconda on macOS)
- locales = 'qtwebengine_locales'
- resources = 'resources'
-
- # Translations
- datas.append((
- os.path.join(self.location['TranslationsPath'], locales),
- os.path.join(rel_data_path, 'translations', locales),
- ))
-
- # Resources; ``DataPath`` is the base directory for ``resources``, as per the
- # `docs `_.
- datas.append((os.path.join(self.location['DataPath'], resources), os.path.join(rel_data_path, resources)),)
-
- # Helper process executable (QtWebEngineProcess), located in ``LibraryExecutablesPath``.
- # The target directory is determined as `LibraryExecutablesPath` relative to `PrefixPath`. On Windows,
- # this should handle the differences between PySide2/PySide6 and PyQt5/PyQt6 PyPI wheel layout.
- rel_helper_path = os.path.relpath(self.location['LibraryExecutablesPath'], self.location['PrefixPath'])
-
- # However, on Linux, we need to account for distribution-packaged Qt, where `LibraryExecutablesPath` might
- # be nested deeper under `PrefixPath` than anticipated (w.r.t. PyPI wheel layout). For example, in Fedora,
- # the helper is located under `/usr/lib64/qt5/libexec/QtWebEngineProcess`, with `PrefixPath` being `/usr`
- # and `LibraryExecutablesPath` being `/usr/lib64/qt5/libexec/`, so the relative path ends up being
- # `lib64/qt5/libexec` instead of just `libexec`. So on linux, we explicitly force the PyPI-compliant
- # layout, by overriding relative helper path to just `libexec`.
- if compat.is_linux and rel_helper_path != "libexec":
- logger.info(
- "%s: overriding relative destination path of QtWebEngineProcess helper from %r to %r!", self,
- rel_helper_path, "libexec"
- )
- rel_helper_path = "libexec"
-
- # Similarly, force the relative helper path for PySide2/PySide6 on Windows to `.`. This is already the case
- # with PyPI PySide Windows wheels. But it is not the case with conda-installed PySide2, where the Qt's
- # `PrefixPath` is for example `C:/Users//miniconda3/envs//Library`, while the corresponding
- # `LibraryExecutablesPath` is `C:/Users//miniconda3/envs//Library/bin`.
- if compat.is_win and not self.is_pyqt and rel_helper_path != ".":
- logger.info(
- "%s: overriding relative destination path of QtWebEngineProcess helper from %r to %r!", self,
- rel_helper_path, "."
- )
- rel_helper_path = "."
-
- dest = os.path.normpath(os.path.join(rel_data_path, rel_helper_path))
- binaries.append((os.path.join(self.location['LibraryExecutablesPath'], 'QtWebEngineProcess*'), dest))
-
- # The helper QtWebEngineProcess executable should have an accompanying qt.conf file that helps it locate the
- # Qt shared libraries. Try collecting it as well
- qt_conf_file = os.path.join(self.location['LibraryExecutablesPath'], 'qt.conf')
- if not os.path.isfile(qt_conf_file):
- # The file seems to have been dropped from Qt 6.3 (and corresponding PySide6 and PyQt6) due to
- # redundancy; however, we still need it in the frozen application - so generate our own.
- from PyInstaller.config import CONF # workpath
- # Relative path to root prefix of bundled Qt - this corresponds to the "inverse" of `rel_helper_path`
- # variable that we computed earlier.
- if rel_helper_path == '.':
- rel_prefix = '.'
- else:
- # Replace each directory component in `rel_helper_path` with `..`.
- rel_prefix = os.path.join(*['..' for _ in range(len(rel_helper_path.split(os.pathsep)))])
- # We expect the relative path to be either . or .. depending on PySide/PyQt layout; if that is not the
- # case, warn about irregular path.
- if rel_prefix not in ('.', '..'):
- logger.warning(
- "%s: unexpected relative Qt prefix path for QtWebEngineProcess qt.conf: %s", self, rel_prefix
- )
- # The Qt docs on qt.conf (https://doc.qt.io/qt-5/qt-conf.html) recommend using forward slashes on
- # Windows as well, due to backslash having to be escaped. This should not matter as we expect the
- # relative path to be . or .., but you never know...
- if os.sep == '\\':
- rel_prefix = rel_prefix.replace(os.sep, '/')
- # Create temporary file in workpath
- qt_conf_file = os.path.join(CONF['workpath'], "qt.conf")
- with open(qt_conf_file, 'w', encoding='utf-8') as fp:
- print("[Paths]", file=fp)
- print("Prefix = {}".format(rel_prefix), file=fp)
- datas.append((qt_conf_file, dest))
-
- # Add Linux-specific libraries.
- if compat.is_linux:
- # The automatic library detection fails for `NSS `_,
- # which is used by QtWebEngine. In some distributions, the ``libnss`` supporting libraries are stored in a
- # subdirectory ``nss``. Since ``libnss`` is not linked against them but loads them dynamically at run-time,
- # we need to search for and add them.
- #
- # Specifically, the files we are looking for are
- # - libfreebl3.so
- # - libfreeblpriv3.so
- # - libnssckbi.so
- # - libnssdbm3.so
- # - libsoftokn3.so
- # and they might be in the same directory as ``libnss3.so`` (instead of ``nss`` subdirectory); this is
- # the case even with contemporary Debian releases. See
- # https://packages.debian.org/bullseye/amd64/libnss3/filelist
- # vs.
- # https://packages.debian.org/bookworm/amd64/libnss3/filelist
-
- # Analyze imports of ``QtWebEngineCore`` extension module, and look for ``libnss3.so`` to determine its
- # parent directory.
- libnss_dir = None
- module_file = hooks.get_module_file_attribute(self.namespace + '.QtWebEngineCore')
- for lib_name, lib_path in bindepend.get_imports(module_file): # (name, fullpath) tuples
- if lib_path is None:
- continue # Skip unresolved libraries
- # Look for ``libnss3.so``.
- if os.path.basename(lib_path).startswith('libnss3.so'):
- libnss_dir = os.path.dirname(lib_path)
- break
-
- # Search for NSS libraries
- logger.debug("%s: QtWebEngineCore is linked against libnss3.so; collecting NSS libraries...", self)
- if libnss_dir is not None:
- # Libraries to search for
- NSS_LIBS = [
- 'libfreebl3.so',
- 'libfreeblpriv3.so',
- 'libnssckbi.so',
- 'libnssdbm3.so',
- 'libsoftokn3.so',
- ]
- # Directories (relative to `libnss_dir`) to search in. Also serve as relative destination paths.
- NSS_LIB_SUBDIRS = [
- 'nss',
- '.',
- ]
-
- for subdir in NSS_LIB_SUBDIRS:
- for lib_name in NSS_LIBS:
- lib_file = os.path.normpath(os.path.join(libnss_dir, subdir, lib_name))
- if os.path.isfile(lib_file):
- logger.debug("%s: collecting NSS library: %r", self, lib_file)
- binaries.append((lib_file, subdir))
-
- return binaries, datas
-
-
-# Provide single instances of this class to avoid each hook constructing its own.
-pyqt5_library_info = QtLibraryInfo('PyQt5')
-pyqt6_library_info = QtLibraryInfo('PyQt6')
-pyside2_library_info = QtLibraryInfo('PySide2')
-pyside6_library_info = QtLibraryInfo('PySide6')
-
-
-def get_qt_library_info(namespace):
- """
- Return QtLibraryInfo instance for the given namespace.
- """
- if namespace == 'PyQt5':
- return pyqt5_library_info
- if namespace == 'PyQt6':
- return pyqt6_library_info
- elif namespace == 'PySide2':
- return pyside2_library_info
- elif namespace == 'PySide6':
- return pyside6_library_info
-
- raise ValueError(f'Invalid namespace: {namespace}!')
-
-
-# add_qt_dependencies
-# --------------------
-# Generic implemnentation that finds the Qt 5/6 dependencies based on the hook name of a PyQt5/PyQt6/PySide2/PySide6
-# hook. Returns (hiddenimports, binaries, datas). Typical usage:
-# ``hiddenimports, binaries, datas = add_qt5_dependencies(__file__)``.
-def add_qt_dependencies(hook_file):
- # Find the module underlying this Qt hook: change ``/path/to/hook-PyQt5.blah.py`` to ``PyQt5.blah``.
- hook_name, hook_ext = os.path.splitext(os.path.basename(hook_file))
- assert hook_ext.startswith('.py')
- assert hook_name.startswith('hook-')
- module_name = hook_name[5:]
- namespace = module_name.split('.')[0]
-
- # Retrieve Qt library info structure....
- qt_info = get_qt_library_info(namespace)
- # ... and use it to collect module dependencies
- return qt_info.collect_module(module_name)
-
-
-# add_qt5_dependencies
-# --------------------
-# Find the Qt5 dependencies based on the hook name of a PySide2/PyQt5 hook. Returns (hiddenimports, binaries, datas).
-# Typical usage: ``hiddenimports, binaries, datas = add_qt5_dependencies(__file__)``.
-add_qt5_dependencies = add_qt_dependencies # Use generic implementation
-
-# add_qt6_dependencies
-# --------------------
-# Find the Qt6 dependencies based on the hook name of a PySide6/PyQt6 hook. Returns (hiddenimports, binaries, datas).
-# Typical usage: ``hiddenimports, binaries, datas = add_qt6_dependencies(__file__)``.
-add_qt6_dependencies = add_qt_dependencies # Use generic implementation
-
-
-# A helper for ensuring that only one Qt bindings package is collected into frozen application. Intended to be called
-# from hooks for top-level bindings packages.
-def ensure_single_qt_bindings_package(qt_bindings):
- # For the lack of better alternative, use CONF structure. Note that this enforces single bindings for the whole
- # spec file instead of individual Analysis instances!
- from PyInstaller.config import CONF
-
- seen_qt_bindings = CONF.get("_seen_qt_bindings")
- if seen_qt_bindings is None:
- CONF["_seen_qt_bindings"] = qt_bindings
- elif qt_bindings != seen_qt_bindings:
- # Raise SystemExit to abort build process
- raise SystemExit(
- "ERROR: Aborting build process due to attempt to collect multiple Qt bindings packages: attempting to run "
- f"hook for {qt_bindings!r}, while hook for {seen_qt_bindings!r} has already been run! PyInstaller does not "
- "support multiple Qt bindings packages in a frozen application - either ensure that the build environment "
- "has only one Qt bindings package installed, or exclude the extraneous bindings packages via the module "
- "exclusion mechanism (--exclude command-line option, or excludes list in the spec file)."
- )
-
-
-# A helper for generating exclude rules for extraneous Qt bindings. Intended for use in hooks for packages that pull in
-# multiple Qt bindings packages due to conditional imports (for example, `matplotlib.backends.qt_compat`, `qtpy`).
-def exclude_extraneous_qt_bindings(hook_name, qt_bindings_order=None):
- _QT_BINDINGS = ['PyQt5', 'PySide2', 'PyQt6', 'PySide6'] # Known bindings, and also their preferred order
- _QT_API_ENV = 'QT_API'
-
- def _create_excludes(selected_bindings):
- return [bindings for bindings in _QT_BINDINGS if bindings != selected_bindings]
-
- logger.debug("%s: selecting Qt bindings package...", hook_name)
-
- if not qt_bindings_order:
- qt_bindings_order = _QT_BINDINGS # Use default preference order
-
- env_qt_bindings = os.environ.get(_QT_API_ENV)
- if env_qt_bindings is not None:
- # Case-normalize the value into capitalized name from _QT_BINDINGS for further processing.
- normalized_name = {name.lower(): name for name in _QT_BINDINGS}.get(env_qt_bindings.lower())
- if normalized_name is None:
- logger.warning(
- "%s: ignoring unsupported Qt bindings name %r in %s environment variable (supported values: %r)!",
- hook_name, env_qt_bindings, _QT_API_ENV, _QT_BINDINGS
- )
- env_qt_bindings = normalized_name
-
- # First choice: see if a hook for top-level Qt bindings package has already been run; if it has, use that bindings
- # package. Due to check in the `ensure_single_qt_bindings_package` that these hooks use, only one such hook could
- # have been run. This should cover cases when the entry-point script explicitly imports one of Qt bindings before
- # importing a package that supports multiple bindings.
- from PyInstaller.config import CONF
- seen_qt_bindings = CONF.get("_seen_qt_bindings")
- if seen_qt_bindings is not None:
- # If bindings are also specified via environment variable and they differ, display a warning.
- if env_qt_bindings is not None and env_qt_bindings != seen_qt_bindings:
- logger.warning(
- "%s: ignoring %s environment variable (%r) because hook for %r has been run!", hook_name, _QT_API_ENV,
- env_qt_bindings, seen_qt_bindings
- )
-
- logger.info(
- "%s: selected %r as Qt bindings because hook for %r has been run before.", hook_name, seen_qt_bindings,
- seen_qt_bindings
- )
- return _create_excludes(seen_qt_bindings)
-
- # Second choice: honor the QT_API environment variable, if it specified a valid Qt bindings package.
- if env_qt_bindings is not None:
- logger.info(
- "%s: selected %r as Qt bindings as specified by the %s environment variable.", hook_name, env_qt_bindings,
- _QT_API_ENV
- )
- return _create_excludes(env_qt_bindings)
-
- # Third choice: select first available bindings (sorted by the given preference order), and display a warning if
- # multiple bindings are available.
- available_qt_bindings = []
- for bindings_name in qt_bindings_order:
- # Check if bindings are available
- info = get_qt_library_info(bindings_name)
- if info.version is None:
- continue
- available_qt_bindings.append(bindings_name)
-
- if not available_qt_bindings:
- logger.warning("%s: no Qt bindings are available!", hook_name)
- return [] # No need to generate any excludes...
-
- selected_qt_bindings = available_qt_bindings[0]
- if len(available_qt_bindings) == 1:
- logger.info("%s: selected %r as the only available Qt bindings.", hook_name, selected_qt_bindings)
- else:
- # Warn on multiple bindings, and tell user to use QT_API environment variable
- logger.warning(
- "%s: selected %r as Qt bindings, but multiple bindings are available: %r. Use the %s environment variable "
- "to select different bindings and suppress this warning.", hook_name, selected_qt_bindings,
- available_qt_bindings, _QT_API_ENV
- )
- return _create_excludes(selected_qt_bindings)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 7f02536..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__pycache__/_modules_info.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__pycache__/_modules_info.cpython-312.pyc
deleted file mode 100644
index 96e58d0..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/__pycache__/_modules_info.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/_modules_info.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/_modules_info.py
deleted file mode 100755
index cd01bf9..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/qt/_modules_info.py
+++ /dev/null
@@ -1,450 +0,0 @@
-# ----------------------------------------------------------------------------
-# Copyright (c) 2022-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-# Qt modules information - the core of our Qt collection approach
-# ----------------------------------------------------------------
-#
-# The python bindings for Qt (``PySide2``, ``PyQt5``, ``PySide6``, ``PyQt6``) consist of several python binary extension
-# modules that provide bindings for corresponding Qt modules. For example, the ``PySide2.QtNetwork`` python extension
-# module provides bindings for the ``QtNetwork`` Qt module from the ``qt/qtbase`` Qt repository.
-#
-# A Qt module can be considered as consisting of:
-# * a shared library (for example, on Linux, the shared library names for the ``QtNetwork`` Qt module in Qt5 and Qt6
-# are ``libQt5Network.so`` and ``libQt6Network.so``, respectively).
-# * plugins: a certain type (or class) of plugins is usually associated with a single Qt module (for example,
-# ``imageformats`` plugins are associated with the ``QtGui`` Qt module from the ``qt/qtbase`` Qt repository), but
-# additional plugins of that type may come from other Qt repositories. For example, ``imageformats/qsvg`` plugin
-# is provided by ``qtsvg/src/plugins/imageformats/svg`` from the ``qt/qtsvg`` repository, and ``imageformats/qpdf``
-# is provided by ``qtwebengine/src/pdf/plugins/imageformats/pdf`` from the ``qt/qtwebengine`` repository.
-# * translation files: names of translation files consist of a base name, which typically corresponds to the Qt
-# repository name, and language code. A single translation file usually covers all Qt modules contained within
-# the same repository. For example, translation files with base name ``qtbase`` contain translations for ``QtCore``,
-# ``QtGui``, ``QtWidgets``, ``QtNetwork``, and other Qt modules from the ``qt/qtbase`` Qt repository.
-#
-# The PyInstaller's built-in analysis of link-time dependencies ensures that when collecting a Qt python extension
-# module, we automatically pick up the linked Qt shared libraries. However, collection of linked Qt shared libraries
-# does not result in collection of plugins, nor translation files. In addition, the dependency of a Qt python extension
-# module on other Qt python extension modules (i.e., at the bindings level) cannot be automatically determined due to
-# PyInstaller's inability to scan imports in binary extensions.
-#
-# PyInstaller < 5.7 solved this problem using a dictionary that associated a Qt shared library name with python
-# extension name, plugins, and translation files. For each hooked Qt python extension module, the hook calls a helper
-# that analyzes the extension file for link-time dependencies, and matches those against the dictionary. Therefore,
-# based on linked shared libraries, we could recursively infer the list of files to collect in addition to the shared
-# libraries themselves:
-# - plugins and translation files belonging to Qt modules whose shared libraries we collect
-# - Qt python extension modules corresponding to the Qt modules that we collect
-#
-# The above approach ensures that even if analyzed python script contains only ``from PySide2 import QtWidgets``,
-# we would also collect ``PySide2.QtGui`` and ``PySide2.QtCore``, as well as all corresponding Qt module files
-# (the shared libraries, plugins, translation files). For this to work, a hook must be provided for the
-# ``PySide2.QtWidgets`` that performs the recursive analysis of the extension module file; so to ensure that each
-# Qt python extension module by itself ensures collection of all its dependencies, we need to hook all Qt python
-# extension modules provided by specific python Qt bindings package.
-#
-# The above approach with single dictionary, however, has several limitations:
-# - it cannot provide association for Qt python module that binds a Qt module without a shared library (i.e., a
-# headers-only module, or a statically-built module). In such cases, potential plugins and translations should
-# be associated directly with the Qt python extension file instead of the Qt module's (non-existent) shared library.
-# - it cannot (directly) handle differences between Qt5 and Qt6; we had to build a second dictionary
-# - it cannot handle differences between the bindings themselves; for example, PyQt5 binds some Qt modules that
-# PySide2 does not bind. Or, the binding's Qt python extension module is named differently in PyQt and PySide
-# bindings (or just differently in PyQt5, while PySide2, PySide6, and PyQt6 use the same name).
-#
-# In order address the above shortcomings, we now store all information a list of structures that contain information
-# for a particular Qt python extension and/or Qt module (shared library):
-# - python extension name (if applicable)
-# - Qt module name base (if applicable)
-# - plugins
-# - translation files base name
-# - applicable Qt version (if necessary)
-# - applicable Qt bindings (if necessary)
-#
-# This list is used to dynamically construct two dictionaries (based on the bindings name and Qt version):
-# - mapping python extension names to associated module information
-# - mapping Qt shared library names to associated module information
-# This allows us to associate plugins and translations with either Qt python extension or with the Qt module's shared
-# library (or both), whichever is applicable.
-#
-# The `qt_dynamic_dependencies_dict`_ from the original approach was constructed using several information sources, as
-# documented `here
-# `_.
-#
-# In the current approach, the relations stored in the `QT_MODULES_INFO`_ list were determined directly, by inspecting
-# the Qt source code. This requires some prior knowledge of how the Qt code is organized (repositories and individual Qt
-# modules within them), as well as some searching based on guesswork. The procedure can be outlined as follows:
-# * check out the `main Qt repository `_. This repository contains references to all other
-# Qt repositories in the form of git submodules.
-# * for Qt5:
-# * check out the latest release tag, e.g., v5.15.2, then check out the submodules.
-# * search the Qt modules' qmake .pro files; for example, ``qtbase/src/network/network.pro`` for QtNetwork module.
-# The plugin types associated with the module are listed in the ``MODULE_PLUGIN_TYPES`` variable (in this case,
-# ``bearer``).
-# * all translations are gathered in ``qttranslations`` sub-module/repository, and their association with
-# individual repositories can be seen in ``qttranslations/translations/translations.pro``.
-# * for Qt6:
-# * check out the latest release tag, e.g., v6.3.1, then check out the submodules.
-# * search the Qt modules' CMake files; for example, ``qtbase/src/network/CMakeLists.txt`` for QtNetwork module.
-# The plugin types associated with the module are listed under ``PLUGIN_TYPES`` argument of the
-# ``qt_internal_add_module()`` function that defines the Qt module.
-#
-# The idea is to make a list of all extension modules found in a Qt bindings package, as well as all available plugin
-# directories (which correspond to plugin types) and translation files. For each extension, identify the corresponding
-# Qt module (shared library name) and its associated plugins and translation files. Once this is done, most of available
-# plugins and translations in the python bindings package should have a corresponding python Qt extension module
-# available; this gives us associations based on the python extension module names as well as based on the Qt shared
-# library names. For any plugins and translation files remaining unassociated, identify the corresponding Qt module;
-# this gives us associations based only on Qt shared library names. While this second group of associations are never
-# processed directly (due to lack of corresponding python extension), they may end up being processed during the
-# recursive dependency analysis, if the corresponding Qt shared library is linked against by some Qt python extension
-# or another Qt shared library.
-
-
-# This structure is used to define Qt module information, such as python module/extension name, Qt module (shared
-# library) name, translation files' base names, plugins, as well as associated python bindings (which implicitly
-# also encode major Qt version).
-class _QtModuleDef:
- def __init__(self, module, shared_lib=None, translations=None, plugins=None, bindings=None):
- # Python module (extension) name without package namespace. For example, `QtCore`.
- # Can be None if python bindings do not bind the module, but we still need to establish relationship between
- # the Qt module (shared library) and its plugins and translations.
- self.module = module
- # Associated Qt module (shared library), if any. Used during recursive dependency analysis, where a python
- # module (extension) is analyzed for linked Qt modules (shared libraries), and then their corresponding
- # python modules (extensions) are added to hidden imports. For example, the Qt module name is `Qt5Core` or
- # `Qt6Core`, depending on the Qt version. Can be None for python modules that are not tied to a particular
- # Qt shared library (for example, the corresponding Qt module is headers-only) and hence they cannot be
- # inferred from recursive link-time dependency analysis.
- self.shared_lib = shared_lib
- # List of base names of translation files (if any) associated with the Qt module. Multiple base names may be
- # associated with a single module.
- # For example, `['qt', 'qtbase']` for `QtCore` or `['qtmultimedia']` for `QtMultimedia`.
- self.translations = translations or []
- # List of plugins associated with the Qt module.
- self.plugins = plugins or []
- # List of bindings (PySide2, PyQt5, PySide6, PyQt6) that provide the python module. This allows association of
- # plugins and translations with shared libraries even for bindings that do not provide python module binding
- # for the Qt module.
- self.bindings = set(bindings or [])
-
-
-# All Qt-based bindings.
-ALL_QT_BINDINGS = {"PySide2", "PyQt5", "PySide6", "PyQt6"}
-
-# Qt modules information - the core of our Qt collection approach.
-#
-# For every python module/extension (i.e., entry in the list below that has valid `module`), we need a corresponding
-# hook, ensuring that the extension file is analyzed, so that we collect the associated plugins and translation
-# files, as well as perform recursive analysis of link-time binary dependencies (so that plugins and translation files
-# belonging to those dependencies are collected as well).
-QT_MODULES_INFO = (
- # *** qt/qt3d ***
- _QtModuleDef("Qt3DAnimation", shared_lib="3DAnimation"),
- _QtModuleDef("Qt3DCore", shared_lib="3DCore"),
- _QtModuleDef("Qt3DExtras", shared_lib="3DExtras"),
- _QtModuleDef("Qt3DInput", shared_lib="3DInput", plugins=["3dinputdevices"]),
- _QtModuleDef("Qt3DLogic", shared_lib="3DLogic"),
- _QtModuleDef(
- "Qt3DRender", shared_lib="3DRender", plugins=["geometryloaders", "renderplugins", "renderers", "sceneparsers"]
- ),
-
- # *** qt/qtactiveqt ***
- # The python module is called QAxContainer in PyQt bindings, but QtAxContainer in PySide. The associated Qt module
- # is header-only, so there is no shared library.
- _QtModuleDef("QAxContainer", bindings=["PyQt*"]),
- _QtModuleDef("QtAxContainer", bindings=["PySide*"]),
-
- # *** qt/qtcharts ***
- # The python module is called QtChart in PyQt5, and QtCharts in PySide2, PySide6, and PyQt6 (which corresponds to
- # the associated Qt module name, QtCharts).
- _QtModuleDef("QtChart", shared_lib="Charts", bindings=["PyQt5"]),
- _QtModuleDef("QtCharts", shared_lib="Charts", bindings=["!PyQt5"]),
-
- # *** qt/qtbase ***
- # QtConcurrent python module is available only in PySide bindings.
- _QtModuleDef(None, shared_lib="Concurrent", bindings=["PyQt*"]),
- _QtModuleDef("QtConcurrent", shared_lib="Concurrent", bindings=["PySide*"]),
- _QtModuleDef("QtCore", shared_lib="Core", translations=["qt", "qtbase"]),
- # QtDBus python module is available in all bindings but PySide2.
- _QtModuleDef(None, shared_lib="DBus", bindings=["PySide2"]),
- _QtModuleDef("QtDBus", shared_lib="DBus", bindings=["!PySide2"]),
- # QtNetwork uses different plugins in Qt5 and Qt6.
- _QtModuleDef("QtNetwork", shared_lib="Network", plugins=["bearer"], bindings=["PySide2", "PyQt5"]),
- _QtModuleDef(
- "QtNetwork",
- shared_lib="Network",
- plugins=["networkaccess", "networkinformation", "tls"],
- bindings=["PySide6", "PyQt6"]
- ),
- _QtModuleDef(
- "QtGui",
- shared_lib="Gui",
- plugins=[
- "accessiblebridge",
- "egldeviceintegrations",
- "generic",
- "iconengines",
- "imageformats",
- "platforms",
- "platforms/darwin",
- "platforminputcontexts",
- "platformthemes",
- "xcbglintegrations",
- # The ``wayland-*`` plugins are part of QtWaylandClient Qt module, whose shared library
- # (e.g., libQt5WaylandClient.so) is linked by the wayland-related ``platforms`` plugins. Ideally, we would
- # collect these plugins based on the QtWaylandClient shared library entry, but as our Qt hook utilities do
- # not scan the plugins for dependencies, that would not work. So instead we list these plugins under QtGui
- # to achieve pretty much the same end result.
- "wayland-decoration-client",
- "wayland-graphics-integration-client",
- "wayland-shell-integration"
- ]
- ),
- _QtModuleDef("QtOpenGL", shared_lib="OpenGL"),
- # This python module is specific to PySide2 and has no associated Qt module.
- _QtModuleDef("QtOpenGLFunctions", bindings=["PySide2"]),
- # This Qt module was introduced with Qt6.
- _QtModuleDef("QtOpenGLWidgets", shared_lib="OpenGLWidgets", bindings=["PySide6", "PyQt6"]),
- _QtModuleDef("QtPrintSupport", shared_lib="PrintSupport", plugins=["printsupport"]),
- _QtModuleDef("QtSql", shared_lib="Sql", plugins=["sqldrivers"]),
- _QtModuleDef("QtTest", shared_lib="Test"),
- _QtModuleDef("QtWidgets", shared_lib="Widgets", plugins=["styles"]),
- _QtModuleDef("QtXml", shared_lib="Xml"),
-
- # *** qt/qtconnectivity ***
- _QtModuleDef("QtBluetooth", shared_lib="QtBluetooth", translations=["qtconnectivity"]),
- _QtModuleDef("QtNfc", shared_lib="Nfc", translations=["qtconnectivity"]),
-
- # *** qt/qtdatavis3d ***
- _QtModuleDef("QtDataVisualization", shared_lib="DataVisualization"),
-
- # *** qt/qtdeclarative ***
- _QtModuleDef("QtQml", shared_lib="Qml", translations=["qtdeclarative"], plugins=["qmltooling"]),
- # Have the Qt5 variant collect translations for qtquickcontrols (qt/qtquickcontrols provides only QtQuick plugins).
- _QtModuleDef(
- "QtQuick",
- shared_lib="Quick",
- translations=["qtquickcontrols"],
- plugins=["scenegraph"],
- bindings=["PySide2", "PyQt5"]
- ),
- _QtModuleDef("QtQuick", shared_lib="Quick", plugins=["scenegraph"], bindings=["PySide6", "PyQt6"]),
- # Qt6-only; in Qt5, this module is part of qt/qtquickcontrols2. Python module is available only in PySide6.
- _QtModuleDef(None, shared_lib="QuickControls2", bindings=["PyQt6"]),
- _QtModuleDef("QtQuickControls2", shared_lib="QuickControls2", bindings=["PySide6"]),
- _QtModuleDef("QtQuickWidgets", shared_lib="QuickWidgets"),
-
- # *** qt/qtgamepad ***
- # No python module; shared library -> plugins association entry.
- _QtModuleDef(None, shared_lib="Gamepad", plugins=["gamepads"]),
-
- # *** qt/qtgraphs ***
- # Qt6 >= 6.6.0; python module is available only in PySide6.
- _QtModuleDef("QtGraphs", shared_lib="Graphs", bindings=["PySide6"]),
-
- # *** qt/qthttpserver ***
- # Qt6 >= 6.4.0; python module is available only in PySide6.
- _QtModuleDef("QtHttpServer", shared_lib="HttpServer", bindings=["PySide6"]),
-
- # *** qt/qtlocation ***
- # QtLocation was reintroduced in Qt6 v6.5.0.
- _QtModuleDef(
- "QtLocation",
- shared_lib="Location",
- translations=["qtlocation"],
- plugins=["geoservices"],
- bindings=["PySide2", "PyQt5", "PySide6"]
- ),
- _QtModuleDef(
- "QtPositioning",
- shared_lib="Positioning",
- translations=["qtlocation"],
- plugins=["position"],
- ),
-
- # *** qt/qtmacextras ***
- # Qt5-only Qt module.
- _QtModuleDef("QtMacExtras", shared_lib="MacExtras", bindings=["PySide2", "PyQt5"]),
-
- # *** qt/qtmultimedia ***
- # QtMultimedia on Qt6 currently uses only a subset of plugin names from Qt5 counterpart.
- _QtModuleDef(
- "QtMultimedia",
- shared_lib="Multimedia",
- translations=["qtmultimedia"],
- plugins=[
- "mediaservice", "audio", "video/bufferpool", "video/gstvideorenderer", "video/videonode", "playlistformats",
- "resourcepolicy"
- ],
- bindings=["PySide2", "PyQt5"]
- ),
- _QtModuleDef(
- "QtMultimedia",
- shared_lib="Multimedia",
- translations=["qtmultimedia"],
- # `multimedia` plugins are available as of Qt6 >= 6.4.0; earlier versions had `video/gstvideorenderer` and
- # `video/videonode` plugins.
- plugins=["multimedia", "video/gstvideorenderer", "video/videonode"],
- bindings=["PySide6", "PyQt6"]
- ),
- _QtModuleDef("QtMultimediaWidgets", shared_lib="MultimediaWidgets"),
- # Qt6-only Qt module; python module is available in PySide6 >= 6.4.0 and PyQt6 >= 6.5.0
- _QtModuleDef("QtSpatialAudio", shared_lib="SpatialAudio", bindings=["PySide6", "PyQt6"]),
-
- # *** qt/qtnetworkauth ***
- # QtNetworkAuth python module is available in all bindings but PySide2.
- _QtModuleDef(None, shared_lib="NetworkAuth", bindings=["PySide2"]),
- _QtModuleDef("QtNetworkAuth", shared_lib="NetworkAuth", bindings=["!PySide2"]),
-
- # *** qt/qtpurchasing ***
- # Qt5-only Qt module, python module is available only in PyQt5.
- _QtModuleDef("QtPurchasing", shared_lib="Purchasing", bindings=["PyQt5"]),
-
- # *** qt/qtquick1 ***
- # This is an old, Qt 5.3-era module...
- _QtModuleDef(
- "QtDeclarative",
- shared_lib="Declarative",
- translations=["qtquick1"],
- plugins=["qml1tooling"],
- bindings=["PySide2", "PyQt5"]
- ),
-
- # *** qt/qtquick3d ***
- # QtQuick3D python module is available in all bindings but PySide2.
- _QtModuleDef(None, shared_lib="Quick3D", bindings=["PySide2"]),
- _QtModuleDef("QtQuick3D", shared_lib="Quick3D", bindings=["!PySide2"]),
- # No python module; shared library -> plugins association entry.
- _QtModuleDef(None, shared_lib="Quick3DAssetImport", plugins=["assetimporters"]),
-
- # *** qt/qtquickcontrols2 ***
- # Qt5-only module; in Qt6, this module is part of qt/declarative. Python module is available only in PySide2.
- _QtModuleDef(None, translations=["qtquickcontrols2"], shared_lib="QuickControls2", bindings=["PyQt5"]),
- _QtModuleDef(
- "QtQuickControls2", translations=["qtquickcontrols2"], shared_lib="QuickControls2", bindings=["PySide2"]
- ),
-
- # *** qt/qtremoteobjects ***
- _QtModuleDef("QtRemoteObjects", shared_lib="RemoteObjects"),
-
- # *** qt/qtscxml ***
- # Python module is available only in PySide bindings. Plugins are available only in Qt6.
- # PyQt wheels do not seem to ship the corresponding Qt modules (shared libs) at all.
- _QtModuleDef("QtScxml", shared_lib="Scxml", bindings=["PySide2"]),
- _QtModuleDef("QtScxml", shared_lib="Scxml", plugins=["scxmldatamodel"], bindings=["PySide6"]),
- # Qt6-only Qt module, python module is available only in PySide6.
- _QtModuleDef("QtStateMachine", shared_lib="StateMachine", bindings=["PySide6"]),
-
- # *** qt/qtsensors ***
- _QtModuleDef("QtSensors", shared_lib="Sensors", plugins=["sensors", "sensorgestures"]),
-
- # *** qt/qtserialport ***
- _QtModuleDef("QtSerialPort", shared_lib="SerialPort", translations=["qtserialport"]),
-
- # *** qt/qtscript ***
- # Qt5-only Qt module, python module is available only in PySide2. PyQt5 wheels do not seem to ship the corresponding
- # Qt modules (shared libs) at all.
- _QtModuleDef("QtScript", shared_lib="Script", translations=["qtscript"], plugins=["script"], bindings=["PySide2"]),
- _QtModuleDef("QtScriptTools", shared_lib="ScriptTools", bindings=["PySide2"]),
-
- # *** qt/qtserialbus ***
- # No python module; shared library -> plugins association entry.
- # PySide6 6.5.0 introduced python module.
- _QtModuleDef(None, shared_lib="SerialBus", plugins=["canbus"], bindings=["!PySide6"]),
- _QtModuleDef("QtSerialBus", shared_lib="SerialBus", plugins=["canbus"], bindings=["PySide6"]),
-
- # *** qt/qtsvg ***
- _QtModuleDef("QtSvg", shared_lib="Svg"),
- # Qt6-only Qt module.
- _QtModuleDef("QtSvgWidgets", shared_lib="SvgWidgets", bindings=["PySide6", "PyQt6"]),
-
- # *** qt/qtspeech ***
- _QtModuleDef("QtTextToSpeech", shared_lib="TextToSpeech", plugins=["texttospeech"]),
-
- # *** qt/qttools ***
- # QtDesigner python module is available in all bindings but PySide2.
- _QtModuleDef(None, shared_lib="Designer", plugins=["designer"], bindings=["PySide2"]),
- _QtModuleDef(
- "QtDesigner", shared_lib="Designer", translations=["designer"], plugins=["designer"], bindings=["!PySide2"]
- ),
- _QtModuleDef("QtHelp", shared_lib="Help", translations=["qt_help"]),
- # Python module is available only in PySide bindings.
- _QtModuleDef("QtUiTools", shared_lib="UiTools", bindings=["PySide*"]),
-
- # *** qt/qtvirtualkeyboard ***
- # No python module; shared library -> plugins association entry.
- _QtModuleDef(None, shared_lib="VirtualKeyboard", plugins=["virtualkeyboard"]),
-
- # *** qt/qtwebchannel ***
- _QtModuleDef("QtWebChannel", shared_lib="WebChannel"),
-
- # *** qt/qtwebengine ***
- # QtWebEngine is Qt5-only module (replaced by QtWebEngineQuick in Qt6).
- _QtModuleDef("QtWebEngine", shared_lib="WebEngine", bindings=["PySide2", "PyQt5"]),
- _QtModuleDef("QtWebEngineCore", shared_lib="WebEngineCore", translations=["qtwebengine"]),
- # QtWebEngineQuick is Qt6-only module (replacement for QtWebEngine in Qt5).
- _QtModuleDef("QtWebEngineQuick", shared_lib="WebEngineQuick", bindings=["PySide6", "PyQt6"]),
- _QtModuleDef("QtWebEngineWidgets", shared_lib="WebEngineWidgets"),
- # QtPdf and QtPdfWidgets have python module available in PySide6 and PyQt6 >= 6.4.0.
- _QtModuleDef("QtPdf", shared_lib="Pdf", bindings=["PySide6", "PyQt6"]),
- _QtModuleDef("QtPdfWidgets", shared_lib="PdfWidgets", bindings=["PySide6", "PyQt6"]),
-
- # *** qt/qtwebsockets ***
- _QtModuleDef("QtWebSockets", shared_lib="WebSockets", translations=["qtwebsockets"]),
-
- # *** qt/qtwebview ***
- # No python module; shared library -> plugins association entry.
- _QtModuleDef(None, shared_lib="WebView", plugins=["webview"]),
-
- # *** qt/qtwinextras ***
- # Qt5-only Qt module.
- _QtModuleDef("QtWinExtras", shared_lib="WinExtras", bindings=["PySide2", "PyQt5"]),
-
- # *** qt/qtx11extras ***
- # Qt5-only Qt module.
- _QtModuleDef("QtX11Extras", shared_lib="X11Extras", bindings=["PySide2", "PyQt5"]),
-
- # *** qt/qtxmlpatterns ***
- # Qt5-only Qt module.
- _QtModuleDef(
- "QtXmlPatterns", shared_lib="XmlPatterns", translations=["qtxmlpatterns"], bindings=["PySide2", "PyQt5"]
- ),
-
- # *** qscintilla ***
- # Python module is available only in PyQt bindings. No associated shared library.
- _QtModuleDef("Qsci", translations=["qscintilla"], bindings=["PyQt*"]),
-)
-
-
-# Helpers for turning Qt namespace specifiers, such as "!PySide2" or "PyQt*", into set of applicable
-# namespaces.
-def process_namespace_strings(namespaces):
- """"Process list of Qt namespace specifier strings into set of namespaces."""
- bindings = set()
- for namespace in namespaces:
- bindings |= _process_namespace_string(namespace)
- return bindings
-
-
-def _process_namespace_string(namespace):
- """Expand a Qt namespace specifier string into set of namespaces."""
- if namespace.startswith("!"):
- bindings = _process_namespace_string(namespace[1:])
- return ALL_QT_BINDINGS - bindings
- else:
- if namespace == "PySide*":
- return {"PySide2", "PySide6"}
- elif namespace == "PyQt*":
- return {"PyQt5", "PyQt6"}
- elif namespace in ALL_QT_BINDINGS:
- return {namespace}
- else:
- raise ValueError(f"Invalid Qt namespace specifier: {namespace}!")
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/setuptools.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/setuptools.py
deleted file mode 100755
index 47a649c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/setuptools.py
+++ /dev/null
@@ -1,336 +0,0 @@
-# ----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-from PyInstaller import log as logging
-from PyInstaller import isolated
-
-logger = logging.getLogger(__name__)
-
-
-# Import setuptools and analyze its properties in an isolated subprocess. This function is called by `SetuptoolsInfo`
-# to initialize its properties.
-@isolated.decorate
-def _retrieve_setuptools_info():
- import importlib
-
- try:
- setuptools = importlib.import_module("setuptools") # noqa: F841
- except ModuleNotFoundError:
- return None
-
- # Delay these imports until after we have confirmed that setuptools is importable.
- import pathlib
-
- import packaging.version
-
- from PyInstaller.compat import importlib_metadata
- from PyInstaller.utils.hooks import (
- collect_data_files,
- collect_submodules,
- )
-
- # Try to retrieve the version. At this point, failure is consider an error.
- version_string = importlib_metadata.version("setuptools")
- version = packaging.version.Version(version_string).release # Use the version tuple
-
- # setuptools >= 60.0 its vendored copy of distutils (mainly due to its removal from stdlib in python >= 3.12).
- distutils_vendored = False
- distutils_modules = []
- if version >= (60, 0):
- distutils_vendored = True
- distutils_modules += ["_distutils_hack"]
- distutils_modules += collect_submodules(
- "setuptools._distutils",
- # setuptools 71.0.1 ~ 71.0.4 include `setuptools._distutils.tests`; avoid explicitly collecting it
- # (t was not included in earlier setuptools releases).
- filter=lambda name: name != 'setuptools._distutils.tests',
- )
-
- # Check if `setuptools._vendor` exists. Some linux distributions opt to de-vendor `setuptools` and remove the
- # `setuptools._vendor` directory altogether. If this is the case, most of additional processing below should be
- # skipped to avoid errors and warnings about non-existent `setuptools._vendor` module.
- try:
- setuptools_vendor = importlib.import_module("setuptools._vendor")
- except ModuleNotFoundError:
- setuptools_vendor = None
-
- # Check for exposed packages/modules that are vendored by setuptools. If stand-alone version is not provided in the
- # environment, setuptools-vendored version is exposed (due to location of `setuptools._vendor` being appended to
- # `sys.path`. Applicable to v71.0.0 and later.
- vendored_status = dict()
- vendored_namespace_package_paths = dict()
- if version >= (71, 0) and setuptools_vendor is not None:
- VENDORED_TOP_LEVEL_NAMESPACE_CANDIDATES = (
- "backports", # "regular" package, but has namespace semantics due to `pkgutil.extend_path()`
- "jaraco", # PEP-420 namespace package
- )
-
- VENDORED_CANDIDATES = (
- "autocommand",
- "backports.tarfile",
- "importlib_metadata",
- "importlib_resources",
- "inflect",
- "jaraco.context",
- "jaraco.functools",
- "jaraco.text",
- "more_itertools",
- "ordered_set",
- "packaging",
- "platformdirs",
- "tomli",
- "typeguard",
- "typing_extensions",
- "wheel",
- "zipp",
- )
-
- # Resolve path(s) of `setuptools_vendor` package.
- setuptools_vendor_paths = [pathlib.Path(path).resolve() for path in setuptools_vendor.__path__]
-
- # Process each candidate: top-level namespace packages
- for candidate_name in VENDORED_TOP_LEVEL_NAMESPACE_CANDIDATES:
- try:
- candidate = importlib.import_module(candidate_name)
- except ImportError:
- continue
-
- # Retrieve the __path__ attribute and store it, so we can re-use it in hooks without having to re-import
- # `setuptools` and the candidate package...
- candidate_path_attr = getattr(candidate, '__path__', [])
- if candidate_path_attr:
- candidate_paths = [pathlib.Path(path).resolve() for path in candidate_path_attr]
- is_vendored = [
- any([
- setuptools_vendor_path in candidate_path.parents or candidate_path == setuptools_vendor_path
- for setuptools_vendor_path in setuptools_vendor_paths
- ]) for candidate_path in candidate_paths
- ]
- # For namespace packages, distinguish between "fully" vendored and "partially" vendored state; i.e.,
- # whether the part of namespace package in the vendored directory is the only part or not.
- if all(is_vendored):
- vendored_status[candidate_name] = 'fully'
- elif any(is_vendored):
- vendored_status[candidate_name] = 'partially'
- else:
- vendored_status[candidate_name] = False
-
- # Store paths
- vendored_namespace_package_paths[candidate_name] = [str(path) for path in candidate_path_attr]
-
- # Process each candidate: modules and packages
- for candidate_name in VENDORED_CANDIDATES:
- try:
- candidate = importlib.import_module(candidate_name)
- except ImportError:
- continue
-
- # Check the __file__ attribute (modules and regular packages). Will not work with namespace packages, but
- # at the moment, there are none (vendored top-level namespace packages have already been handled).
- candidate_file_attr = getattr(candidate, '__file__', None)
- if candidate_file_attr is not None:
- candidate_path = pathlib.Path(candidate_file_attr).parent.resolve()
- is_vendored = any([
- setuptools_vendor_path in candidate_path.parents or candidate_path == setuptools_vendor_path
- for setuptools_vendor_path in setuptools_vendor_paths
- ])
- vendored_status[candidate_name] = is_vendored # True/False
-
- # Collect submodules from `setuptools._vendor`, regardless of whether the vendored package is exposed or
- # not (because setuptools might need/use it either way).
- vendored_modules = []
- if setuptools_vendor is not None:
- EXCLUDED_VENDORED_MODULES = (
- # Prevent recursing into setuptools._vendor.pyparsing.diagram, which typically fails to be imported due
- # to missing dependencies (railroad, pyparsing (?), jinja2) and generates a warning... As the module is
- # usually unimportable, it is likely not to be used by setuptools. NOTE: pyparsing was removed from
- # vendored packages in setuptools v67.0.0; keep this exclude around for earlier versions.
- 'setuptools._vendor.pyparsing.diagram',
- # Setuptools >= 71 started shipping vendored dependencies that include tests; avoid collecting those via
- # hidden imports. (Note that this also prevents creation of aliases for these module, but that should
- # not be an issue, as they should not be referenced from anywhere).
- 'setuptools._vendor.importlib_resources.tests',
- # These appear to be utility scripts bundled with the jaraco.text package - exclude them.
- 'setuptools._vendor.jaraco.text.show-newlines',
- 'setuptools._vendor.jaraco.text.strip-prefix',
- 'setuptools._vendor.jaraco.text.to-dvorak',
- 'setuptools._vendor.jaraco.text.to-qwerty',
- )
- vendored_modules += collect_submodules(
- 'setuptools._vendor',
- filter=lambda name: name not in EXCLUDED_VENDORED_MODULES,
- )
-
- # `collect_submodules` (and its underlying `pkgutil.iter_modules` do not discover namespace sub-packages, in
- # this case `setuptools._vendor.jaraco`. So force a manual scan of modules/packages inside it.
- vendored_modules += collect_submodules(
- 'setuptools._vendor.jaraco',
- filter=lambda name: name not in EXCLUDED_VENDORED_MODULES,
- )
-
- # *** Data files for vendored packages ***
- vendored_data = []
-
- if version >= (71, 0) and setuptools_vendor is not None:
- # Since the vendored dependencies from `setuptools/_vendor` are now visible to the outside world, make
- # sure we collect their metadata. (We cannot use copy_metadata here, because we need to collect data
- # files to their original locations).
- vendored_data += collect_data_files('setuptools._vendor', includes=['**/*.dist-info'])
- # Similarly, ensure that `Lorem ipsum.txt` from vendored jaraco.text is collected
- vendored_data += collect_data_files('setuptools._vendor.jaraco.text', includes=['**/Lorem ipsum.txt'])
-
- # Return dictionary with collected information
- return {
- "available": True,
- "version": version,
- "distutils_vendored": distutils_vendored,
- "distutils_modules": distutils_modules,
- "vendored_status": vendored_status,
- "vendored_modules": vendored_modules,
- "vendored_data": vendored_data,
- "vendored_namespace_package_paths": vendored_namespace_package_paths,
- }
-
-
-class SetuptoolsInfo:
- def __init__(self):
- pass
-
- def __repr__(self):
- return "SetuptoolsInfo"
-
- # Delay initialization of setuptools information until until the corresponding attributes are first requested.
- def __getattr__(self, name):
- if 'available' in self.__dict__:
- # Initialization was already done, but requested attribute is not available.
- raise AttributeError(name)
-
- # Load setuptools info...
- self._load_setuptools_info()
- # ... and return the requested attribute
- return getattr(self, name)
-
- def _load_setuptools_info(self):
- logger.info("%s: initializing cached setuptools info...", self)
-
- # Initialize variables so that they might be accessed even if setuptools is unavailable or if initialization
- # fails for some reason.
- self.available = False
- self.version = None
- self.distutils_vendored = False
- self.distutils_modules = []
- self.vendored_status = dict()
- self.vendored_modules = []
- self.vendored_data = []
- self.vendored_namespace_package_paths = dict()
-
- try:
- setuptools_info = _retrieve_setuptools_info()
- except Exception as e:
- logger.warning("%s: failed to obtain setuptools info: %s", self, e)
- return
-
- # If package could not be imported, `_retrieve_setuptools_info` returns None. In such cases, emit a debug
- # message instead of a warning, because this initialization might be triggered by a helper function that is
- # trying to determine availability of `setuptools` by inspecting the `available` attribute.
- if setuptools_info is None:
- logger.debug("%s: failed to obtain setuptools info: setuptools could not be imported.", self)
- return
-
- # Copy properties
- for key, value in setuptools_info.items():
- setattr(self, key, value)
-
- def is_vendored(self, module_name):
- return self.vendored_status.get(module_name, False)
-
- @staticmethod
- def _create_vendored_aliases(vendored_name, module_name, modules_list):
- # Create aliases for all submodules
- prefix_len = len(vendored_name) # Length of target-name prefix to remove
- return ((module_name + vendored_module[prefix_len:], vendored_module) for vendored_module in modules_list
- if vendored_module.startswith(vendored_name))
-
- def get_vendored_aliases(self, module_name):
- vendored_name = f"setuptools._vendor.{module_name}"
- return self._create_vendored_aliases(vendored_name, module_name, self.vendored_modules)
-
- def get_distutils_aliases(self):
- vendored_name = "setuptools._distutils"
- return self._create_vendored_aliases(vendored_name, "distutils", self.distutils_modules)
-
-
-setuptools_info = SetuptoolsInfo()
-
-
-def pre_safe_import_module_for_top_level_namespace_packages(api):
- """
- A common implementation of pre_safe_import_module hook function for handling vendored top-level namespace packages
- (i.e., `backports` and `jaraco`).
-
- This function can be either called from the `pre_safe_import_module` function in a pre-safe-import-module hook, or
- just imported into the hook and aliased to `pre_safe_import_module`.
- """
- module_name = api.module_name
-
- # Check if the package/module is a vendored copy. This also returns False is setuptools is unavailable, because
- # vendored module status dictionary will be empty.
- vendored = setuptools_info.is_vendored(module_name)
- if not vendored:
- return
-
- if vendored == 'fully':
- # For a fully-vendored copy, force creation of aliases; on one hand, this aims to ensure that submodules are
- # resolvable, but on the other, it also prevents creation of unvendored top-level package, which should not
- # exit in this case.
- vendored_name = f"setuptools._vendor.{module_name}"
- logger.info(
- "Setuptools: %r appears to be a full setuptools-vendored copy - creating alias to %r!", module_name,
- vendored_name
- )
- # Create aliases for all (sub)modules
- for aliased_name, real_vendored_name in setuptools_info.get_vendored_aliases(module_name):
- api.add_alias_module(real_vendored_name, aliased_name)
- elif vendored == 'partially':
- # For a partially-vendored copy, adjust the submodule search paths, so that submodules from all locations are
- # discoverable (especially from the setuptools vendor directory, which might not be in the search path yet).
- search_paths = setuptools_info.vendored_namespace_package_paths.get(module_name, [])
- logger.info(
- "Setuptools: %r appears to be a partial setuptools-vendored copy - extending search paths to %r!",
- module_name, search_paths
- )
- for path in search_paths:
- api.append_package_path(path)
- else:
- logger.warning("Setuptools: %r has unhandled vendored status: %r", module_name, vendored)
-
-
-def pre_safe_import_module(api):
- """
- A common implementation of pre_safe_import_module hook function.
-
- This function can be either called from the `pre_safe_import_module` function in a pre-safe-import-module hook, or
- just imported into the hook.
- """
- module_name = api.module_name
-
- # Check if the package/module is a vendored copy. This also returns False is setuptools is unavailable, because
- # vendored module status dictionary will be empty.
- if not setuptools_info.is_vendored(module_name):
- return
-
- vendored_name = f"setuptools._vendor.{module_name}"
- logger.info(
- "Setuptools: %r appears to be a setuptools-vendored copy - creating alias to %r!", module_name, vendored_name
- )
-
- # Create aliases for all (sub)modules
- for aliased_name, real_vendored_name in setuptools_info.get_vendored_aliases(module_name):
- api.add_alias_module(real_vendored_name, aliased_name)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/tcl_tk.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/tcl_tk.py
deleted file mode 100755
index e975c5f..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/hooks/tcl_tk.py
+++ /dev/null
@@ -1,356 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import os
-import fnmatch
-
-from PyInstaller import compat
-from PyInstaller import isolated
-from PyInstaller import log as logging
-from PyInstaller.depend import bindepend
-
-if compat.is_darwin:
- from PyInstaller.utils import osx as osxutils
-
-logger = logging.getLogger(__name__)
-
-
-@isolated.decorate
-def _get_tcl_tk_info():
- """
- Isolated-subprocess helper to retrieve the basic Tcl/Tk information:
- - tkinter_extension_file = the value of __file__ attribute of the _tkinter binary extension (path to file).
- - tcl_data_dir = path to the Tcl library/data directory.
- - tcl_version = Tcl version
- - tk_version = Tk version
- - tcl_theaded = boolean indicating whether Tcl/Tk is built with multi-threading support.
- """
- try:
- import tkinter
- import _tkinter
- except ImportError:
- # tkinter unavailable
- return None
- try:
- tcl = tkinter.Tcl()
- except tkinter.TclError: # e.g. "Can't find a usable init.tcl in the following directories: ..."
- return None
-
- # Query the location of Tcl library/data directory.
- tcl_data_dir = tcl.eval("info library")
-
- # Check if Tcl/Tk is built with multi-threaded support (built with --enable-threads), as indicated by the presence
- # of optional `threaded` member in `tcl_platform` array. Tcl 9.0 removed the --enable-threads flag, and is always
- # built with multi-threaded support (and thus the `threaded` array member has been removed).
- TCL_MAJOR = int(_tkinter.TCL_VERSION.split(".")[0])
- if TCL_MAJOR >= 9:
- tcl_threaded = True
- else:
- try:
- tcl.getvar("tcl_platform(threaded)") # Ignore the actual value.
- tcl_threaded = True
- except tkinter.TclError:
- tcl_threaded = False
-
- return {
- "available": True,
- # If `_tkinter` is a built-in (as opposed to an extension), it does not have a `__file__` attribute.
- "tkinter_extension_file": getattr(_tkinter, '__file__', None),
- "tcl_version": _tkinter.TCL_VERSION,
- "tk_version": _tkinter.TK_VERSION,
- "tcl_threaded": tcl_threaded,
- "tcl_data_dir": tcl_data_dir,
- }
-
-
-class TclTkInfo:
- # Root directory names of Tcl and Tk library/data directories in the frozen application. These directories are
- # originally fully versioned (e.g., tcl8.6 and tk8.6); we want to remap them to unversioned variants, so that our
- # run-time hook (pyi_rthook__tkinter.py) does not have to determine version numbers when setting `TCL_LIBRARY`
- # and `TK_LIBRARY` environment variables.
- #
- # We also cannot use plain "tk" and "tcl", because on macOS, the Tcl and Tk shared libraries might come from
- # framework bundles, and would therefore end up being collected as "Tcl" and "Tk" in the top-level application
- # directory, causing clash due to filesystem being case-insensitive by default.
- TCL_ROOTNAME = '_tcl_data'
- TK_ROOTNAME = '_tk_data'
-
- def __init__(self):
- pass
-
- def __repr__(self):
- return "TclTkInfo"
-
- # Delay initialization of Tcl/Tk information until until the corresponding attributes are first requested.
- def __getattr__(self, name):
- if 'available' in self.__dict__:
- # Initialization was already done, but requested attribute is not available.
- raise AttributeError(name)
-
- # Load Qt library info...
- self._load_tcl_tk_info()
- # ... and return the requested attribute
- return getattr(self, name)
-
- def _load_tcl_tk_info(self):
- logger.info("%s: initializing cached Tcl/Tk info...", self)
-
- # Initialize variables so that they might be accessed even if tkinter/Tcl/Tk is unavailable or if initialization
- # fails for some reason.
- self.available = False
- self.tkinter_extension_file = None
- self.tcl_version = None
- self.tk_version = None
- self.tcl_threaded = False
- self.tcl_data_dir = None
-
- self.tk_data_dir = None
- self.tcl_module_dir = None
-
- self.is_macos_system_framework = False
- self.tcl_shared_library = None
- self.tk_shared_library = None
-
- self.data_files = []
-
- try:
- tcl_tk_info = _get_tcl_tk_info()
- except Exception as e:
- logger.warning("%s: failed to obtain Tcl/Tk info: %s", self, e)
- return
-
- # If tkinter could not be imported, `_get_tcl_tk_info` returns None. In such cases, emit a debug message instead
- # of a warning, because this initialization might be triggered by a helper function that is trying to determine
- # availability of `tkinter` by inspecting the `available` attribute.
- if tcl_tk_info is None:
- logger.debug("%s: failed to obtain Tcl/Tk info: tkinter/_tkinter could not be imported.", self)
- return
-
- # Copy properties
- for key, value in tcl_tk_info.items():
- setattr(self, key, value)
-
- # Parse Tcl/Tk version into (major, minor) tuple.
- self.tcl_version = tuple((int(x) for x in self.tcl_version.split(".")[:2]))
- self.tk_version = tuple((int(x) for x in self.tk_version.split(".")[:2]))
-
- # Determine full path to Tcl and Tk shared libraries against which the `_tkinter` extension module is linked.
- # This can only be done when `_tkinter` is in fact an extension, and not a built-in. In the latter case, the
- # Tcl/Tk libraries are statically linked into python shared library, so there are no shared libraries for us
- # to discover.
- if self.tkinter_extension_file:
- try:
- (
- self.tcl_shared_library,
- self.tk_shared_library,
- ) = self._find_tcl_tk_shared_libraries(self.tkinter_extension_file)
- except Exception:
- logger.warning("%s: failed to determine Tcl and Tk shared library location!", self, exc_info=True)
-
- # macOS: check if _tkinter is linked against system-provided Tcl.framework and Tk.framework. This is the
- # case with python3 from XCode tools (and was the case with very old homebrew python builds). In such cases,
- # we should not be collecting Tcl/Tk files.
- if compat.is_darwin:
- self.is_macos_system_framework = self._check_macos_system_framework(self.tcl_shared_library)
-
- # Emit a warning in the unlikely event that we are dealing with Teapot-distributed version of ActiveTcl.
- if not self.is_macos_system_framework:
- self._warn_if_using_activetcl_or_teapot(self.tcl_data_dir)
-
- # Infer location of Tk library/data directory. Ideally, we could infer this by running
- #
- # import tkinter
- # root = tkinter.Tk()
- # tk_data_dir = root.tk.exprstring('$tk_library')
- #
- # in the isolated subprocess as part of `_get_tcl_tk_info`. However, that is impractical, as it shows the empty
- # window, and on some platforms (e.g., linux) requires display server. Therefore, try to guess the location,
- # based on the following heuristic:
- # - if TK_LIBRARY is defined use it.
- # - if Tk is built as macOS framework bundle, look for Scripts sub-directory in Resources directory next to
- # the shared library.
- # - otherwise, look for: $tcl_root/../tkX.Y, where X and Y are Tk major and minor version.
- if "TK_LIBRARY" in os.environ:
- self.tk_data_dir = os.environ["TK_LIBRARY"]
- elif compat.is_darwin and self.tk_shared_library and (
- # is_framework_bundle_lib handles only fully-versioned framework library paths...
- (osxutils.is_framework_bundle_lib(self.tk_shared_library)) or
- # ... so manually handle top-level-symlinked variant for now.
- (self.tk_shared_library).endswith("Tk.framework/Tk")
- ):
- # Fully resolve the library path, in case it is a top-level symlink; for example, resolve
- # /Library/Frameworks/Python.framework/Versions/3.13/Frameworks/Tk.framework/Tk
- # into
- # /Library/Frameworks/Python.framework/Versions/3.13/Frameworks/Tk.framework/Versions/8.6/Tk
- tk_lib_realpath = os.path.realpath(self.tk_shared_library)
- # Resources/Scripts directory next to the shared library
- self.tk_data_dir = os.path.join(os.path.dirname(tk_lib_realpath), "Resources", "Scripts")
- else:
- self.tk_data_dir = os.path.join(
- os.path.dirname(self.tcl_data_dir),
- f"tk{self.tk_version[0]}.{self.tk_version[1]}",
- )
-
- # Infer location of Tcl module directory. The modules directory is separate from the library/data one, and
- # is located at $tcl_root/../tclX, where X is the major Tcl version.
- self.tcl_module_dir = os.path.join(
- os.path.dirname(self.tcl_data_dir),
- f"tcl{self.tcl_version[0]}",
- )
-
- # Find all data files
- if self.is_macos_system_framework:
- logger.info("%s: using macOS system Tcl/Tk framework - not collecting data files.", self)
- else:
- # Collect Tcl and Tk scripts from their corresponding library/data directories. See comment at the
- # definition of TK_ROOTNAME and TK_ROOTNAME variables.
- if os.path.isdir(self.tcl_data_dir):
- self.data_files += self._collect_files_from_directory(
- self.tcl_data_dir,
- prefix=self.TCL_ROOTNAME,
- excludes=['demos', '*.lib', 'tclConfig.sh'],
- )
- else:
- logger.warning("%s: Tcl library/data directory %r does not exist!", self, self.tcl_data_dir)
-
- if os.path.isdir(self.tk_data_dir):
- self.data_files += self._collect_files_from_directory(
- self.tk_data_dir,
- prefix=self.TK_ROOTNAME,
- excludes=['demos', '*.lib', 'tkConfig.sh'],
- )
- else:
- logger.warning("%s: Tk library/data directory %r does not exist!", self, self.tk_data_dir)
-
- # Collect Tcl modules from modules directory
- if os.path.isdir(self.tcl_module_dir):
- self.data_files += self._collect_files_from_directory(
- self.tcl_module_dir,
- prefix=os.path.basename(self.tcl_module_dir),
- )
- else:
- logger.warning("%s: Tcl module directory %r does not exist!", self, self.tcl_module_dir)
-
- @staticmethod
- def _collect_files_from_directory(root, prefix=None, excludes=None):
- """
- A minimal port of PyInstaller.building.datastruct.Tree() functionality, which allows us to avoid using Tree
- here. This way, the TclTkInfo data structure can be used without having PyInstaller's config context set up.
- """
- excludes = excludes or []
-
- todo = [(root, prefix)]
- output = []
- while todo:
- target_dir, prefix = todo.pop()
-
- for entry in os.listdir(target_dir):
- # Basic name-based exclusion
- if any((fnmatch.fnmatch(entry, exclude) for exclude in excludes)):
- continue
-
- src_path = os.path.join(target_dir, entry)
- dest_path = os.path.join(prefix, entry) if prefix else entry
-
- if os.path.isdir(src_path):
- todo.append((src_path, dest_path))
- else:
- # Return 3-element tuples with fully-resolved dest path, since other parts of code depend on that.
- output.append((dest_path, src_path, 'DATA'))
-
- return output
-
- @staticmethod
- def _find_tcl_tk_shared_libraries(tkinter_ext_file):
- """
- Find Tcl and Tk shared libraries against which the _tkinter extension module is linked.
- """
- tcl_lib = None
- tk_lib = None
-
- for _, lib_path in bindepend.get_imports(tkinter_ext_file): # (name, fullpath) tuple
- if lib_path is None:
- continue # Skip unresolved entries
-
- # For comparison, take basename of lib_path. On macOS, lib_name returned by get_imports is in fact
- # referenced name, which is not necessarily just a basename.
- lib_name = os.path.basename(lib_path)
- lib_name_lower = lib_name.lower() # lower-case for comparisons
-
- # First check for Tk library, because it is unlikely that 'tk' will appear in the name of the Tcl shared
- # library, while 'tcl' could appear in the name of the Tk shared library. For example, Fedora 43 ships
- # both Tcl/Tk 8.6 and 9.0, and in the latter, the libraries are named `libtcl9.0.so` and `libtcl9tk9.0.so`.
- if 'tk' in lib_name_lower:
- tk_lib = lib_path
- elif 'tcl' in lib_name_lower:
- tcl_lib = lib_path
-
- return tcl_lib, tk_lib
-
- @staticmethod
- def _check_macos_system_framework(tcl_shared_lib):
- # Starting with macOS 11, system libraries are hidden (unless both Python and PyInstaller's bootloader are built
- # against macOS 11.x SDK). Therefore, Tcl shared library might end up unresolved (None); but that implicitly
- # indicates that the system framework is used.
- if tcl_shared_lib is None:
- return True
-
- # Check if the path corresponds to the system framework, i.e., [/System]/Library/Frameworks/Tcl.framework/Tcl
- return 'Library/Frameworks/Tcl.framework' in tcl_shared_lib
-
- @staticmethod
- def _warn_if_using_activetcl_or_teapot(tcl_root):
- """
- Check if Tcl installation is a Teapot-distributed version of ActiveTcl, and log a non-fatal warning that the
- resulting frozen application will (likely) fail to run on other systems.
-
- PyInstaller does *not* freeze all ActiveTcl dependencies -- including Teapot, which is typically ignorable.
- Since Teapot is *not* ignorable in this case, this function warns of impending failure.
-
- See Also
- -------
- https://github.com/pyinstaller/pyinstaller/issues/621
- """
- if tcl_root is None:
- return
-
- # Read the "init.tcl" script and look for mentions of "activetcl" and "teapot"
- init_tcl = os.path.join(tcl_root, 'init.tcl')
- if not os.path.isfile(init_tcl):
- return
-
- mentions_activetcl = False
- mentions_teapot = False
-
- # Tcl/Tk reads files using the system encoding (https://www.tcl.tk/doc/howto/i18n.html#system_encoding);
- # on macOS, this is UTF-8.
- with open(init_tcl, 'r', encoding='utf8') as fp:
- for line in fp.readlines():
- line = line.strip().lower()
- if line.startswith('#'):
- continue
- if 'activetcl' in line:
- mentions_activetcl = True
- if 'teapot' in line:
- mentions_teapot = True
- if mentions_activetcl and mentions_teapot:
- break
-
- if mentions_activetcl and mentions_teapot:
- logger.warning(
- "You appear to be using an ActiveTcl build of Tcl/Tk, which PyInstaller has\n"
- "difficulty freezing. To fix this, comment out all references to 'teapot' in\n"
- f"{init_tcl!r}\n"
- "See https://github.com/pyinstaller/pyinstaller/issues/621 for more information."
- )
-
-
-tcltk_info = TclTkInfo()
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/misc.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/misc.py
deleted file mode 100755
index 77a3e8e..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/misc.py
+++ /dev/null
@@ -1,229 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-This module contains miscellaneous functions that do not fit anywhere else.
-"""
-
-import glob
-import os
-import pprint
-import codecs
-import re
-import tokenize
-import io
-import pathlib
-
-from PyInstaller import log as logging
-from PyInstaller.compat import is_win
-
-logger = logging.getLogger(__name__)
-
-
-def dlls_in_subdirs(directory):
- """
- Returns a list *.dll, *.so, *.dylib in the given directory and its subdirectories.
- """
- filelist = []
- for root, dirs, files in os.walk(directory):
- filelist.extend(dlls_in_dir(root))
- return filelist
-
-
-def dlls_in_dir(directory):
- """
- Returns a list of *.dll, *.so, *.dylib in the given directory.
- """
- return files_in_dir(directory, ["*.so", "*.dll", "*.dylib"])
-
-
-def files_in_dir(directory, file_patterns=None):
- """
- Returns a list of files in the given directory that match the given pattern.
- """
-
- file_patterns = file_patterns or []
-
- files = []
- for file_pattern in file_patterns:
- files.extend(glob.glob(os.path.join(directory, file_pattern)))
- return files
-
-
-def get_path_to_toplevel_modules(filename):
- """
- Return the path to top-level directory that contains Python modules.
-
- It will look in parent directories for __init__.py files. The first parent directory without __init__.py is the
- top-level directory.
-
- Returned directory might be used to extend the PYTHONPATH.
- """
- curr_dir = os.path.dirname(os.path.abspath(filename))
- pattern = '__init__.py'
-
- # Try max. 10 levels up.
- try:
- for i in range(10):
- files = set(os.listdir(curr_dir))
- # 'curr_dir' is still not top-level; go to parent dir.
- if pattern in files:
- curr_dir = os.path.dirname(curr_dir)
- # Top-level dir found; return it.
- else:
- return curr_dir
- except IOError:
- pass
- # No top-level directory found, or error was encountered.
- return None
-
-
-def mtime(fnm):
- try:
- # TODO: explain why this does not use os.path.getmtime() ?
- # - It is probably not used because it returns float and not int.
- return os.stat(fnm)[8]
- except Exception:
- return 0
-
-
-def save_py_data_struct(filename, data):
- """
- Save data into text file as Python data structure.
- :param filename:
- :param data:
- :return:
- """
- dirname = os.path.dirname(filename)
- if not os.path.exists(dirname):
- os.makedirs(dirname)
- with open(filename, 'w', encoding='utf-8') as f:
- pprint.pprint(data, f)
-
-
-def load_py_data_struct(filename):
- """
- Load data saved as python code and interpret that code.
- :param filename:
- :return:
- """
- with open(filename, 'r', encoding='utf-8') as f:
- if is_win:
- # import versioninfo so that VSVersionInfo can parse correctly.
- from PyInstaller.utils.win32 import versioninfo # noqa: F401
-
- return eval(f.read())
-
-
-def absnormpath(apath):
- return os.path.abspath(os.path.normpath(apath))
-
-
-def module_parent_packages(full_modname):
- """
- Return list of parent package names.
- 'aaa.bb.c.dddd' -> ['aaa', 'aaa.bb', 'aaa.bb.c']
- :param full_modname: Full name of a module.
- :return: List of parent module names.
- """
- prefix = ''
- parents = []
- # Ignore the last component in module name and get really just parent, grandparent, great grandparent, etc.
- for pkg in full_modname.split('.')[0:-1]:
- # Ensure that first item does not start with dot '.'
- prefix += '.' + pkg if prefix else pkg
- parents.append(prefix)
- return parents
-
-
-def is_file_qt_plugin(filename):
- """
- Check if the given file is a Qt plugin file.
- :param filename: Full path to file to check.
- :return: True if given file is a Qt plugin file, False if not.
- """
-
- # Check the file contents; scan for QTMETADATA string. The scan is based on the brute-force Windows codepath of
- # findPatternUnloaded() from qtbase/src/corelib/plugin/qlibrary.cpp in Qt5.
- with open(filename, 'rb') as fp:
- fp.seek(0, os.SEEK_END)
- end_pos = fp.tell()
-
- SEARCH_CHUNK_SIZE = 8192
- QTMETADATA_MAGIC = b'QTMETADATA '
-
- magic_offset = -1
- while end_pos >= len(QTMETADATA_MAGIC):
- start_pos = max(end_pos - SEARCH_CHUNK_SIZE, 0)
- chunk_size = end_pos - start_pos
- # Is the remaining chunk large enough to hold the pattern?
- if chunk_size < len(QTMETADATA_MAGIC):
- break
- # Read and scan the chunk
- fp.seek(start_pos, os.SEEK_SET)
- buf = fp.read(chunk_size)
- pos = buf.rfind(QTMETADATA_MAGIC)
- if pos != -1:
- magic_offset = start_pos + pos
- break
- # Adjust search location for next chunk; ensure proper overlap.
- end_pos = start_pos + len(QTMETADATA_MAGIC) - 1
- if magic_offset == -1:
- return False
-
- return True
-
-
-BOM_MARKERS_TO_DECODERS = {
- codecs.BOM_UTF32_LE: codecs.utf_32_le_decode,
- codecs.BOM_UTF32_BE: codecs.utf_32_be_decode,
- codecs.BOM_UTF32: codecs.utf_32_decode,
- codecs.BOM_UTF16_LE: codecs.utf_16_le_decode,
- codecs.BOM_UTF16_BE: codecs.utf_16_be_decode,
- codecs.BOM_UTF16: codecs.utf_16_decode,
- codecs.BOM_UTF8: codecs.utf_8_decode,
-}
-BOM_RE = re.compile(rb"\A(%s)?(.*)" % b"|".join(map(re.escape, BOM_MARKERS_TO_DECODERS)), re.DOTALL)
-
-
-def decode(raw: bytes):
- """
- Decode bytes to string, respecting and removing any byte-order marks if present, or respecting but not removing any
- PEP263 encoding comments (# encoding: cp1252).
- """
- bom, raw = BOM_RE.match(raw).groups()
- if bom:
- return BOM_MARKERS_TO_DECODERS[bom](raw)[0]
-
- encoding, _ = tokenize.detect_encoding(io.BytesIO(raw).readline)
- return raw.decode(encoding)
-
-
-def is_iterable(arg):
- """
- Check if the passed argument is an iterable."
- """
- try:
- iter(arg)
- except TypeError:
- return False
- return True
-
-
-def path_to_parent_archive(filename):
- """
- Check if the given file path points to a file inside an existing archive file. Returns first path from the set of
- parent paths that points to an existing file, or `None` if no such path exists (i.e., file is an actual stand-alone
- file).
- """
- for parent in pathlib.Path(filename).parents:
- if parent.is_file():
- return parent
- return None
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/osx.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/osx.py
deleted file mode 100755
index 68726ba..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/osx.py
+++ /dev/null
@@ -1,757 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2014-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Utils for macOS platform.
-"""
-
-import math
-import os
-import pathlib
-import subprocess
-import shutil
-import tempfile
-
-from macholib.mach_o import (
- LC_BUILD_VERSION,
- LC_CODE_SIGNATURE,
- LC_ID_DYLIB,
- LC_LOAD_DYLIB,
- LC_LOAD_UPWARD_DYLIB,
- LC_LOAD_WEAK_DYLIB,
- LC_PREBOUND_DYLIB,
- LC_REEXPORT_DYLIB,
- LC_RPATH,
- LC_SEGMENT_64,
- LC_SYMTAB,
- LC_UUID,
- LC_VERSION_MIN_MACOSX,
-)
-from macholib.MachO import MachO
-import macholib.util
-
-import PyInstaller.log as logging
-from PyInstaller import compat
-
-logger = logging.getLogger(__name__)
-
-
-def is_homebrew_env():
- """
- Check if Python interpreter was installed via Homebrew command 'brew'.
-
- :return: True if Homebrew else otherwise.
- """
- # Python path prefix should start with Homebrew prefix.
- env_prefix = get_homebrew_prefix()
- if env_prefix and compat.base_prefix.startswith(env_prefix):
- return True
- return False
-
-
-def is_macports_env():
- """
- Check if Python interpreter was installed via Macports command 'port'.
-
- :return: True if Macports else otherwise.
- """
- # Python path prefix should start with Macports prefix.
- env_prefix = get_macports_prefix()
- if env_prefix and compat.base_prefix.startswith(env_prefix):
- return True
- return False
-
-
-def get_homebrew_prefix():
- """
- :return: Root path of the Homebrew environment.
- """
- prefix = shutil.which('brew')
- # Conversion: /usr/local/bin/brew -> /usr/local
- prefix = os.path.dirname(os.path.dirname(prefix))
- return prefix
-
-
-def get_macports_prefix():
- """
- :return: Root path of the Macports environment.
- """
- prefix = shutil.which('port')
- # Conversion: /usr/local/bin/port -> /usr/local
- prefix = os.path.dirname(os.path.dirname(prefix))
- return prefix
-
-
-def _find_version_cmd(header):
- """
- Helper that finds the version command in the given MachO header.
- """
- # The SDK version is stored in LC_BUILD_VERSION command (used when targeting the latest versions of macOS) or in
- # older LC_VERSION_MIN_MACOSX command. Check for presence of either.
- version_cmd = [cmd for cmd in header.commands if cmd[0].cmd in {LC_BUILD_VERSION, LC_VERSION_MIN_MACOSX}]
- assert len(version_cmd) == 1, \
- f"Expected exactly one LC_BUILD_VERSION or LC_VERSION_MIN_MACOSX command, found {len(version_cmd)}!"
- return version_cmd[0]
-
-
-def get_macos_sdk_version(filename):
- """
- Obtain the version of macOS SDK against which the given binary was built.
-
- NOTE: currently, version is retrieved only from the first arch slice in the binary.
-
- :return: (major, minor, revision) tuple
- """
- binary = MachO(filename)
- header = binary.headers[0]
- # Find version command using helper
- version_cmd = _find_version_cmd(header)
- return _hex_triplet(version_cmd[1].sdk)
-
-
-def _hex_triplet(version):
- # Parse SDK version number
- major = (version & 0xFF0000) >> 16
- minor = (version & 0xFF00) >> 8
- revision = (version & 0xFF)
- return major, minor, revision
-
-
-def macosx_version_min(filename: str) -> tuple:
- """
- Get the -macosx-version-min used to compile a macOS binary.
-
- For fat binaries, the minimum version is selected.
- """
- versions = []
- for header in MachO(filename).headers:
- cmd = _find_version_cmd(header)
- if cmd[0].cmd == LC_VERSION_MIN_MACOSX:
- versions.append(cmd[1].version)
- else:
- # macOS >= 10.14 uses LC_BUILD_VERSION instead.
- versions.append(cmd[1].minos)
-
- return min(map(_hex_triplet, versions))
-
-
-def set_macos_sdk_version(filename, major, minor, revision):
- """
- Overwrite the macOS SDK version declared in the given binary with the specified version.
-
- NOTE: currently, only version in the first arch slice is modified.
- """
- # Validate values
- assert 0 <= major <= 255, "Invalid major version value!"
- assert 0 <= minor <= 255, "Invalid minor version value!"
- assert 0 <= revision <= 255, "Invalid revision value!"
- # Open binary
- binary = MachO(filename)
- header = binary.headers[0]
- # Find version command using helper
- version_cmd = _find_version_cmd(header)
- # Write new SDK version number
- version_cmd[1].sdk = major << 16 | minor << 8 | revision
- # Write changes back.
- with open(binary.filename, 'rb+') as fp:
- binary.write(fp)
-
-
-def fix_exe_for_code_signing(filename):
- """
- Fixes the Mach-O headers to make code signing possible.
-
- Code signing on macOS does not work out of the box with embedding .pkg archive into the executable.
-
- The fix is done this way:
- - Make the embedded .pkg archive part of the Mach-O 'String Table'. 'String Table' is at end of the macOS exe file,
- so just change the size of the table to cover the end of the file.
- - Fix the size of the __LINKEDIT segment.
-
- Note: the above fix works only if the single-arch thin executable or the last arch slice in a multi-arch fat
- executable is not signed, because LC_CODE_SIGNATURE comes after LC_SYMTAB, and because modification of headers
- invalidates the code signature. On modern arm64 macOS, code signature is mandatory, and therefore compilers
- create a dummy signature when executable is built. In such cases, that signature needs to be removed before this
- function is called.
-
- Mach-O format specification: http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/Mach-O.5.html
- """
- # Estimate the file size after data was appended
- file_size = os.path.getsize(filename)
-
- # Take the last available header. A single-arch thin binary contains a single slice, while a multi-arch fat binary
- # contains multiple, and we need to modify the last one, which is adjacent to the appended data.
- executable = MachO(filename)
- header = executable.headers[-1]
-
- # Sanity check: ensure the executable slice is not signed (otherwise signature's section comes last in the
- # __LINKEDIT segment).
- sign_sec = [cmd for cmd in header.commands if cmd[0].cmd == LC_CODE_SIGNATURE]
- assert len(sign_sec) == 0, "Executable contains code signature!"
-
- # Find __LINKEDIT segment by name (16-byte zero padded string)
- __LINKEDIT_NAME = b'__LINKEDIT\x00\x00\x00\x00\x00\x00'
- linkedit_seg = [cmd for cmd in header.commands if cmd[0].cmd == LC_SEGMENT_64 and cmd[1].segname == __LINKEDIT_NAME]
- assert len(linkedit_seg) == 1, "Expected exactly one __LINKEDIT segment!"
- linkedit_seg = linkedit_seg[0][1] # Take the segment command entry
- # Find SYMTAB section
- symtab_sec = [cmd for cmd in header.commands if cmd[0].cmd == LC_SYMTAB]
- assert len(symtab_sec) == 1, "Expected exactly one SYMTAB section!"
- symtab_sec = symtab_sec[0][1] # Take the symtab command entry
-
- # The string table is located at the end of the SYMTAB section, which in turn is the last section in the __LINKEDIT
- # segment. Therefore, the end of SYMTAB section should be aligned with the end of __LINKEDIT segment, and in turn
- # both should be aligned with the end of the file (as we are in the last or the only arch slice).
- #
- # However, when removing the signature from the executable using codesign under macOS 10.13, the codesign utility
- # may produce an invalid file, with the declared length of the __LINKEDIT segment (linkedit_seg.filesize) pointing
- # beyond the end of file, as reported in issue #6167.
- #
- # We can compensate for that by not using the declared sizes anywhere, and simply recompute them. In the final
- # binary, the __LINKEDIT segment and the SYMTAB section MUST end at the end of the file (otherwise, we have bigger
- # issues...). So simply recompute the declared sizes as difference between the final file length and the
- # corresponding start offset (NOTE: the offset is relative to start of the slice, which is stored in header.offset.
- # In thin binaries, header.offset is zero and start offset is relative to the start of file, but with fat binaries,
- # header.offset is non-zero)
- symtab_sec.strsize = file_size - (header.offset + symtab_sec.stroff)
- linkedit_seg.filesize = file_size - (header.offset + linkedit_seg.fileoff)
-
- # Compute new vmsize by rounding filesize up to full page size.
- page_size = (0x4000 if _get_arch_string(header.header).startswith('arm64') else 0x1000)
- linkedit_seg.vmsize = math.ceil(linkedit_seg.filesize / page_size) * page_size
-
- # NOTE: according to spec, segments need to be aligned to page boundaries: 0x4000 (16 kB) for arm64, 0x1000 (4 kB)
- # for other arches. But it seems we can get away without rounding and padding the segment file size - perhaps
- # because it is the last one?
-
- # Write changes
- with open(filename, 'rb+') as fp:
- executable.write(fp)
-
- # In fat binaries, we also need to adjust the fat header. macholib as of version 1.14 does not support this, so we
- # need to do it ourselves...
- if executable.fat:
- from macholib.mach_o import (FAT_MAGIC, FAT_MAGIC_64, fat_arch, fat_arch64, fat_header)
- with open(filename, 'rb+') as fp:
- # Taken from MachO.load_fat() implementation. The fat header's signature has already been validated when we
- # loaded the file for the first time.
- fat = fat_header.from_fileobj(fp)
- if fat.magic == FAT_MAGIC:
- archs = [fat_arch.from_fileobj(fp) for i in range(fat.nfat_arch)]
- elif fat.magic == FAT_MAGIC_64:
- archs = [fat_arch64.from_fileobj(fp) for i in range(fat.nfat_arch)]
- # Adjust the size in the fat header for the last slice.
- arch = archs[-1]
- arch.size = file_size - arch.offset
- # Now write the fat headers back to the file.
- fp.seek(0)
- fat.to_fileobj(fp)
- for arch in archs:
- arch.to_fileobj(fp)
-
-
-def _get_arch_string(header):
- """
- Converts cputype and cpusubtype from mach_o.mach_header_64 into arch string comparible with lipo/codesign.
- The list of supported architectures can be found in man(1) arch.
- """
- # NOTE: the constants below are taken from macholib.mach_o
- cputype = header.cputype
- cpusubtype = header.cpusubtype & 0x0FFFFFFF
- if cputype == 0x01000000 | 7:
- if cpusubtype == 8:
- return 'x86_64h' # 64-bit intel (haswell)
- else:
- return 'x86_64' # 64-bit intel
- elif cputype == 0x01000000 | 12:
- if cpusubtype == 2:
- return 'arm64e'
- else:
- return 'arm64'
- elif cputype == 7:
- return 'i386' # 32-bit intel
- assert False, 'Unhandled architecture!'
-
-
-def update_exe_identifier(filename, pkg_filename):
- """
- Modifies the Mach-O image UUID stored in the LC_UUID command (if present) in order to ensure that different
- frozen applications have different identifiers. See TN3178 for details on why this is required:
- https://developer.apple.com/documentation/technotes/tn3178-checking-for-and-resolving-build-uuid-problems
- """
-
- # Compute hash of the PKG
- import hashlib
- pkg_hash = hashlib.sha1()
- with open(pkg_filename, 'rb') as fp:
- for chunk in iter(lambda: fp.read(8192), b""):
- pkg_hash.update(chunk)
-
- # Modify UUID in all arch slices of the executable.
- executable = MachO(filename)
- for header in executable.headers:
- # Find LC_UUID command
- uuid_cmd = [cmd for cmd in header.commands if cmd[0].cmd == LC_UUID]
- if not uuid_cmd:
- continue
- uuid_cmd = uuid_cmd[0]
-
- # Read the existing UUID (which is based on bootloader executable itself).
- original_uuid = uuid_cmd[1].uuid
-
- # Add original UUID to the hash; this is similar to what UUID v3/v5 do with namespace + name, except
- # that in our case, the prefix UUID (namespace) is added at the end, so that PKG hash needs to be
- # (pre)computed only once.
- combined_hash = pkg_hash.copy()
- combined_hash.update(original_uuid)
-
- new_uuid = combined_hash.digest()[:16] # Same as uuid.uuid3() / uuid.uuid5().
- assert len(new_uuid) == 16
-
- uuid_cmd[1].uuid = new_uuid
-
- # Write changes
- with open(filename, 'rb+') as fp:
- executable.write(fp)
-
-
-class InvalidBinaryError(Exception):
- """
- Exception raised by `get_binary_architectures` when it is passed an invalid binary.
- """
- pass
-
-
-class IncompatibleBinaryArchError(Exception):
- """
- Exception raised by `binary_to_target_arch` when the passed binary fails the strict architecture check.
- """
- def __init__(self, message):
- url = "https://pyinstaller.org/en/stable/feature-notes.html#macos-multi-arch-support"
- super().__init__(f"{message} For details about this error message, see: {url}")
-
-
-def get_binary_architectures(filename):
- """
- Inspects the given binary and returns tuple (is_fat, archs), where is_fat is boolean indicating fat/thin binary,
- and arch is list of architectures with lipo/codesign compatible names.
- """
- try:
- executable = MachO(filename)
- except ValueError as e:
- raise InvalidBinaryError("Invalid Mach-O binary!") from e
- return bool(executable.fat), [_get_arch_string(hdr.header) for hdr in executable.headers]
-
-
-def convert_binary_to_thin_arch(filename, thin_arch, output_filename=None):
- """
- Convert the given fat binary into thin one with the specified target architecture.
- """
- output_filename = output_filename or filename
- cmd_args = ['lipo', '-thin', thin_arch, filename, '-output', output_filename]
- p = subprocess.run(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf-8')
- if p.returncode:
- raise SystemError(f"lipo command ({cmd_args}) failed with error code {p.returncode}!\noutput: {p.stdout}")
-
-
-def merge_into_fat_binary(output_filename, *slice_filenames):
- """
- Merge the given single-arch thin binary files into a fat binary.
- """
- cmd_args = ['lipo', '-create', '-output', output_filename, *slice_filenames]
- p = subprocess.run(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf-8')
- if p.returncode:
- raise SystemError(f"lipo command ({cmd_args}) failed with error code {p.returncode}!\noutput: {p.stdout}")
-
-
-def binary_to_target_arch(filename, target_arch, display_name=None):
- """
- Check that the given binary contains required architecture slice(s) and convert the fat binary into thin one,
- if necessary.
- """
- if not display_name:
- display_name = filename # Same as input file
- # Check the binary
- is_fat, archs = get_binary_architectures(filename)
- if target_arch == 'universal2':
- if not is_fat:
- raise IncompatibleBinaryArchError(f"{display_name} is not a fat binary!")
- # Assume fat binary is universal2; nothing to do
- else:
- if is_fat:
- if target_arch not in archs:
- raise IncompatibleBinaryArchError(f"{display_name} does not contain slice for {target_arch}!")
- # Convert to thin arch
- logger.debug("Converting fat binary %s (%s) to thin binary (%s)", filename, display_name, target_arch)
- convert_binary_to_thin_arch(filename, target_arch)
- else:
- if target_arch not in archs:
- raise IncompatibleBinaryArchError(
- f"{display_name} is incompatible with target arch {target_arch} (has arch: {archs[0]})!"
- )
- # Binary has correct arch; nothing to do
-
-
-def remove_signature_from_binary(filename):
- """
- Remove the signature from all architecture slices of the given binary file using the codesign utility.
- """
- logger.debug("Removing signature from file %r", filename)
- cmd_args = ['/usr/bin/codesign', '--remove', '--all-architectures', filename]
- p = subprocess.run(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf-8')
- if p.returncode:
- raise SystemError(f"codesign command ({cmd_args}) failed with error code {p.returncode}!\noutput: {p.stdout}")
-
-
-def sign_binary(filename, identity=None, entitlements_file=None, deep=False):
- """
- Sign the binary using codesign utility. If no identity is provided, ad-hoc signing is performed.
- """
- extra_args = []
- if not identity:
- identity = '-' # ad-hoc signing
- else:
- extra_args.append('--options=runtime') # hardened runtime
- if entitlements_file:
- extra_args.append('--entitlements')
- extra_args.append(entitlements_file)
- if deep:
- extra_args.append('--deep')
-
- logger.debug("Signing file %r", filename)
- cmd_args = [
- '/usr/bin/codesign', '-s', identity, '--force', '--all-architectures', '--timestamp', *extra_args, filename
- ]
- p = subprocess.run(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf-8')
- if p.returncode:
- raise SystemError(f"codesign command ({cmd_args}) failed with error code {p.returncode}!\noutput: {p.stdout}")
-
-
-def set_dylib_dependency_paths(filename, target_rpath):
- """
- Modify the given dylib's identity (in LC_ID_DYLIB command) and the paths to dependent dylibs (in LC_LOAD_DYLIB)
- commands into `@rpath/` format, remove any existing rpaths (LC_RPATH commands), and add a new rpath
- (LC_RPATH command) with the specified path.
-
- Uses `install-tool-name` utility to make the changes.
-
- The system libraries (e.g., the ones found in /usr/lib) are exempted from path rewrite.
-
- For multi-arch fat binaries, this function extracts each slice into temporary file, processes it separately,
- and then merges all processed slices back into fat binary. This is necessary because `install-tool-name` cannot
- modify rpaths in cases when an existing rpath is present only in one slice.
- """
-
- # Check if we are dealing with a fat binary; the `install-name-tool` seems to be unable to remove an rpath that is
- # present only in one slice, so we need to extract each slice, process it separately, and then stich processed
- # slices back into a fat binary.
- is_fat, archs = get_binary_architectures(filename)
-
- if is_fat:
- with tempfile.TemporaryDirectory() as tmpdir:
- slice_filenames = []
- for arch in archs:
- slice_filename = os.path.join(tmpdir, arch)
- convert_binary_to_thin_arch(filename, arch, output_filename=slice_filename)
- _set_dylib_dependency_paths(slice_filename, target_rpath)
- slice_filenames.append(slice_filename)
- merge_into_fat_binary(filename, *slice_filenames)
- else:
- # Thin binary - we can process it directly
- _set_dylib_dependency_paths(filename, target_rpath)
-
-
-def _set_dylib_dependency_paths(filename, target_rpath):
- """
- The actual implementation of set_dylib_dependency_paths functionality.
-
- Implicitly assumes that a single-arch thin binary is given.
- """
-
- # Relocatable commands that we should overwrite - same list as used by `macholib`.
- _RELOCATABLE = {
- LC_LOAD_DYLIB,
- LC_LOAD_UPWARD_DYLIB,
- LC_LOAD_WEAK_DYLIB,
- LC_PREBOUND_DYLIB,
- LC_REEXPORT_DYLIB,
- }
-
- # Parse dylib's header to extract the following commands:
- # - LC_LOAD_DYLIB (or any member of _RELOCATABLE list): dylib load commands (dependent libraries)
- # - LC_RPATH: rpath definitions
- # - LC_ID_DYLIB: dylib's identity
- binary = MachO(filename)
-
- dylib_id = None
- rpaths = set()
- linked_libs = set()
-
- for header in binary.headers:
- for cmd in header.commands:
- lc_type = cmd[0].cmd
- if lc_type not in _RELOCATABLE and lc_type not in {LC_RPATH, LC_ID_DYLIB}:
- continue
-
- # Decode path, strip trailing NULL characters
- path = cmd[2].decode('utf-8').rstrip('\x00')
-
- if lc_type in _RELOCATABLE:
- linked_libs.add(path)
- elif lc_type == LC_RPATH:
- rpaths.add(path)
- elif lc_type == LC_ID_DYLIB:
- dylib_id = path
-
- del binary
-
- # If dylib has identifier set, compute the normalized version, in form of `@rpath/basename`.
- normalized_dylib_id = None
- if dylib_id:
- normalized_dylib_id = str(pathlib.PurePath('@rpath') / pathlib.PurePath(dylib_id).name)
-
- # Find dependent libraries that should have their prefix path changed to `@rpath`. If any dependent libraries
- # end up using `@rpath` (originally or due to rewrite), set the `rpath_required` boolean to True, so we know
- # that we need to add our rpath.
- changed_lib_paths = []
- rpath_required = False
- for linked_lib in linked_libs:
- # Leave system dynamic libraries unchanged.
- if macholib.util.in_system_path(linked_lib):
- continue
-
- # The older python.org builds that use system Tcl/Tk framework have their _tkinter.cpython-*-darwin.so
- # library linked against /Library/Frameworks/Tcl.framework/Versions/8.5/Tcl and
- # /Library/Frameworks/Tk.framework/Versions/8.5/Tk, although the actual frameworks are located in
- # /System/Library/Frameworks. Therefore, they slip through the above in_system_path() check, and we need to
- # exempt them manually.
- _exemptions = [
- '/Library/Frameworks/Tcl.framework/',
- '/Library/Frameworks/Tk.framework/',
- ]
- if any([x in linked_lib for x in _exemptions]):
- continue
-
- # This linked library will end up using `@rpath`, whether modified or not...
- rpath_required = True
-
- new_path = str(pathlib.PurePath('@rpath') / pathlib.PurePath(linked_lib).name)
- if linked_lib == new_path:
- continue
-
- changed_lib_paths.append((linked_lib, new_path))
-
- # Gather arguments for `install-name-tool`
- install_name_tool_args = []
-
- # Modify the dylib identifier if necessary
- if normalized_dylib_id and normalized_dylib_id != dylib_id:
- install_name_tool_args += ["-id", normalized_dylib_id]
-
- # Changed libs
- for original_path, new_path in changed_lib_paths:
- install_name_tool_args += ["-change", original_path, new_path]
-
- # Remove all existing rpaths except for the target rpath (if it already exists). `install_name_tool` disallows using
- # `-delete_rpath` and `-add_rpath` with the same argument.
- for rpath in rpaths:
- if rpath == target_rpath:
- continue
- install_name_tool_args += [
- "-delete_rpath",
- rpath,
- ]
-
- # If any of linked libraries use @rpath now and our target rpath is not already added, add it.
- # NOTE: @rpath in the dylib identifier does not actually require the rpath to be set on the binary...
- if rpath_required and target_rpath not in rpaths:
- install_name_tool_args += [
- "-add_rpath",
- target_rpath,
- ]
-
- # If we have no arguments, finish immediately.
- if not install_name_tool_args:
- return
-
- # Run `install_name_tool`
- cmd_args = ["install_name_tool", *install_name_tool_args, filename]
- p = subprocess.run(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf-8')
- if p.returncode:
- raise SystemError(
- f"install_name_tool command ({cmd_args}) failed with error code {p.returncode}!\noutput: {p.stdout}"
- )
-
-
-def is_framework_bundle_lib(lib_path):
- """
- Check if the given shared library is part of a .framework bundle.
- """
-
- lib_path = pathlib.PurePath(lib_path)
-
- # For now, focus only on versioned layout, such as `QtCore.framework/Versions/5/QtCore`
- if lib_path.parent.parent.name != "Versions":
- return False
- if lib_path.parent.parent.parent.name != lib_path.name + ".framework":
- return False
-
- return True
-
-
-def collect_files_from_framework_bundles(collected_files):
- """
- Scan the given TOC list of collected files for shared libraries that are collected from macOS .framework bundles,
- and collect the bundles' Info.plist files. Additionally, create/restore the following symbolic links:
- - `Versions/Current` pointing to the `Versions/` directory containing the binary
- - `` in the top-level .framework directory, pointing to `Versions/Current/`
- - `Resources` in the top-level .framework directory, pointing to `Versions/Current/Resources`
- - additional directories in top-level .framework directory, pointing to their counterparts in `Versions/Current`
- directory.
-
- Returns updated TOC list with added entries for the discovered Info.plist files and generated symbolic links.
- """
- invalid_framework_found = False
-
- framework_entries = set() # Additional TOC entries for collected files. Use set for de-duplication.
- framework_paths = set() # Registered framework paths for 2nd pass.
- framework_symlinked_dirs = set() # Symlinked directories for filtering in 3rd pass.
-
- # 1st pass: discover binaries from .framework bundles, and for each such binary:
- # - collect `Info.plist`
- # - create `Current` -> `` symlink in `.framework/Versions` directory.
- # - create `.framework/` -> `.framework/Versions/Current/` symlink.
- # - create `.framework/Resources` -> `.framework/Versions/Current/Resources` symlink.
- for dest_name, src_name, typecode in collected_files:
- if typecode != 'BINARY':
- continue
-
- src_path = pathlib.Path(src_name) # /src/path/to/.framework/Versions//
- dest_path = pathlib.PurePath(dest_name) # /dest/path/to/.framework/Versions//
-
- # Check whether binary originates from a .framework bundle
- if not is_framework_bundle_lib(src_path):
- continue
-
- # Check whether binary is also collected into a .framework bundle (i.e., the original layout is preserved)
- if not is_framework_bundle_lib(dest_path):
- continue
-
- # Assuming versioned layout, Info.plist should exist in Resources directory located next to the binary.
- info_plist_src = src_path.parent / "Resources" / "Info.plist"
- if not info_plist_src.is_file():
- # Alas, the .framework bundles shipped with PySide/PyQt might have Info.plist available only in the
- # top-level Resources directory. So accommodate this scenario as well, but collect the file into
- # versioned directory to appease the code-signing gods...
- info_plist_src_top = src_path.parent.parent.parent / "Resources" / "Info.plist"
- if not info_plist_src_top.is_file():
- # Strictly speaking, a .framework bundle without Info.plist is invalid. However, that did not prevent
- # PyQt from shipping such Qt .framework bundles up until v5.14.1. So by default, we just complain via
- # a warning message; if such binaries work in unfrozen python, they should also work in frozen
- # application. The codesign will refuse to sign the .app bundle (if we are generating one), but there
- # is nothing we can do about that.
- invalid_framework_found = True
- framework_dir = src_path.parent.parent.parent
- if compat.strict_collect_mode:
- raise SystemError(f"Could not find Info.plist in {framework_dir}!")
- else:
- logger.warning("Could not find Info.plist in %s!", framework_dir)
- continue
- info_plist_src = info_plist_src_top
- info_plist_dest = dest_path.parent / "Resources" / "Info.plist"
- framework_entries.add((str(info_plist_dest), str(info_plist_src), "DATA"))
-
- # Reconstruct the symlink Versions/Current -> Versions/.
- # This one seems to be necessary for code signing, but might be absent from .framework bundles shipped with
- # python packages (i.e., PyPI wheels that do not support symlinks). So we always create it ourselves.
- framework_entries.add((str(dest_path.parent.parent / "Current"), str(dest_path.parent.name), "SYMLINK"))
- framework_symlinked_dirs.add(dest_path.parent.parent / "Current") # Cleanup in 3rd pass
-
- dest_framework_path = dest_path.parent.parent.parent # Top-level .framework directory path.
-
- # Symlink the binary in the `Current` directory to the top-level .framework directory.
- # If TOC also contains an entry for a hard-copy entry in the top-level directory, it will be replaced by this
- # symlink entry due to how our TOC normalization works.
- framework_entries.add((
- str(dest_framework_path / dest_path.name),
- str(pathlib.PurePath("Versions/Current") / dest_path.name),
- "SYMLINK",
- ))
-
- # Ditto for the `Resources` directory.
- framework_entries.add((
- str(dest_framework_path / "Resources"),
- "Versions/Current/Resources",
- "SYMLINK",
- ))
- framework_symlinked_dirs.add(dest_framework_path / "Resources") # Cleanup in 3rd pass
-
- # Register the framework parent path to use in additional directories scan in subsequent pass.
- framework_paths.add(dest_framework_path)
-
- # 2nd pass: scan for additional collected directories from .framework bundles, and create symlinks to the top-level
- # application directory. Make the outer loop go over the registered framework paths, so it becomes no-op if no
- # framework paths are registered.
- VALID_SUBDIRS = {'Documentation', 'Frameworks', 'Headers', 'Helpers', 'Libraries', 'Resources'}
-
- for dest_framework_path in framework_paths:
- for dest_name, src_name, typecode in collected_files:
- dest_path = pathlib.PurePath(dest_name)
-
- # Try matching against framework path
- try:
- remaining_path = dest_path.relative_to(dest_framework_path)
- except ValueError: # dest_path is not subpath of dest_framework_path
- continue
-
- remaining_path_parts = remaining_path.parts
-
- # We are interested only in entries under Versions directory.
- if remaining_path_parts[0] != 'Versions':
- continue
-
- # If the entry name is among valid sub-directory names, create symlink.
- dir_name = remaining_path_parts[2]
- if dir_name not in VALID_SUBDIRS:
- continue
-
- framework_entries.add((
- str(dest_framework_path / dir_name),
- str(pathlib.PurePath("Versions/Current") / dir_name),
- "SYMLINK",
- ))
- framework_symlinked_dirs.add(dest_framework_path / dir_name) # Cleanup in 3rd pass
-
- # 3rd pass: remove TOC entries under directories for which we are trying to restore symbolic links. These may be
- # present when a python package (i.e., a PyPI wheel) ships a .framework bundle where symlinks were mangled into hard
- # copies (due to lack of support for symlinks in wheels) AND these hard copies are collected through use of
- # `collect_data` / `collect_binaries` / `collect_all` (either by user or by a hook).
- if framework_symlinked_dirs:
- filtered_toc = []
-
- for dest_name, src_name, typecode in collected_files:
- dest_path = pathlib.PurePath(dest_name)
-
- if any(dest_parent in framework_symlinked_dirs for dest_parent in dest_path.parents):
- continue # Inside symlinked directory; remove
-
- filtered_toc.append((dest_name, src_name, typecode))
- else:
- filtered_toc = collected_files
-
- # If we encountered an invalid .framework bundle without Info.plist, warn the user that code-signing will most
- # likely fail.
- if invalid_framework_found:
- logger.warning(
- "One or more collected .framework bundles have missing Info.plist file. If you are building an .app "
- "bundle, you will most likely not be able to code-sign it."
- )
-
- return filtered_toc + sorted(framework_entries)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/run_tests.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/run_tests.py
deleted file mode 100755
index c655c7a..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/run_tests.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-# -----------------------------------------------------------------------------
-
-import argparse
-import sys
-
-import pytest
-
-from PyInstaller.compat import importlib_metadata
-
-
-def paths_to_test(include_only=None):
- """
- If ``include_only`` is falsey, this functions returns paths from all entry points. Otherwise, this parameter
- must be a string or sequence of strings. In this case, this function will return *only* paths from entry points
- whose ``module_name`` begins with the provided string(s).
- """
- # Convert a string to a list.
- if isinstance(include_only, str):
- include_only = [include_only]
-
- # Walk through all entry points.
- test_path_list = []
- for entry_point in importlib_metadata.entry_points(group="pyinstaller40", name="tests"):
- # Implement ``include_only``.
- if (
- not include_only # If falsey, include everything,
- # Otherwise, include only the specified modules.
- or any(entry_point.module.startswith(name) for name in include_only)
- ):
- test_path_list += list(entry_point.load()())
- return test_path_list
-
-
-# Run pytest on all tests registered by the PyInstaller setuptools testing entry point. If provided,
-# the ``include_only`` argument is passed to ``path_to_test``.
-def run_pytest(*args, **kwargs):
- paths = paths_to_test(include_only=kwargs.pop("include_only", None))
- # Return an error code if no tests were discovered.
- if not paths:
- print("Error: no tests discovered.", file=sys.stderr)
- # This indicates no tests were discovered; see
- # https://docs.pytest.org/en/latest/usage.html#possible-exit-codes.
- return 5
- else:
- # See https://docs.pytest.org/en/latest/usage.html#calling-pytest-from-python-code.
- # Omit ``args[0]``, which is the name of this script.
- print("pytest " + " ".join([*paths, *args[1:]]))
- return pytest.main([*paths, *args[1:]], **kwargs)
-
-
-if __name__ == "__main__":
- # Look only for the ``--include_only`` argument.
- parser = argparse.ArgumentParser(description='Run PyInstaller packaging tests.')
- parser.add_argument(
- "--include_only",
- action="append",
- help="Only run tests from the specified package.",
- )
- args, unknown = parser.parse_known_args(sys.argv)
- # Convert the parsed args into a dict using ``vars(args)``.
- sys.exit(run_pytest(*unknown, **vars(args)))
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/tests.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/tests.py
deleted file mode 100755
index 4a0b9c7..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/tests.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Decorators for skipping PyInstaller tests when specific requirements are not met.
-"""
-
-import inspect
-import sys
-import textwrap
-
-import pytest
-
-from PyInstaller.utils.hooks import check_requirement
-
-# Wrap some pytest decorators to be consistent in tests.
-parametrize = pytest.mark.parametrize
-skipif = pytest.mark.skipif
-xfail = pytest.mark.xfail
-skip = pytest.mark.skip
-
-# Use these decorators to use the `pyi_builder` fixture only in onedir or only in onefile mode instead of both.
-onedir_only = pytest.mark.parametrize('pyi_builder', ['onedir'], indirect=True)
-onefile_only = pytest.mark.parametrize('pyi_builder', ['onefile'], indirect=True)
-
-
-def importorskip(package: str):
- """
- Skip a decorated test if **package** is not importable.
-
- Arguments:
- package:
- The name of the module. May be anything that is allowed after the ``import`` keyword. e.g. 'numpy' or
- 'PIL.Image'.
- Returns:
- A pytest marker which either skips the test or does nothing.
-
- This function intentionally does not import the module. Doing so can lead to `sys.path` and `PATH` being
- polluted, which then breaks later builds.
- """
- if not importable(package):
- return pytest.mark.skip(f"Can't import '{package}'.")
- return pytest.mark.skipif(False, reason=f"Don't skip: '{package}' is importable.")
-
-
-def importable(package: str):
- from importlib.util import find_spec
-
- # The find_spec() function is used by the importlib machinery to locate a module to import. Using it finds the
- # module but does not run it. Unfortunately, it does import parent modules to check submodules.
- if "." in package:
- # Using subprocesses is slow. If the top level module doesn't exist then we can skip it.
- if not importable(package.split(".")[0]):
- return False
- # This is a submodule, import it in isolation.
- from subprocess import DEVNULL, run
- return run([sys.executable, "-c", "import " + package], stdout=DEVNULL, stderr=DEVNULL).returncode == 0
-
- return find_spec(package) is not None
-
-
-def requires(requirement: str):
- """
- Mark a test to be skipped if **requirement** is not satisfied.
-
- Args:
- requirement:
- A distribution name and optional version specifier(s). See :func:`PyInstaller.utils.hooks.check_requirement`
- which this argument is forwarded to.
- Returns:
- Either a skip marker or a dummy marker.
-
- This function operates on distribution metadata, and does not import any modules.
- """
- if check_requirement(requirement):
- return pytest.mark.skipif(False, reason=f"Don't skip: '{requirement}' is satisfied.")
- else:
- return pytest.mark.skip(f"Requires {requirement}.")
-
-
-def gen_sourcefile(tmp_path, source, test_id=None):
- """
- Generate a source file for testing.
-
- The source will be written into a file named like the test-function. This file will then be passed to
- `test_script`. If you need other related file, e.g. as `.toc`-file for testing the content, put it at at the
- normal place. Just mind to take the basnename from the test-function's name.
-
- :param script: Source code to create executable from. This will be saved into a temporary file which is then
- passed on to `test_script`.
-
- :param test_id: Test-id for parametrized tests. If given, it will be appended to the script filename,
- separated by two underscores.
- """
- testname = inspect.stack()[1][3]
- if test_id:
- # For parametrized test append the test-id.
- testname = testname + '__' + test_id
-
- # Periods are not allowed in Python module names.
- testname = testname.replace('.', '_')
- scriptfile = tmp_path / (testname + '.py')
- source = textwrap.dedent(source)
- scriptfile.write_text(source, encoding='utf-8')
- return scriptfile
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__init__.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__init__.py
deleted file mode 100755
index a7501ae..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-__author__ = 'martin'
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index d3facc7..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/icon.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/icon.cpython-312.pyc
deleted file mode 100644
index 8c11f42..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/icon.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/versioninfo.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/versioninfo.cpython-312.pyc
deleted file mode 100644
index e2b9ef4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/versioninfo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winmanifest.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winmanifest.cpython-312.pyc
deleted file mode 100644
index 0f21093..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winmanifest.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winresource.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winresource.cpython-312.pyc
deleted file mode 100644
index 236571f..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winresource.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winutils.cpython-312.pyc
deleted file mode 100644
index 8b042c4..0000000
Binary files a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/__pycache__/winutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/icon.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/icon.py
deleted file mode 100755
index 7b703f8..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/icon.py
+++ /dev/null
@@ -1,251 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-The code in this module supports the --icon parameter on Windows.
-(For --icon support under macOS, see building/osx.py.)
-
-The only entry point, called from api.py, is CopyIcons(), below. All the elaborate structure of classes that follows
-is used to support the operation of CopyIcons_FromIco(). None of these classes and globals are referenced outside
-this module.
-"""
-
-import os
-import os.path
-import struct
-
-import PyInstaller.log as logging
-from PyInstaller import config
-from PyInstaller.compat import pywintypes, win32api
-from PyInstaller.building.icon import normalize_icon_type
-
-logger = logging.getLogger(__name__)
-
-RT_ICON = 3
-RT_GROUP_ICON = 14
-LOAD_LIBRARY_AS_DATAFILE = 2
-
-
-class Structure:
- def __init__(self):
- size = self._sizeInBytes = struct.calcsize(self._format_)
- self._fields_ = list(struct.unpack(self._format_, b'\000' * size))
- indexes = self._indexes_ = {}
- for i, nm in enumerate(self._names_):
- indexes[nm] = i
-
- def dump(self):
- logger.info("DUMP of %s", self)
- for name in self._names_:
- if not name.startswith('_'):
- logger.info("%20s = %s", name, getattr(self, name))
- logger.info("")
-
- def __getattr__(self, name):
- if name in self._names_:
- index = self._indexes_[name]
- return self._fields_[index]
- try:
- return self.__dict__[name]
- except KeyError as e:
- raise AttributeError(name) from e
-
- def __setattr__(self, name, value):
- if name in self._names_:
- index = self._indexes_[name]
- self._fields_[index] = value
- else:
- self.__dict__[name] = value
-
- def tostring(self):
- return struct.pack(self._format_, *self._fields_)
-
- def fromfile(self, file):
- data = file.read(self._sizeInBytes)
- self._fields_ = list(struct.unpack(self._format_, data))
-
-
-class ICONDIRHEADER(Structure):
- _names_ = "idReserved", "idType", "idCount"
- _format_ = "hhh"
-
-
-class ICONDIRENTRY(Structure):
- _names_ = ("bWidth", "bHeight", "bColorCount", "bReserved", "wPlanes", "wBitCount", "dwBytesInRes", "dwImageOffset")
- _format_ = "bbbbhhii"
-
-
-class GRPICONDIR(Structure):
- _names_ = "idReserved", "idType", "idCount"
- _format_ = "hhh"
-
-
-class GRPICONDIRENTRY(Structure):
- _names_ = ("bWidth", "bHeight", "bColorCount", "bReserved", "wPlanes", "wBitCount", "dwBytesInRes", "nID")
- _format_ = "bbbbhhih"
-
-
-# An IconFile instance is created for each .ico file given.
-class IconFile:
- def __init__(self, path):
- self.path = path
- try:
- # The path is from the user parameter, don't trust it.
- file = open(self.path, "rb")
- except OSError:
- # The icon file can't be opened for some reason. Stop the
- # program with an informative message.
- raise SystemExit(f'ERROR: Unable to open icon file {self.path}!')
- with file:
- self.entries = []
- self.images = []
- header = self.header = ICONDIRHEADER()
- header.fromfile(file)
- for i in range(header.idCount):
- entry = ICONDIRENTRY()
- entry.fromfile(file)
- self.entries.append(entry)
- for e in self.entries:
- file.seek(e.dwImageOffset, 0)
- self.images.append(file.read(e.dwBytesInRes))
-
- def grp_icon_dir(self):
- return self.header.tostring()
-
- def grp_icondir_entries(self, id=1):
- data = b''
- for entry in self.entries:
- e = GRPICONDIRENTRY()
- for n in e._names_[:-1]:
- setattr(e, n, getattr(entry, n))
- e.nID = id
- id = id + 1
- data = data + e.tostring()
- return data
-
-
-def CopyIcons_FromIco(dstpath, srcpath, id=1):
- """
- Use the Win API UpdateResource facility to apply the icon resource(s) to the .exe file.
-
- :param str dstpath: absolute path of the .exe file being built.
- :param str srcpath: list of 1 or more .ico file paths
- """
- icons = map(IconFile, srcpath)
- logger.debug("Copying icons from %s", srcpath)
-
- hdst = win32api.BeginUpdateResource(dstpath, 0)
-
- iconid = 1
- # Each step in the following enumerate() will instantiate an IconFile object, as a result of deferred execution
- # of the map() above.
- for i, f in enumerate(icons):
- data = f.grp_icon_dir()
- data = data + f.grp_icondir_entries(iconid)
- win32api.UpdateResource(hdst, RT_GROUP_ICON, i + 1, data)
- logger.debug("Writing RT_GROUP_ICON %d resource with %d bytes", i + 1, len(data))
- for data in f.images:
- win32api.UpdateResource(hdst, RT_ICON, iconid, data)
- logger.debug("Writing RT_ICON %d resource with %d bytes", iconid, len(data))
- iconid = iconid + 1
-
- win32api.EndUpdateResource(hdst, 0)
-
-
-def CopyIcons(dstpath, srcpath):
- """
- Called from building/api.py to handle icons. If the input was by --icon on the command line, srcpath is a single
- string. However, it is possible to modify the spec file adding icon=['foo.ico','bar.ico'] to the EXE() statement.
- In that case, srcpath is a list of strings.
-
- The string format is either path-to-.ico or path-to-.exe,n for n an integer resource index in the .exe. In either
- case, the path can be relative or absolute.
- """
-
- if isinstance(srcpath, (str, os.PathLike)):
- # Just a single string, make it a one-element list.
- srcpath = [srcpath]
- # Convert possible PathLike elements to strings to allow the splitter function to work.
- srcpath = [str(path) for path in srcpath]
-
- def splitter(s):
- """
- Convert "pathname" to tuple ("pathname", None)
- Convert "pathname,n" to tuple ("pathname", n)
- """
- try:
- srcpath, index = s.split(',')
- return srcpath.strip(), int(index)
- except ValueError:
- return s, None
-
- # split all the items in the list into tuples as above.
- srcpath = list(map(splitter, srcpath))
-
- if len(srcpath) > 1:
- # More than one icon source given. We currently handle multiple icons by calling CopyIcons_FromIco(), which only
- # allows .ico, but will convert to that format if needed.
- #
- # Note that a ",index" on a .ico is just ignored in the single or multiple case.
- srcs = []
- for s in srcpath:
- srcs.append(normalize_icon_type(s[0], ("ico",), "ico", config.CONF["workpath"]))
- return CopyIcons_FromIco(dstpath, srcs)
-
- # Just one source given.
- srcpath, index = srcpath[0]
-
- # Makes sure the icon exists and attempts to convert to the proper format if applicable
- srcpath = normalize_icon_type(srcpath, ("exe", "ico"), "ico", config.CONF["workpath"])
-
- srcext = os.path.splitext(srcpath)[1]
-
- # Handle the simple case of foo.ico, ignoring any index.
- if srcext.lower() == '.ico':
- return CopyIcons_FromIco(dstpath, [srcpath])
-
- # Single source is not .ico, presumably it is .exe (and if not, some error will occur).
- if index is not None:
- logger.debug("Copying icon from %s, %d", srcpath, index)
- else:
- logger.debug("Copying icons from %s", srcpath)
-
- try:
- # Attempt to load the .ico or .exe containing the icon into memory using the same mechanism as if it were a DLL.
- # If this fails for any reason (for example if the file does not exist or is not a .ico/.exe) then LoadLibraryEx
- # returns a null handle and win32api raises a unique exception with a win error code and a string.
- hsrc = win32api.LoadLibraryEx(srcpath, 0, LOAD_LIBRARY_AS_DATAFILE)
- except pywintypes.error as W32E:
- # We could continue with no icon (i.e., just return), but it seems best to terminate the build with a message.
- raise SystemExit(
- "ERROR: Unable to load icon file {}\n {} (Error code {})".format(srcpath, W32E.strerror, W32E.winerror)
- )
- hdst = win32api.BeginUpdateResource(dstpath, 0)
- if index is None:
- grpname = win32api.EnumResourceNames(hsrc, RT_GROUP_ICON)[0]
- elif index >= 0:
- grpname = win32api.EnumResourceNames(hsrc, RT_GROUP_ICON)[index]
- else:
- grpname = -index
- data = win32api.LoadResource(hsrc, RT_GROUP_ICON, grpname)
- win32api.UpdateResource(hdst, RT_GROUP_ICON, grpname, data)
- for iconname in win32api.EnumResourceNames(hsrc, RT_ICON):
- data = win32api.LoadResource(hsrc, RT_ICON, iconname)
- win32api.UpdateResource(hdst, RT_ICON, iconname, data)
- win32api.FreeLibrary(hsrc)
- win32api.EndUpdateResource(hdst, 0)
-
-
-if __name__ == "__main__":
- import sys
-
- dstpath = sys.argv[1]
- srcpath = sys.argv[2:]
- CopyIcons(dstpath, srcpath)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/versioninfo.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/versioninfo.py
deleted file mode 100755
index b290644..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/versioninfo.py
+++ /dev/null
@@ -1,604 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-
-import struct
-
-import pefile
-
-from PyInstaller.compat import win32api
-
-
-def pefile_check_control_flow_guard(filename):
- """
- Checks if the specified PE file has CFG (Control Flow Guard) enabled.
-
- Parameters
- ----------
- filename : str
- Path to the PE file to inspect.
-
- Returns
- ----------
- bool
- True if file is a PE file with CFG enabled. False if CFG is not enabled or if file could not be processed using
- the pefile library.
- """
- try:
- pe = pefile.PE(filename, fast_load=True)
- # https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
- # IMAGE_DLLCHARACTERISTICS_GUARD_CF = 0x4000
- return bool(pe.OPTIONAL_HEADER.DllCharacteristics & 0x4000)
- except Exception:
- return False
-
-
-# Ensures no code from the executable is executed.
-LOAD_LIBRARY_AS_DATAFILE = 2
-
-
-def getRaw(text):
- """
- Encodes text as UTF-16LE (Microsoft 'Unicode') for use in structs.
- """
- return text.encode('UTF-16LE')
-
-
-def read_version_info_from_executable(exe_filename):
- """
- Read the version information structure from the given executable's resources, and return it as an instance of
- `VSVersionInfo` structure.
- """
- h = win32api.LoadLibraryEx(exe_filename, 0, LOAD_LIBRARY_AS_DATAFILE)
- res = win32api.EnumResourceNames(h, pefile.RESOURCE_TYPE['RT_VERSION'])
- if not len(res):
- return None
- data = win32api.LoadResource(h, pefile.RESOURCE_TYPE['RT_VERSION'], res[0])
- info = VSVersionInfo()
- info.fromRaw(data)
- win32api.FreeLibrary(h)
- return info
-
-
-def nextDWord(offset):
- """
- Align `offset` to the next 4-byte boundary.
- """
- return ((offset + 3) >> 2) << 2
-
-
-class VSVersionInfo:
- """
- WORD wLength; // length of the VS_VERSION_INFO structure
- WORD wValueLength; // length of the Value member
- WORD wType; // 1 means text, 0 means binary
- WCHAR szKey[]; // Contains the Unicode string "VS_VERSION_INFO".
- WORD Padding1[];
- VS_FIXEDFILEINFO Value;
- WORD Padding2[];
- WORD Children[]; // zero or more StringFileInfo or VarFileInfo
- // structures (or both) that are children of the
- // current version structure.
- """
- def __init__(self, ffi=None, kids=None):
- self.ffi = ffi
- self.kids = kids or []
-
- def fromRaw(self, data):
- i, (sublen, vallen, wType, nm) = parseCommon(data)
- #vallen is length of the ffi, typ is 0, nm is 'VS_VERSION_INFO'.
- i = nextDWord(i)
- # Now a VS_FIXEDFILEINFO
- self.ffi = FixedFileInfo()
- j = self.ffi.fromRaw(data, i)
- i = j
- while i < sublen:
- j = i
- i, (csublen, cvallen, ctyp, nm) = parseCommon(data, i)
- if nm.strip() == 'StringFileInfo':
- sfi = StringFileInfo()
- k = sfi.fromRaw(csublen, cvallen, nm, data, i, j + csublen)
- self.kids.append(sfi)
- i = k
- else:
- vfi = VarFileInfo()
- k = vfi.fromRaw(csublen, cvallen, nm, data, i, j + csublen)
- self.kids.append(vfi)
- i = k
- i = j + csublen
- i = nextDWord(i)
- return i
-
- def toRaw(self):
- raw_name = getRaw('VS_VERSION_INFO')
- rawffi = self.ffi.toRaw()
- vallen = len(rawffi)
- typ = 0
- sublen = 6 + len(raw_name) + 2
- pad = b''
- if sublen % 4:
- pad = b'\000\000'
- sublen = sublen + len(pad) + vallen
- pad2 = b''
- if sublen % 4:
- pad2 = b'\000\000'
- tmp = b''.join([kid.toRaw() for kid in self.kids])
- sublen = sublen + len(pad2) + len(tmp)
- return struct.pack('HHH', sublen, vallen, typ) + raw_name + b'\000\000' + pad + rawffi + pad2 + tmp
-
- def __eq__(self, other):
- return self.toRaw() == other
-
- def __str__(self, indent=''):
- indent = indent + ' '
- tmp = [kid.__str__(indent + ' ') for kid in self.kids]
- tmp = ', \n'.join(tmp)
- return '\n'.join([
- "# UTF-8",
- "#",
- "# For more details about fixed file info 'ffi' see:",
- "# http://msdn.microsoft.com/en-us/library/ms646997.aspx",
- "VSVersionInfo(",
- indent + f"ffi={self.ffi.__str__(indent)},",
- indent + "kids=[",
- tmp,
- indent + "]",
- ")",
- ])
-
- def __repr__(self):
- return "versioninfo.VSVersionInfo(ffi=%r, kids=%r)" % (self.ffi, self.kids)
-
-
-def parseCommon(data, start=0):
- i = start + 6
- (wLength, wValueLength, wType) = struct.unpack('3H', data[start:i])
- i, text = parseUString(data, i, i + wLength)
- return i, (wLength, wValueLength, wType, text)
-
-
-def parseUString(data, start, limit):
- i = start
- while i < limit:
- if data[i:i + 2] == b'\000\000':
- break
- i += 2
- text = data[start:i].decode('UTF-16LE')
- i += 2
- return i, text
-
-
-class FixedFileInfo:
- """
- DWORD dwSignature; //Contains the value 0xFEEFO4BD
- DWORD dwStrucVersion; // binary version number of this structure.
- // The high-order word of this member contains
- // the major version number, and the low-order
- // word contains the minor version number.
- DWORD dwFileVersionMS; // most significant 32 bits of the file's binary
- // version number
- DWORD dwFileVersionLS; //
- DWORD dwProductVersionMS; // most significant 32 bits of the binary version
- // number of the product with which this file was
- // distributed
- DWORD dwProductVersionLS; //
- DWORD dwFileFlagsMask; // bitmask that specifies the valid bits in
- // dwFileFlags. A bit is valid only if it was
- // defined when the file was created.
- DWORD dwFileFlags; // VS_FF_DEBUG, VS_FF_PATCHED etc.
- DWORD dwFileOS; // VOS_NT, VOS_WINDOWS32 etc.
- DWORD dwFileType; // VFT_APP etc.
- DWORD dwFileSubtype; // 0 unless VFT_DRV or VFT_FONT or VFT_VXD
- DWORD dwFileDateMS;
- DWORD dwFileDateLS;
- """
- def __init__(
- self,
- filevers=(0, 0, 0, 0),
- prodvers=(0, 0, 0, 0),
- mask=0x3f,
- flags=0x0,
- OS=0x40004,
- fileType=0x1,
- subtype=0x0,
- date=(0, 0)
- ):
- self.sig = 0xfeef04bd
- self.strucVersion = 0x10000
- self.fileVersionMS = (filevers[0] << 16) | (filevers[1] & 0xffff)
- self.fileVersionLS = (filevers[2] << 16) | (filevers[3] & 0xffff)
- self.productVersionMS = (prodvers[0] << 16) | (prodvers[1] & 0xffff)
- self.productVersionLS = (prodvers[2] << 16) | (prodvers[3] & 0xffff)
- self.fileFlagsMask = mask
- self.fileFlags = flags
- self.fileOS = OS
- self.fileType = fileType
- self.fileSubtype = subtype
- self.fileDateMS = date[0]
- self.fileDateLS = date[1]
-
- def fromRaw(self, data, i):
- (
- self.sig,
- self.strucVersion,
- self.fileVersionMS,
- self.fileVersionLS,
- self.productVersionMS,
- self.productVersionLS,
- self.fileFlagsMask,
- self.fileFlags,
- self.fileOS,
- self.fileType,
- self.fileSubtype,
- self.fileDateMS,
- self.fileDateLS,
- ) = struct.unpack('13L', data[i:i + 52])
- return i + 52
-
- def toRaw(self):
- return struct.pack(
- '13L',
- self.sig,
- self.strucVersion,
- self.fileVersionMS,
- self.fileVersionLS,
- self.productVersionMS,
- self.productVersionLS,
- self.fileFlagsMask,
- self.fileFlags,
- self.fileOS,
- self.fileType,
- self.fileSubtype,
- self.fileDateMS,
- self.fileDateLS,
- )
-
- def __eq__(self, other):
- return self.toRaw() == other
-
- def __str__(self, indent=''):
- fv = (
- self.fileVersionMS >> 16, self.fileVersionMS & 0xffff,
- self.fileVersionLS >> 16, self.fileVersionLS & 0xffff,
- ) # yapf: disable
- pv = (
- self.productVersionMS >> 16, self.productVersionMS & 0xffff,
- self.productVersionLS >> 16, self.productVersionLS & 0xffff,
- ) # yapf: disable
- fd = (self.fileDateMS, self.fileDateLS)
- tmp = [
- 'FixedFileInfo(',
- '# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)',
- '# Set not needed items to zero 0.',
- 'filevers=%s,' % (fv,),
- 'prodvers=%s,' % (pv,),
- "# Contains a bitmask that specifies the valid bits 'flags'r",
- 'mask=%s,' % hex(self.fileFlagsMask),
- '# Contains a bitmask that specifies the Boolean attributes of the file.',
- 'flags=%s,' % hex(self.fileFlags),
- '# The operating system for which this file was designed.',
- '# 0x4 - NT and there is no need to change it.',
- 'OS=%s,' % hex(self.fileOS),
- '# The general type of file.',
- '# 0x1 - the file is an application.',
- 'fileType=%s,' % hex(self.fileType),
- '# The function of the file.',
- '# 0x0 - the function is not defined for this fileType',
- 'subtype=%s,' % hex(self.fileSubtype),
- '# Creation date and time stamp.',
- 'date=%s' % (fd,),
- ')',
- ]
- return f'\n{indent} '.join(tmp)
-
- def __repr__(self):
- fv = (
- self.fileVersionMS >> 16, self.fileVersionMS & 0xffff,
- self.fileVersionLS >> 16, self.fileVersionLS & 0xffff,
- ) # yapf: disable
- pv = (
- self.productVersionMS >> 16, self.productVersionMS & 0xffff,
- self.productVersionLS >> 16, self.productVersionLS & 0xffff,
- ) # yapf: disable
- fd = (self.fileDateMS, self.fileDateLS)
- return (
- 'versioninfo.FixedFileInfo(filevers=%r, prodvers=%r, '
- 'mask=0x%x, flags=0x%x, OS=0x%x, '
- 'fileType=%r, subtype=0x%x, date=%r)' %
- (fv, pv, self.fileFlagsMask, self.fileFlags, self.fileOS, self.fileType, self.fileSubtype, fd)
- )
-
-
-class StringFileInfo:
- """
- WORD wLength; // length of the version resource
- WORD wValueLength; // length of the Value member in the current
- // VS_VERSION_INFO structure
- WORD wType; // 1 means text, 0 means binary
- WCHAR szKey[]; // Contains the Unicode string 'StringFileInfo'.
- WORD Padding[];
- StringTable Children[]; // list of zero or more String structures
- """
- def __init__(self, kids=None):
- self.name = 'StringFileInfo'
- self.kids = kids or []
-
- def fromRaw(self, sublen, vallen, name, data, i, limit):
- self.name = name
- while i < limit:
- st = StringTable()
- j = st.fromRaw(data, i, limit)
- self.kids.append(st)
- i = j
- return i
-
- def toRaw(self):
- raw_name = getRaw(self.name)
- vallen = 0
- typ = 1
- sublen = 6 + len(raw_name) + 2
- pad = b''
- if sublen % 4:
- pad = b'\000\000'
- tmp = b''.join([kid.toRaw() for kid in self.kids])
- sublen = sublen + len(pad) + len(tmp)
- return struct.pack('HHH', sublen, vallen, typ) + raw_name + b'\000\000' + pad + tmp
-
- def __eq__(self, other):
- return self.toRaw() == other
-
- def __str__(self, indent=''):
- new_indent = indent + ' '
- tmp = ', \n'.join(kid.__str__(new_indent) for kid in self.kids)
- return f'{indent}StringFileInfo(\n{new_indent}[\n{tmp}\n{new_indent}])'
-
- def __repr__(self):
- return 'versioninfo.StringFileInfo(%r)' % self.kids
-
-
-class StringTable:
- """
- WORD wLength;
- WORD wValueLength;
- WORD wType;
- WCHAR szKey[];
- String Children[]; // list of zero or more String structures.
- """
- def __init__(self, name=None, kids=None):
- self.name = name or ''
- self.kids = kids or []
-
- def fromRaw(self, data, i, limit):
- i, (cpsublen, cpwValueLength, cpwType, self.name) = parseCodePage(data, i, limit) # should be code page junk
- i = nextDWord(i)
- while i < limit:
- ss = StringStruct()
- j = ss.fromRaw(data, i, limit)
- i = j
- self.kids.append(ss)
- i = nextDWord(i)
- return i
-
- def toRaw(self):
- raw_name = getRaw(self.name)
- vallen = 0
- typ = 1
- sublen = 6 + len(raw_name) + 2
- tmp = []
- for kid in self.kids:
- raw = kid.toRaw()
- if len(raw) % 4:
- raw = raw + b'\000\000'
- tmp.append(raw)
- tmp = b''.join(tmp)
- sublen += len(tmp)
- return struct.pack('HHH', sublen, vallen, typ) + raw_name + b'\000\000' + tmp
-
- def __eq__(self, other):
- return self.toRaw() == other
-
- def __str__(self, indent=''):
- new_indent = indent + ' '
- tmp = (',\n' + new_indent).join(str(kid) for kid in self.kids)
- return f"{indent}StringTable(\n{new_indent}'{self.name}',\n{new_indent}[{tmp}])"
-
- def __repr__(self):
- return 'versioninfo.StringTable(%r, %r)' % (self.name, self.kids)
-
-
-class StringStruct:
- """
- WORD wLength;
- WORD wValueLength;
- WORD wType;
- WCHAR szKey[];
- WORD Padding[];
- String Value[];
- """
- def __init__(self, name=None, val=None):
- self.name = name or ''
- self.val = val or ''
-
- def fromRaw(self, data, i, limit):
- i, (sublen, vallen, typ, self.name) = parseCommon(data, i)
- limit = i + sublen
- i = nextDWord(i)
- i, self.val = parseUString(data, i, limit)
- return i
-
- def toRaw(self):
- raw_name = getRaw(self.name)
- raw_val = getRaw(self.val)
- # TODO: document the size of vallen and sublen.
- vallen = len(self.val) + 1 # Number of (wide-)characters, not bytes!
- typ = 1
- sublen = 6 + len(raw_name) + 2
- pad = b''
- if sublen % 4:
- pad = b'\000\000'
- sublen = sublen + len(pad) + (vallen * 2)
- return struct.pack('HHH', sublen, vallen, typ) + raw_name + b'\000\000' + pad + raw_val + b'\000\000'
-
- def __eq__(self, other):
- return self.toRaw() == other
-
- def __str__(self, indent=''):
- return "StringStruct(%r, %r)" % (self.name, self.val)
-
- def __repr__(self):
- return 'versioninfo.StringStruct(%r, %r)' % (self.name, self.val)
-
-
-def parseCodePage(data, i, limit):
- i, (sublen, wValueLength, wType, nm) = parseCommon(data, i)
- return i, (sublen, wValueLength, wType, nm)
-
-
-class VarFileInfo:
- """
- WORD wLength; // length of the version resource
- WORD wValueLength; // length of the Value member in the current
- // VS_VERSION_INFO structure
- WORD wType; // 1 means text, 0 means binary
- WCHAR szKey[]; // Contains the Unicode string 'VarFileInfo'.
- WORD Padding[];
- Var Children[]; // list of zero or more Var structures
- """
- def __init__(self, kids=None):
- self.kids = kids or []
-
- def fromRaw(self, sublen, vallen, name, data, i, limit):
- self.sublen = sublen
- self.vallen = vallen
- self.name = name
- i = nextDWord(i)
- while i < limit:
- vs = VarStruct()
- j = vs.fromRaw(data, i, limit)
- self.kids.append(vs)
- i = j
- return i
-
- def toRaw(self):
- self.vallen = 0
- self.wType = 1
- self.name = 'VarFileInfo'
- raw_name = getRaw(self.name)
- sublen = 6 + len(raw_name) + 2
- pad = b''
- if sublen % 4:
- pad = b'\000\000'
- tmp = b''.join([kid.toRaw() for kid in self.kids])
- self.sublen = sublen + len(pad) + len(tmp)
- return struct.pack('HHH', self.sublen, self.vallen, self.wType) + raw_name + b'\000\000' + pad + tmp
-
- def __eq__(self, other):
- return self.toRaw() == other
-
- def __str__(self, indent=''):
- return indent + "VarFileInfo([%s])" % ', '.join(str(kid) for kid in self.kids)
-
- def __repr__(self):
- return 'versioninfo.VarFileInfo(%r)' % self.kids
-
-
-class VarStruct:
- """
- WORD wLength; // length of the version resource
- WORD wValueLength; // length of the Value member in the current
- // VS_VERSION_INFO structure
- WORD wType; // 1 means text, 0 means binary
- WCHAR szKey[]; // Contains the Unicode string 'Translation'
- // or a user-defined key string value
- WORD Padding[]; //
- WORD Value[]; // list of one or more values that are language
- // and code-page identifiers
- """
- def __init__(self, name=None, kids=None):
- self.name = name or ''
- self.kids = kids or []
-
- def fromRaw(self, data, i, limit):
- i, (self.sublen, self.wValueLength, self.wType, self.name) = parseCommon(data, i)
- i = nextDWord(i)
- for j in range(0, self.wValueLength, 2):
- kid = struct.unpack('H', data[i:i + 2])[0]
- self.kids.append(kid)
- i += 2
- return i
-
- def toRaw(self):
- self.wValueLength = len(self.kids) * 2
- self.wType = 0
- raw_name = getRaw(self.name)
- sublen = 6 + len(raw_name) + 2
- pad = b''
- if sublen % 4:
- pad = b'\000\000'
- self.sublen = sublen + len(pad) + self.wValueLength
- tmp = b''.join([struct.pack('H', kid) for kid in self.kids])
- return struct.pack('HHH', self.sublen, self.wValueLength, self.wType) + raw_name + b'\000\000' + pad + tmp
-
- def __eq__(self, other):
- return self.toRaw() == other
-
- def __str__(self, indent=''):
- return "VarStruct('%s', %r)" % (self.name, self.kids)
-
- def __repr__(self):
- return 'versioninfo.VarStruct(%r, %r)' % (self.name, self.kids)
-
-
-def load_version_info_from_text_file(filename):
- """
- Load the `VSVersionInfo` structure from its string-based (`VSVersionInfo.__str__`) serialization by reading the
- text from the file and running it through `eval()`.
- """
-
- # Read and parse the version file. It may have a byte order marker or encoding cookie - respect it if it does.
- import PyInstaller.utils.misc as miscutils
- with open(filename, 'rb') as fp:
- text = miscutils.decode(fp.read())
-
- # Deserialize via eval()
- try:
- info = eval(text)
- except Exception as e:
- raise ValueError("Failed to deserialize VSVersionInfo from text-based representation!") from e
-
- # Sanity check
- assert isinstance(info, VSVersionInfo), \
- f"Loaded incompatible structure type! Expected VSVersionInfo, got: {type(info)!r}"
-
- return info
-
-
-def write_version_info_to_executable(exe_filename, info):
- assert isinstance(info, VSVersionInfo)
-
- # Remember overlay
- pe = pefile.PE(exe_filename, fast_load=True)
- overlay_before = pe.get_overlay()
- pe.close()
-
- hdst = win32api.BeginUpdateResource(exe_filename, 0)
- win32api.UpdateResource(hdst, pefile.RESOURCE_TYPE['RT_VERSION'], 1, info.toRaw())
- win32api.EndUpdateResource(hdst, 0)
-
- if overlay_before:
- # Check if the overlay is still present
- pe = pefile.PE(exe_filename, fast_load=True)
- overlay_after = pe.get_overlay()
- pe.close()
-
- # If the update removed the overlay data, re-append it
- if not overlay_after:
- with open(exe_filename, 'ab') as exef:
- exef.write(overlay_before)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winmanifest.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winmanifest.py
deleted file mode 100755
index 1d338df..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winmanifest.py
+++ /dev/null
@@ -1,244 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-import xml.dom
-import xml.dom.minidom
-
-#- Relevant constants from Windows headers
-# Manifest resource code
-RT_MANIFEST = 24
-
-# Resource IDs (names) for manifest.
-# See: https://www.gamedev.net/blogs/entry/2154553-manifest-embedding-and-activation
-CREATEPROCESS_MANIFEST_RESOURCE_ID = 1
-ISOLATIONAWARE_MANIFEST_RESOURCE_ID = 2
-
-LANG_NEUTRAL = 0
-
-#- Default application manifest template, based on the one found in python executable.
-
-_DEFAULT_MANIFEST_XML = \
-b"""
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-""" # noqa: E122,E501
-
-#- DOM navigation helpers
-
-
-def _find_elements_by_tag(root, tag):
- """
- Find all elements with given tag under the given root element.
- """
- return [node for node in root.childNodes if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == tag]
-
-
-def _find_element_by_tag(root, tag):
- """
- Attempt to find a single element with given tag under the given root element, and return None if no such element
- is found. Raises an error if multiple elements are found.
- """
- elements = _find_elements_by_tag(root, tag)
- if len(elements) > 1:
- raise ValueError(f"Expected a single {tag!r} element, found {len(elements)} element(s)!")
- if not elements:
- return None
- return elements[0]
-
-
-#- Application manifest modification helpers
-
-
-def _set_execution_level(manifest_dom, root_element, uac_admin=False, uac_uiaccess=False):
- """
- Find -> -> element, and set its `level` and `uiAccess`
- attributes based on supplied arguments. Create the XML elements if necessary, as they are optional.
- """
-
- #
- trust_info_element = _find_element_by_tag(root_element, "trustInfo")
- if not trust_info_element:
- trust_info_element = manifest_dom.createElement("trustInfo")
- trust_info_element.setAttribute("xmlns", "urn:schemas-microsoft-com:asm.v3")
- root_element.appendChild(trust_info_element)
-
- #
- security_element = _find_element_by_tag(trust_info_element, "security")
- if not security_element:
- security_element = manifest_dom.createElement("security")
- trust_info_element.appendChild(security_element)
-
- #
- requested_privileges_element = _find_element_by_tag(security_element, "requestedPrivileges")
- if not requested_privileges_element:
- requested_privileges_element = manifest_dom.createElement("requestedPrivileges")
- security_element.appendChild(requested_privileges_element)
-
- #
- requested_execution_level_element = _find_element_by_tag(requested_privileges_element, "requestedExecutionLevel")
- if not requested_execution_level_element:
- requested_execution_level_element = manifest_dom.createElement("requestedExecutionLevel")
- requested_privileges_element.appendChild(requested_execution_level_element)
-
- requested_execution_level_element.setAttribute("level", "requireAdministrator" if uac_admin else "asInvoker")
- requested_execution_level_element.setAttribute("uiAccess", "true" if uac_uiaccess else "false")
-
-
-def _ensure_common_controls_dependency(manifest_dom, root_element):
- """
- Scan elements for the one whose < -> corresponds to the
- `Microsoft.Windows.Common-Controls`. If found, overwrite its properties. If not, create new
- element with corresponding sub-elements and attributes.
- """
-
- #
- dependency_elements = _find_elements_by_tag(root_element, "dependency")
- for dependency_element in dependency_elements:
- #
- dependent_assembly_element = _find_element_by_tag(dependency_element, "dependentAssembly")
- #
- assembly_identity_element = _find_element_by_tag(dependent_assembly_element, "assemblyIdentity")
- # Check the name attribute
- if assembly_identity_element.attributes["name"].value == "Microsoft.Windows.Common-Controls":
- common_controls_element = assembly_identity_element
- break
- else:
- # Create
- dependency_element = manifest_dom.createElement("dependency")
- root_element.appendChild(dependency_element)
- # Create
- dependent_assembly_element = manifest_dom.createElement("dependentAssembly")
- dependency_element.appendChild(dependent_assembly_element)
- # Create
- common_controls_element = manifest_dom.createElement("assemblyIdentity")
- dependent_assembly_element.appendChild(common_controls_element)
-
- common_controls_element.setAttribute("type", "win32")
- common_controls_element.setAttribute("name", "Microsoft.Windows.Common-Controls")
- common_controls_element.setAttribute("version", "6.0.0.0")
- common_controls_element.setAttribute("processorArchitecture", "*")
- common_controls_element.setAttribute("publicKeyToken", "6595b64144ccf1df")
- common_controls_element.setAttribute("language", "*")
-
-
-def create_application_manifest(manifest_xml=None, uac_admin=False, uac_uiaccess=False):
- """
- Create application manifest, from built-in or custom manifest XML template. If provided, `manifest_xml` must be
- a string or byte string containing XML source. The returned manifest is a byte string, encoded in UTF-8.
-
- This function sets the attributes of `requestedExecutionLevel` based on provided `uac_admin` and `auc_uiacces`
- arguments (creating the parent elements in the XML, if necessary). It also scans `dependency` elements for the
- entry corresponding to `Microsoft.Windows.Common-Controls` and creates or modifies it as necessary.
- """
-
- if manifest_xml is None:
- manifest_xml = _DEFAULT_MANIFEST_XML
-
- with xml.dom.minidom.parseString(manifest_xml) as manifest_dom:
- root_element = manifest_dom.documentElement
-
- # Validate root element - must be
- assert root_element.tagName == "assembly"
- assert root_element.namespaceURI == "urn:schemas-microsoft-com:asm.v1"
- assert root_element.attributes["manifestVersion"].value == "1.0"
-
- # Modify the manifest
- _set_execution_level(manifest_dom, root_element, uac_admin, uac_uiaccess)
- _ensure_common_controls_dependency(manifest_dom, root_element)
-
- # Create output XML
- output = manifest_dom.toprettyxml(indent=" ", encoding="UTF-8")
-
- # Strip extra newlines
- output = [line for line in output.splitlines() if line.strip()]
-
- # Replace: `` with ``.
- # Support for `standalone` was added to `toprettyxml` in python 3.9, so do a manual work around.
- output[0] = b""""""
-
- output = b"\n".join(output)
-
- return output
-
-
-def write_manifest_to_executable(filename, manifest_xml):
- """
- Write the given manifest XML to the given executable's RT_MANIFEST resource.
- """
- from PyInstaller.utils.win32 import winresource
-
- # CREATEPROCESS_MANIFEST_RESOURCE_ID is used for manifest resource in executables.
- # ISOLATIONAWARE_MANIFEST_RESOURCE_ID is used for manifest resources in DLLs.
- names = [CREATEPROCESS_MANIFEST_RESOURCE_ID]
-
- # Ensure LANG_NEUTRAL is updated, and also update any other present languages.
- languages = [LANG_NEUTRAL, "*"]
-
- winresource.add_or_update_resource(filename, manifest_xml, RT_MANIFEST, names, languages)
-
-
-def read_manifest_from_executable(filename):
- """
- Read manifest from the given executable."
- """
- from PyInstaller.utils.win32 import winresource
-
- resources = winresource.get_resources(filename, [RT_MANIFEST])
-
- # `resources` is a three-level dictionary:
- # - level 1: resource type (RT_MANIFEST)
- # - level 2: resource name (CREATEPROCESS_MANIFEST_RESOURCE_ID)
- # - level 3: resource language (LANG_NEUTRAL)
-
- # Level 1
- if RT_MANIFEST not in resources:
- raise ValueError(f"No RT_MANIFEST resources found in {filename!r}.")
- resources = resources[RT_MANIFEST]
-
- # Level 2
- if CREATEPROCESS_MANIFEST_RESOURCE_ID not in resources:
- raise ValueError(f"No RT_MANIFEST resource named CREATEPROCESS_MANIFEST_RESOURCE_ID found in {filename!r}.")
- resources = resources[CREATEPROCESS_MANIFEST_RESOURCE_ID]
-
- # Level 3
- # We prefer LANG_NEUTRAL, but allow fall back to the first available entry.
- if LANG_NEUTRAL in resources:
- resources = resources[LANG_NEUTRAL]
- else:
- resources = next(iter(resources.items()))
-
- manifest_xml = resources
- return manifest_xml
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winresource.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winresource.py
deleted file mode 100755
index f21d66c..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winresource.py
+++ /dev/null
@@ -1,189 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Read and write resources from/to Win32 PE files.
-"""
-
-import PyInstaller.log as logging
-from PyInstaller.compat import pywintypes, win32api
-
-logger = logging.getLogger(__name__)
-
-LOAD_LIBRARY_AS_DATAFILE = 2
-ERROR_BAD_EXE_FORMAT = 193
-ERROR_RESOURCE_DATA_NOT_FOUND = 1812
-ERROR_RESOURCE_TYPE_NOT_FOUND = 1813
-ERROR_RESOURCE_NAME_NOT_FOUND = 1814
-ERROR_RESOURCE_LANG_NOT_FOUND = 1815
-
-
-def get_resources(filename, types=None, names=None, languages=None):
- """
- Retrieve resources from the given PE file.
-
- filename: path to the PE file.
- types: a list of resource types (integers or strings) to search for (None = all).
- names: a list of resource names (integers or strings) to search for (None = all).
- languages: a list of resource languages (integers) to search for (None = all).
-
- Returns a dictionary of the form {type: {name: {language: data}}}, which might also be empty if no matching
- resources were found.
- """
- types = set(types) if types is not None else {"*"}
- names = set(names) if names is not None else {"*"}
- languages = set(languages) if languages is not None else {"*"}
-
- output = {}
-
- # Errors codes for which we swallow exceptions
- _IGNORE_EXCEPTIONS = {
- ERROR_RESOURCE_DATA_NOT_FOUND,
- ERROR_RESOURCE_TYPE_NOT_FOUND,
- ERROR_RESOURCE_NAME_NOT_FOUND,
- ERROR_RESOURCE_LANG_NOT_FOUND,
- }
-
- # Open file
- module_handle = win32api.LoadLibraryEx(filename, 0, LOAD_LIBRARY_AS_DATAFILE)
-
- # Enumerate available resource types
- try:
- available_types = win32api.EnumResourceTypes(module_handle)
- except pywintypes.error as e:
- if e.args[0] not in _IGNORE_EXCEPTIONS:
- raise
- available_types = []
-
- if "*" not in types:
- available_types = [res_type for res_type in available_types if res_type in types]
-
- for res_type in available_types:
- # Enumerate available names for the resource type.
- try:
- available_names = win32api.EnumResourceNames(module_handle, res_type)
- except pywintypes.error as e:
- if e.args[0] not in _IGNORE_EXCEPTIONS:
- raise
- continue
-
- if "*" not in names:
- available_names = [res_name for res_name in available_names if res_name in names]
-
- for res_name in available_names:
- # Enumerate available languages for the resource type and name combination.
- try:
- available_languages = win32api.EnumResourceLanguages(module_handle, res_type, res_name)
- except pywintypes.error as e:
- if e.args[0] not in _IGNORE_EXCEPTIONS:
- raise
- continue
-
- if "*" not in languages:
- available_languages = [res_lang for res_lang in available_languages if res_lang in languages]
-
- for res_lang in available_languages:
- # Read data
- try:
- data = win32api.LoadResource(module_handle, res_type, res_name, res_lang)
- except pywintypes.error as e:
- if e.args[0] not in _IGNORE_EXCEPTIONS:
- raise
- continue
-
- if res_type not in output:
- output[res_type] = {}
- if res_name not in output[res_type]:
- output[res_type][res_name] = {}
- output[res_type][res_name][res_lang] = data
-
- # Close file
- win32api.FreeLibrary(module_handle)
-
- return output
-
-
-def add_or_update_resource(filename, data, res_type, names=None, languages=None):
- """
- Update or add a single resource in the PE file with the given binary data.
-
- filename: path to the PE file.
- data: binary data to write to the resource.
- res_type: resource type to add/update (integer or string).
- names: a list of resource names (integers or strings) to update (None = all).
- languages: a list of resource languages (integers) to update (None = all).
- """
- if res_type == "*":
- raise ValueError("res_type cannot be a wildcard (*)!")
-
- names = set(names) if names is not None else {"*"}
- languages = set(languages) if languages is not None else {"*"}
-
- # Retrieve existing resources, filtered by the given resource type and given resource names and languages.
- resources = get_resources(filename, [res_type], names, languages)
-
- # Add res_type, name, language combinations that are not already present
- resources = resources.get(res_type, {}) # This is now a {name: {language: data}} dictionary
-
- for res_name in names:
- if res_name == "*":
- continue
- if res_name not in resources:
- resources[res_name] = {}
-
- for res_lang in languages:
- if res_lang == "*":
- continue
- if res_lang not in resources[res_name]:
- resources[res_name][res_lang] = None # Just an indicator
-
- # Add resource to the target file, overwriting the existing resources with same type, name, language combinations.
- module_handle = win32api.BeginUpdateResource(filename, 0)
- for res_name in resources.keys():
- for res_lang in resources[res_name].keys():
- win32api.UpdateResource(module_handle, res_type, res_name, data, res_lang)
- win32api.EndUpdateResource(module_handle, 0)
-
-
-def copy_resources_from_pe_file(filename, src_filename, types=None, names=None, languages=None):
- """
- Update or add resources in the given PE file by copying them over from the specified source PE file.
-
- filename: path to the PE file.
- src_filename: path to the source PE file.
- types: a list of resource types (integers or strings) to add/update via copy for (None = all).
- names: a list of resource names (integers or strings) to add/update via copy (None = all).
- languages: a list of resource languages (integers) to add/update via copy (None = all).
- """
- types = set(types) if types is not None else {"*"}
- names = set(names) if names is not None else {"*"}
- languages = set(languages) if languages is not None else {"*"}
-
- # Retrieve existing resources, filtered by the given resource type and given resource names and languages.
- resources = get_resources(src_filename, types, names, languages)
-
- for res_type, resources_for_type in resources.items():
- if "*" not in types and res_type not in types:
- continue
- for res_name, resources_for_type_name in resources_for_type.items():
- if "*" not in names and res_name not in names:
- continue
- for res_lang, data in resources_for_type_name.items():
- if "*" not in languages and res_lang not in languages:
- continue
- add_or_update_resource(filename, data, res_type, [res_name], [res_lang])
-
-
-def remove_all_resources(filename):
- """
- Remove all resources from the given PE file:
- """
- module_handle = win32api.BeginUpdateResource(filename, True) # bDeleteExistingResources=True
- win32api.EndUpdateResource(module_handle, False)
diff --git a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winutils.py b/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winutils.py
deleted file mode 100755
index 92cba77..0000000
--- a/venv/lib/python3.12/site-packages/PyInstaller/utils/win32/winutils.py
+++ /dev/null
@@ -1,257 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2023, PyInstaller Development Team.
-#
-# Distributed under the terms of the GNU General Public License (version 2
-# or later) with exception for distributing the bootloader.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
-#-----------------------------------------------------------------------------
-"""
-Utilities for Windows platform.
-"""
-
-from PyInstaller import compat
-
-
-def get_windows_dir():
- """
- Return the Windows directory, e.g., C:\\Windows.
- """
- windir = compat.win32api.GetWindowsDirectory()
- if not windir:
- raise SystemExit("ERROR: Cannot determine Windows directory!")
- return windir
-
-
-def get_system_path():
- """
- Return the required Windows system paths.
- """
- sys_dir = compat.win32api.GetSystemDirectory()
- # Ensure C:\Windows\system32 and C:\Windows directories are always present in PATH variable.
- # C:\Windows\system32 is valid even for 64-bit Windows. Access do DLLs are transparently redirected to
- # C:\Windows\syswow64 for 64bit applactions.
- # See http://msdn.microsoft.com/en-us/library/aa384187(v=vs.85).aspx
- return [sys_dir, get_windows_dir()]
-
-
-def get_pe_file_machine_type(filename):
- """
- Return the machine type code from the header of the given PE file.
- """
- import pefile
-
- with pefile.PE(filename, fast_load=True) as pe:
- return pe.FILE_HEADER.Machine
-
-
-def set_exe_build_timestamp(exe_path, timestamp):
- """
- Modifies the executable's build timestamp by updating values in the corresponding PE headers.
- """
- import pefile
-
- with pefile.PE(exe_path, fast_load=True) as pe:
- # Manually perform a full load. We need it to load all headers, but specifying it in the constructor triggers
- # byte statistics gathering that takes forever with large files. So we try to go around that...
- pe.full_load()
-
- # Set build timestamp.
- # See: https://0xc0decafe.com/malware-analyst-guide-to-pe-timestamps
- timestamp = int(timestamp)
- # Set timestamp field in FILE_HEADER
- pe.FILE_HEADER.TimeDateStamp = timestamp
- # MSVC-compiled executables contain (at least?) one DIRECTORY_ENTRY_DEBUG entry that also contains timestamp
- # with same value as set in FILE_HEADER. So modify that as well, as long as it is set.
- debug_entries = getattr(pe, 'DIRECTORY_ENTRY_DEBUG', [])
- for debug_entry in debug_entries:
- if debug_entry.struct.TimeDateStamp:
- debug_entry.struct.TimeDateStamp = timestamp
-
- # Generate updated EXE data
- data = pe.write()
-
- # Rewrite the exe
- with open(exe_path, 'wb') as fp:
- fp.write(data)
-
-
-def update_exe_pe_checksum(exe_path):
- """
- Compute the executable's PE checksum, and write it to PE headers.
-
- This optional checksum is supposed to protect the executable against corruption but some anti-viral software have
- taken to flagging anything without it set correctly as malware. See issue #5579.
- """
- import pefile
-
- # Compute checksum using our equivalent of the MapFileAndCheckSumW - for large files, it is significantly faster
- # than pure-pyton pefile.PE.generate_checksum(). However, it requires the file to be on disk (i.e., cannot operate
- # on a memory buffer).
- try:
- checksum = compute_exe_pe_checksum(exe_path)
- except Exception as e:
- raise RuntimeError("Failed to compute PE checksum!") from e
-
- # Update the checksum
- with pefile.PE(exe_path, fast_load=True) as pe:
- pe.OPTIONAL_HEADER.CheckSum = checksum
-
- # Generate updated EXE data
- data = pe.write()
-
- # Rewrite the exe
- with open(exe_path, 'wb') as fp:
- fp.write(data)
-
-
-def compute_exe_pe_checksum(exe_path):
- """
- This is a replacement for the MapFileAndCheckSumW function. As noted in MSDN documentation, the Microsoft's
- implementation of MapFileAndCheckSumW internally calls its ASCII variant (MapFileAndCheckSumA), and therefore
- cannot handle paths that contain characters that are not representable in the current code page.
- See: https://docs.microsoft.com/en-us/windows/win32/api/imagehlp/nf-imagehlp-mapfileandchecksumw
-
- This function is based on Wine's implementation of MapFileAndCheckSumW, and due to being based entirely on
- the pure widechar-API functions, it is not limited by the current code page.
- """
- # ctypes bindings for relevant win32 API functions
- import ctypes
- from ctypes import windll, wintypes
-
- INVALID_HANDLE = wintypes.HANDLE(-1).value
-
- GetLastError = ctypes.windll.kernel32.GetLastError
- GetLastError.argtypes = ()
- GetLastError.restype = wintypes.DWORD
-
- CloseHandle = windll.kernel32.CloseHandle
- CloseHandle.argtypes = (
- wintypes.HANDLE, # hObject
- )
- CloseHandle.restype = wintypes.BOOL
-
- CreateFileW = windll.kernel32.CreateFileW
- CreateFileW.argtypes = (
- wintypes.LPCWSTR, # lpFileName
- wintypes.DWORD, # dwDesiredAccess
- wintypes.DWORD, # dwShareMode
- wintypes.LPVOID, # lpSecurityAttributes
- wintypes.DWORD, # dwCreationDisposition
- wintypes.DWORD, # dwFlagsAndAttributes
- wintypes.HANDLE, # hTemplateFile
- )
- CreateFileW.restype = wintypes.HANDLE
-
- CreateFileMappingW = windll.kernel32.CreateFileMappingW
- CreateFileMappingW.argtypes = (
- wintypes.HANDLE, # hFile
- wintypes.LPVOID, # lpSecurityAttributes
- wintypes.DWORD, # flProtect
- wintypes.DWORD, # dwMaximumSizeHigh
- wintypes.DWORD, # dwMaximumSizeLow
- wintypes.LPCWSTR, # lpName
- )
- CreateFileMappingW.restype = wintypes.HANDLE
-
- MapViewOfFile = windll.kernel32.MapViewOfFile
- MapViewOfFile.argtypes = (
- wintypes.HANDLE, # hFileMappingObject
- wintypes.DWORD, # dwDesiredAccess
- wintypes.DWORD, # dwFileOffsetHigh
- wintypes.DWORD, # dwFileOffsetLow
- wintypes.DWORD, # dwNumberOfBytesToMap
- )
- MapViewOfFile.restype = wintypes.LPVOID
-
- UnmapViewOfFile = windll.kernel32.UnmapViewOfFile
- UnmapViewOfFile.argtypes = (
- wintypes.LPCVOID, # lpBaseAddress
- )
- UnmapViewOfFile.restype = wintypes.BOOL
-
- GetFileSizeEx = windll.kernel32.GetFileSizeEx
- GetFileSizeEx.argtypes = (
- wintypes.HANDLE, # hFile
- wintypes.PLARGE_INTEGER, # lpFileSize
- )
-
- CheckSumMappedFile = windll.imagehlp.CheckSumMappedFile
- CheckSumMappedFile.argtypes = (
- wintypes.LPVOID, # BaseAddress
- wintypes.DWORD, # FileLength
- wintypes.PDWORD, # HeaderSum
- wintypes.PDWORD, # CheckSum
- )
- CheckSumMappedFile.restype = wintypes.LPVOID
-
- # Open file
- hFile = CreateFileW(
- ctypes.c_wchar_p(exe_path),
- 0x80000000, # dwDesiredAccess = GENERIC_READ
- 0x00000001 | 0x00000002, # dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE,
- None, # lpSecurityAttributes = NULL
- 3, # dwCreationDisposition = OPEN_EXISTING
- 0x80, # dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL
- None # hTemplateFile = NULL
- )
- if hFile == INVALID_HANDLE:
- err = GetLastError()
- raise RuntimeError(f"Failed to open file {exe_path}! Error code: {err}")
-
- # Query file size
- fileLength = wintypes.LARGE_INTEGER(0)
- if GetFileSizeEx(hFile, fileLength) == 0:
- err = GetLastError()
- CloseHandle(hFile)
- raise RuntimeError(f"Failed to query file size file! Error code: {err}")
- fileLength = fileLength.value
- if fileLength > (2**32 - 1):
- raise RuntimeError("Executable size exceeds maximum allowed executable size on Windows (4 GiB)!")
-
- # Map the file
- hMapping = CreateFileMappingW(
- hFile,
- None, # lpFileMappingAttributes = NULL
- 0x02, # flProtect = PAGE_READONLY
- 0, # dwMaximumSizeHigh = 0
- 0, # dwMaximumSizeLow = 0
- None # lpName = NULL
- )
- if not hMapping:
- err = GetLastError()
- CloseHandle(hFile)
- raise RuntimeError(f"Failed to map file! Error code: {err}")
-
- # Create map view
- baseAddress = MapViewOfFile(
- hMapping,
- 4, # dwDesiredAccess = FILE_MAP_READ
- 0, # dwFileOffsetHigh = 0
- 0, # dwFileOffsetLow = 0
- 0 # dwNumberOfBytesToMap = 0
- )
- if baseAddress == 0:
- err = GetLastError()
- CloseHandle(hMapping)
- CloseHandle(hFile)
- raise RuntimeError(f"Failed to create map view! Error code: {err}")
-
- # Finally, compute the checksum
- headerSum = wintypes.DWORD(0)
- checkSum = wintypes.DWORD(0)
- ret = CheckSumMappedFile(baseAddress, fileLength, ctypes.byref(headerSum), ctypes.byref(checkSum))
- if ret is None:
- err = GetLastError()
-
- # Cleanup
- UnmapViewOfFile(baseAddress)
- CloseHandle(hMapping)
- CloseHandle(hFile)
-
- if ret is None:
- raise RuntimeError(f"CheckSumMappedFile failed! Error code: {err}")
-
- return checkSum.value
diff --git a/venv/lib/python3.12/site-packages/__pycache__/_black_version.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/_black_version.cpython-312.pyc
deleted file mode 100644
index 609350f..0000000
Binary files a/venv/lib/python3.12/site-packages/__pycache__/_black_version.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/__pycache__/autopep8.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/autopep8.cpython-312.pyc
deleted file mode 100644
index c6ab400..0000000
Binary files a/venv/lib/python3.12/site-packages/__pycache__/autopep8.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/__pycache__/mccabe.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/mccabe.cpython-312.pyc
deleted file mode 100644
index 7a52148..0000000
Binary files a/venv/lib/python3.12/site-packages/__pycache__/mccabe.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/__pycache__/mypy_extensions.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/mypy_extensions.cpython-312.pyc
deleted file mode 100644
index f0b3f57..0000000
Binary files a/venv/lib/python3.12/site-packages/__pycache__/mypy_extensions.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/__pycache__/pycodestyle.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/pycodestyle.cpython-312.pyc
deleted file mode 100644
index f020714..0000000
Binary files a/venv/lib/python3.12/site-packages/__pycache__/pycodestyle.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc b/venv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc
deleted file mode 100644
index 045b030..0000000
Binary files a/venv/lib/python3.12/site-packages/__pycache__/typing_extensions.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_black_version.py b/venv/lib/python3.12/site-packages/_black_version.py
deleted file mode 100644
index b20f386..0000000
--- a/venv/lib/python3.12/site-packages/_black_version.py
+++ /dev/null
@@ -1 +0,0 @@
-version = "26.3.1"
diff --git a/venv/lib/python3.12/site-packages/_black_version.pyi b/venv/lib/python3.12/site-packages/_black_version.pyi
deleted file mode 100644
index c2ee2ca..0000000
--- a/venv/lib/python3.12/site-packages/_black_version.pyi
+++ /dev/null
@@ -1 +0,0 @@
-version: str
diff --git a/venv/lib/python3.12/site-packages/_distutils_hack/__init__.py b/venv/lib/python3.12/site-packages/_distutils_hack/__init__.py
deleted file mode 100644
index 94f71b9..0000000
--- a/venv/lib/python3.12/site-packages/_distutils_hack/__init__.py
+++ /dev/null
@@ -1,239 +0,0 @@
-# don't import any costly modules
-import os
-import sys
-
-report_url = (
- "https://github.com/pypa/setuptools/issues/new?template=distutils-deprecation.yml"
-)
-
-
-def warn_distutils_present():
- if 'distutils' not in sys.modules:
- return
- import warnings
-
- warnings.warn(
- "Distutils was imported before Setuptools, but importing Setuptools "
- "also replaces the `distutils` module in `sys.modules`. This may lead "
- "to undesirable behaviors or errors. To avoid these issues, avoid "
- "using distutils directly, ensure that setuptools is installed in the "
- "traditional way (e.g. not an editable install), and/or make sure "
- "that setuptools is always imported before distutils."
- )
-
-
-def clear_distutils():
- if 'distutils' not in sys.modules:
- return
- import warnings
-
- warnings.warn(
- "Setuptools is replacing distutils. Support for replacing "
- "an already imported distutils is deprecated. In the future, "
- "this condition will fail. "
- f"Register concerns at {report_url}"
- )
- mods = [
- name
- for name in sys.modules
- if name == "distutils" or name.startswith("distutils.")
- ]
- for name in mods:
- del sys.modules[name]
-
-
-def enabled():
- """
- Allow selection of distutils by environment variable.
- """
- which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local')
- if which == 'stdlib':
- import warnings
-
- warnings.warn(
- "Reliance on distutils from stdlib is deprecated. Users "
- "must rely on setuptools to provide the distutils module. "
- "Avoid importing distutils or import setuptools first, "
- "and avoid setting SETUPTOOLS_USE_DISTUTILS=stdlib. "
- f"Register concerns at {report_url}"
- )
- return which == 'local'
-
-
-def ensure_local_distutils():
- import importlib
-
- clear_distutils()
-
- # With the DistutilsMetaFinder in place,
- # perform an import to cause distutils to be
- # loaded from setuptools._distutils. Ref #2906.
- with shim():
- importlib.import_module('distutils')
-
- # check that submodules load as expected
- core = importlib.import_module('distutils.core')
- assert '_distutils' in core.__file__, core.__file__
- assert 'setuptools._distutils.log' not in sys.modules
-
-
-def do_override():
- """
- Ensure that the local copy of distutils is preferred over stdlib.
-
- See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401
- for more motivation.
- """
- if enabled():
- warn_distutils_present()
- ensure_local_distutils()
-
-
-class _TrivialRe:
- def __init__(self, *patterns) -> None:
- self._patterns = patterns
-
- def match(self, string):
- return all(pat in string for pat in self._patterns)
-
-
-class DistutilsMetaFinder:
- def find_spec(self, fullname, path, target=None):
- # optimization: only consider top level modules and those
- # found in the CPython test suite.
- if path is not None and not fullname.startswith('test.'):
- return None
-
- method_name = 'spec_for_{fullname}'.format(**locals())
- method = getattr(self, method_name, lambda: None)
- return method()
-
- def spec_for_distutils(self):
- if self.is_cpython():
- return None
-
- import importlib
- import importlib.abc
- import importlib.util
-
- try:
- mod = importlib.import_module('setuptools._distutils')
- except Exception:
- # There are a couple of cases where setuptools._distutils
- # may not be present:
- # - An older Setuptools without a local distutils is
- # taking precedence. Ref #2957.
- # - Path manipulation during sitecustomize removes
- # setuptools from the path but only after the hook
- # has been loaded. Ref #2980.
- # In either case, fall back to stdlib behavior.
- return None
-
- class DistutilsLoader(importlib.abc.Loader):
- def create_module(self, spec):
- mod.__name__ = 'distutils'
- return mod
-
- def exec_module(self, module):
- pass
-
- return importlib.util.spec_from_loader(
- 'distutils', DistutilsLoader(), origin=mod.__file__
- )
-
- @staticmethod
- def is_cpython():
- """
- Suppress supplying distutils for CPython (build and tests).
- Ref #2965 and #3007.
- """
- return os.path.isfile('pybuilddir.txt')
-
- def spec_for_pip(self):
- """
- Ensure stdlib distutils when running under pip.
- See pypa/pip#8761 for rationale.
- """
- if sys.version_info >= (3, 12) or self.pip_imported_during_build():
- return
- clear_distutils()
- self.spec_for_distutils = lambda: None
-
- @classmethod
- def pip_imported_during_build(cls):
- """
- Detect if pip is being imported in a build script. Ref #2355.
- """
- import traceback
-
- return any(
- cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None)
- )
-
- @staticmethod
- def frame_file_is_setup(frame):
- """
- Return True if the indicated frame suggests a setup.py file.
- """
- # some frames may not have __file__ (#2940)
- return frame.f_globals.get('__file__', '').endswith('setup.py')
-
- def spec_for_sensitive_tests(self):
- """
- Ensure stdlib distutils when running select tests under CPython.
-
- python/cpython#91169
- """
- clear_distutils()
- self.spec_for_distutils = lambda: None
-
- sensitive_tests = (
- [
- 'test.test_distutils',
- 'test.test_peg_generator',
- 'test.test_importlib',
- ]
- if sys.version_info < (3, 10)
- else [
- 'test.test_distutils',
- ]
- )
-
-
-for name in DistutilsMetaFinder.sensitive_tests:
- setattr(
- DistutilsMetaFinder,
- f'spec_for_{name}',
- DistutilsMetaFinder.spec_for_sensitive_tests,
- )
-
-
-DISTUTILS_FINDER = DistutilsMetaFinder()
-
-
-def add_shim():
- DISTUTILS_FINDER in sys.meta_path or insert_shim()
-
-
-class shim:
- def __enter__(self) -> None:
- insert_shim()
-
- def __exit__(self, exc: object, value: object, tb: object) -> None:
- _remove_shim()
-
-
-def insert_shim():
- sys.meta_path.insert(0, DISTUTILS_FINDER)
-
-
-def _remove_shim():
- try:
- sys.meta_path.remove(DISTUTILS_FINDER)
- except ValueError:
- pass
-
-
-if sys.version_info < (3, 12):
- # DistutilsMetaFinder can only be disabled in Python < 3.12 (PEP 632)
- remove_shim = _remove_shim
diff --git a/venv/lib/python3.12/site-packages/_distutils_hack/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/_distutils_hack/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 2f8b82b..0000000
Binary files a/venv/lib/python3.12/site-packages/_distutils_hack/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_distutils_hack/__pycache__/override.cpython-312.pyc b/venv/lib/python3.12/site-packages/_distutils_hack/__pycache__/override.cpython-312.pyc
deleted file mode 100644
index 61509cf..0000000
Binary files a/venv/lib/python3.12/site-packages/_distutils_hack/__pycache__/override.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_distutils_hack/override.py b/venv/lib/python3.12/site-packages/_distutils_hack/override.py
deleted file mode 100644
index 2cc433a..0000000
--- a/venv/lib/python3.12/site-packages/_distutils_hack/override.py
+++ /dev/null
@@ -1 +0,0 @@
-__import__('_distutils_hack').do_override()
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__init__.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__init__.py
deleted file mode 100644
index 91e9306..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__init__.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import sys
-
-__version__ = '2026.4'
-__maintainer__ = 'Legorooj, bwoodsend'
-__uri__ = 'https://github.com/pyinstaller/pyinstaller-hooks-contrib'
-
-
-def get_hook_dirs():
- import os
- hooks_dir = os.path.dirname(__file__)
- return [
- # Required because standard hooks are in sub-directory instead of the top-level hooks directory.
- os.path.join(hooks_dir, 'stdhooks'),
- # pre_* and run-time hooks
- hooks_dir,
- ]
-
-
-# Several packages for which provide hooks are involved in deep dependency chains when various optional dependencies are
-# installed in the environment, and their analysis typically requires recursion limit that exceeds the default 1000.
-# Therefore, automatically raise the recursion limit to at least 5000. This alleviates the need to do so on per-hook
-# basis.
-if (sys.platform.startswith('win') or sys.platform == 'cygwin') and sys.version_info < (3, 11):
- # The recursion limit test in PyInstaller main repository seems to push the recursion level to the limit; and if the
- # limit is set to 5000, this crashes python 3.8 - 3.10 on Windows and 3.9 that is (at the time of writing) available
- # under Cygwin. Further investigation revealed that Windows builds of python 3.8 and 3.10 handle recursion up to
- # level ~2075, while the practical limit for 3.9 is between 1950 and 1975. Therefore, for affected combinations of
- # platforms and python versions, use a conservative limit of 1900 - if only to avoid issues with the recursion limit
- # test in the main PyInstaller repository...
- new_recursion_limit = 1900
-else:
- new_recursion_limit = 5000
-
-if sys.getrecursionlimit() < new_recursion_limit:
- sys.setrecursionlimit(new_recursion_limit)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index cb7c4f1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/__init__.cpython-314.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/__init__.cpython-314.pyc
deleted file mode 100644
index 2898871..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/__init__.cpython-314.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/compat.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/compat.cpython-312.pyc
deleted file mode 100644
index 25d15ce..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/__pycache__/compat.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/compat.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/compat.py
deleted file mode 100644
index 4acba2f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/compat.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import sys
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-
-if is_module_satisfies("PyInstaller >= 6.0"):
- # PyInstaller >= 6.0 imports importlib_metadata in its compat module
- from PyInstaller.compat import importlib_metadata
-else:
- # Older PyInstaller version - duplicate logic from PyInstaller 6.0
- class ImportlibMetadataError(SystemExit):
- def __init__(self):
- super().__init__(
- "pyinstaller-hooks-contrib requires importlib.metadata from python >= 3.10 stdlib or "
- "importlib_metadata from importlib-metadata >= 4.6"
- )
-
- if sys.version_info >= (3, 10):
- import importlib.metadata as importlib_metadata
- else:
- try:
- import importlib_metadata
- except ImportError as e:
- raise ImportlibMetadataError() from e
-
- import packaging.version # For importlib_metadata version check
-
- # Validate the version
- if packaging.version.parse(importlib_metadata.version("importlib-metadata")) < packaging.version.parse("4.6"):
- raise ImportlibMetadataError()
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_find_module_path/__init__.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_find_module_path/__init__.py
deleted file mode 100644
index 89c0c0f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_find_module_path/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_find_module_path/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_find_module_path/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 5614688..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_find_module_path/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__init__.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__init__.py
deleted file mode 100644
index 89c0c0f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 0c5fe1e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/hook-tensorflow.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/hook-tensorflow.cpython-312.pyc
deleted file mode 100644
index d4a1f7f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/hook-tensorflow.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/hook-win32com.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/hook-win32com.cpython-312.pyc
deleted file mode 100644
index 658c7c8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/__pycache__/hook-win32com.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/hook-tensorflow.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/hook-tensorflow.py
deleted file mode 100644
index 0d135b6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/hook-tensorflow.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2022, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-
-def pre_safe_import_module(api):
- # As of tensorflow 2.8.0, the `tensorflow.keras` is entirely gone, replaced by a lazy-loaded alias for
- # `keras.api._v2.keras`. Without us registering the alias here, a program that imports only from
- # `tensorflow.keras` fails to collect `tensorflow`.
- # See: https://github.com/pyinstaller/pyinstaller/discussions/6890
- # The alias was already present in earlier releases, but it does not seem to be causing problems there,
- # so keep this specific to tensorflow >= 2.8.0 to avoid accidentally breaking something else.
- #
- # Starting with tensorflow 2.16.0, the alias points to `keras._tf_keras.keras`.
- if is_module_satisfies("tensorflow >= 2.16.0"):
- api.add_alias_module('keras._tf_keras.keras', 'tensorflow.keras')
- elif is_module_satisfies("tensorflow >= 2.8.0"):
- api.add_alias_module('keras.api._v2.keras', 'tensorflow.keras')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/hook-win32com.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/hook-win32com.py
deleted file mode 100644
index c28e1d2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/pre_safe_import_module/hook-win32com.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-"""
-PyWin32 package 'win32com' extends its __path__ attribute with win32comext
-directory and thus PyInstaller is not able to find modules in it. For example
-module 'win32com.shell' is in reality 'win32comext.shell'.
-
->>> win32com.__path__
-['win32com', 'C:\\Python27\\Lib\\site-packages\\win32comext']
-
-"""
-
-import os
-
-from PyInstaller import compat
-from PyInstaller import isolated
-from PyInstaller.utils.hooks import logger
-
-
-@isolated.decorate
-def _get_win32com_file():
- try:
- import win32com
- return win32com.__file__
- except Exception:
- return None
-
-
-def pre_safe_import_module(api):
- if not compat.is_win or compat.is_cygwin:
- return
-
- win32com_file = _get_win32com_file()
- if not win32com_file:
- logger.debug('win32com: module not available')
- return # win32com unavailable
- win32com_dir = os.path.dirname(win32com_file)
- comext_dir = os.path.join(os.path.dirname(win32com_dir), 'win32comext')
- logger.debug('win32com: extending __path__ with dir %r' % comext_dir)
- # Append the __path__ where PyInstaller will look for 'win32com' modules.'
- api.append_package_path(comext_dir)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks.dat b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks.dat
deleted file mode 100644
index f868f56..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks.dat
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- 'cryptography': ['pyi_rth_cryptography_openssl.py'],
- 'enchant': ['pyi_rth_enchant.py'],
- 'findlibs': ['pyi_rth_findlibs.py'],
- 'ffpyplayer': ['pyi_rth_ffpyplayer.py'],
- 'osgeo': ['pyi_rth_osgeo.py'],
- 'traitlets': ['pyi_rth_traitlets.py'],
- 'usb': ['pyi_rth_usb.py'],
- 'nltk': ['pyi_rth_nltk.py'],
- 'pyproj': ['pyi_rth_pyproj.py'],
- 'pygraphviz': ['pyi_rth_pygraphviz.py'],
- 'pythoncom': ['pyi_rth_pythoncom.py'],
- 'pyqtgraph': ['pyi_rth_pyqtgraph_multiprocess.py'],
- 'pywintypes': ['pyi_rth_pywintypes.py'],
- 'tensorflow': ['pyi_rth_tensorflow.py'],
-}
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__init__.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__init__.py
deleted file mode 100644
index 30d22ed..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ------------------------------------------------------------------
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index def200e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_cryptography_openssl.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_cryptography_openssl.cpython-312.pyc
deleted file mode 100644
index eb0dc3b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_cryptography_openssl.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_enchant.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_enchant.cpython-312.pyc
deleted file mode 100644
index 77d93bf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_enchant.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_ffpyplayer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_ffpyplayer.cpython-312.pyc
deleted file mode 100644
index c93d256..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_ffpyplayer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_findlibs.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_findlibs.cpython-312.pyc
deleted file mode 100644
index e75ab80..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_findlibs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_nltk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_nltk.cpython-312.pyc
deleted file mode 100644
index 3b220d9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_nltk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_osgeo.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_osgeo.cpython-312.pyc
deleted file mode 100644
index 54b8113..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_osgeo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pygraphviz.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pygraphviz.cpython-312.pyc
deleted file mode 100644
index 7fd1fcc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pygraphviz.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pyproj.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pyproj.cpython-312.pyc
deleted file mode 100644
index c6dfada..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pyproj.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pyqtgraph_multiprocess.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pyqtgraph_multiprocess.cpython-312.pyc
deleted file mode 100644
index a4e2a7a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pyqtgraph_multiprocess.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pythoncom.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pythoncom.cpython-312.pyc
deleted file mode 100644
index 5143d16..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pythoncom.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pywintypes.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pywintypes.cpython-312.pyc
deleted file mode 100644
index 99570b6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_pywintypes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_tensorflow.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_tensorflow.cpython-312.pyc
deleted file mode 100644
index 8beb94b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_tensorflow.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_traitlets.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_traitlets.cpython-312.pyc
deleted file mode 100644
index fe7766f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_traitlets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_usb.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_usb.cpython-312.pyc
deleted file mode 100644
index a74a7e0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/__pycache__/pyi_rth_usb.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_cryptography_openssl.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_cryptography_openssl.py
deleted file mode 100644
index dbabe69..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_cryptography_openssl.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-import os
-import sys
-
-# If we collected OpenSSL modules into `ossl-modules` directory, override the OpenSSL search path by setting the
-# `OPENSSL_MODULES` environment variable.
-_ossl_modules_dir = os.path.join(sys._MEIPASS, 'ossl-modules')
-if os.path.isdir(_ossl_modules_dir):
- os.environ['OPENSSL_MODULES'] = _ossl_modules_dir
-del _ossl_modules_dir
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_enchant.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_enchant.py
deleted file mode 100644
index 36c185d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_enchant.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-import os
-import sys
-
-# On Mac OS X tell enchant library where to look for enchant backends (aspell, myspell, ...).
-# Enchant is looking for backends in directory 'PREFIX/lib/enchant'
-# Note: env. var. ENCHANT_PREFIX_DIR is implemented only in the development version:
-# https://github.com/AbiWord/enchant
-# https://github.com/AbiWord/enchant/pull/2
-# TODO Test this rthook.
-if sys.platform.startswith('darwin'):
- os.environ['ENCHANT_PREFIX_DIR'] = os.path.join(sys._MEIPASS, 'enchant')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_ffpyplayer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_ffpyplayer.py
deleted file mode 100644
index 6a024de..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_ffpyplayer.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# Starting with v4.3.5, the `ffpyplayer` package attempts to use `site.USER_BASE` in path manipulation functions.
-# As frozen application runs with disabled `site`, the value of this variable is `None`, and causes path manipulation
-# functions to raise an error. As a work-around, we set `site.USER_BASE` to an empty string, which is also what the
-# fake `site` module available in PyInstaller prior to v5.5 did.
-import site
-
-if site.USER_BASE is None:
- site.USER_BASE = ''
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_findlibs.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_findlibs.py
deleted file mode 100644
index 48e4ddd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_findlibs.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2024, PyInstaller Development Team.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-#
-# The full license is in the file COPYING.txt, distributed with this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# Override the findlibs.find() function to give precedence to sys._MEIPASS, followed by `ctypes.util.find_library`,
-# and only then the hard-coded paths from the original implementation. The main aim here is to avoid loading libraries
-# from Homebrew environment on macOS when it happens to be present at run-time and we have a bundled copy collected from
-# the build system. This happens because we (try not to) modify `DYLD_LIBRARY_PATH`, and the original `findlibs.find()`
-# implementation gives precedence to environment variables and several fixed/hard-coded locations, and uses
-# `ctypes.util.find_library` as the final fallback...
-def _pyi_rthook():
- import sys
- import os
- import ctypes.util
-
- # findlibs v0.1.0 broke compatibility with python < 3.10; due to incompatible typing annotation, attempting to
- # import the package raises `TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'`. Gracefully
- # handle this situation by making this run-time hook no-op, in order to avoid crashing the frozen program even
- # if it would never end up importing/using `findlibs`.
- try:
- import findlibs
- except TypeError:
- return
-
- _orig_find = getattr(findlibs, 'find', None)
-
- def _pyi_find(lib_name, *args, **kwargs):
- extension = findlibs.EXTENSIONS.get(sys.platform, ".so")
-
- # First check sys._MEIPASS
- fullname = os.path.join(sys._MEIPASS, "lib{}{}".format(lib_name, extension))
- if os.path.isfile(fullname):
- return fullname
-
- # Fall back to `ctypes.util.find_library` (to give it precedence over hard-coded paths from original
- # implementation).
- lib = ctypes.util.find_library(lib_name)
- if lib is not None:
- return lib
-
- # Finally, fall back to original implementation
- if _orig_find is not None:
- return _orig_find(lib_name, *args, **kwargs)
-
- return None
-
- findlibs.find = _pyi_find
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_nltk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_nltk.py
deleted file mode 100644
index feb9eb7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_nltk.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-import sys
-import os
-import nltk
-
-#add the path to nltk_data
-nltk.data.path.insert(0, os.path.join(sys._MEIPASS, "nltk_data"))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_osgeo.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_osgeo.py
deleted file mode 100644
index 7b31027..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_osgeo.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-import os
-import sys
-
-# Installing `osgeo` Conda packages requires to set `GDAL_DATA`
-
-is_win = sys.platform.startswith('win')
-if is_win:
-
- gdal_data = os.path.join(sys._MEIPASS, 'data', 'gdal')
- if not os.path.exists(gdal_data):
-
- gdal_data = os.path.join(sys._MEIPASS, 'Library', 'share', 'gdal')
- # last attempt, check if one of the required file is in the generic folder Library/data
- if not os.path.exists(os.path.join(gdal_data, 'gcs.csv')):
- gdal_data = os.path.join(sys._MEIPASS, 'Library', 'data')
-
-else:
- gdal_data = os.path.join(sys._MEIPASS, 'share', 'gdal')
-
-if os.path.exists(gdal_data):
- os.environ['GDAL_DATA'] = gdal_data
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pygraphviz.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pygraphviz.py
deleted file mode 100644
index cfae2b3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pygraphviz.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2021, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-import pygraphviz
-
-# Override pygraphviz.AGraph._which method to search for graphviz executables inside sys._MEIPASS
-if hasattr(pygraphviz.AGraph, '_which'):
-
- def _pygraphviz_override_which(self, name):
- import os
- import sys
- import platform
-
- program_name = name
- if platform.system() == "Windows":
- program_name += ".exe"
-
- program_path = os.path.join(sys._MEIPASS, program_name)
- if not os.path.isfile(program_path):
- raise ValueError(f"Prog {name} not found in the PyInstaller-frozen application bundle!")
-
- return program_path
-
- pygraphviz.AGraph._which = _pygraphviz_override_which
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pyproj.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pyproj.py
deleted file mode 100644
index b78b70b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pyproj.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2015-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-import os
-import sys
-
-# Installing `pyproj` Conda packages requires to set `PROJ_LIB`
-
-is_win = sys.platform.startswith('win')
-if is_win:
-
- proj_data = os.path.join(sys._MEIPASS, 'Library', 'share', 'proj')
-
-else:
- proj_data = os.path.join(sys._MEIPASS, 'share', 'proj')
-
-if os.path.exists(proj_data):
- os.environ['PROJ_LIB'] = proj_data
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pyqtgraph_multiprocess.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pyqtgraph_multiprocess.py
deleted file mode 100644
index 06a012b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pyqtgraph_multiprocess.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2022, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-import sys
-import os
-
-
-def _setup_pyqtgraph_multiprocess_hook():
- # NOTE: pyqtgraph.multiprocess spawns the sub-process using subprocess.Popen (or equivalent). This means that in
- # onefile builds, the executable in subprocess will unpack itself again, into different sys._MEIPASS, because
- # the _MEIPASS2 environment variable is not set (bootloader / bootstrap script cleans it up). This will make the
- # argv[1] check below fail, due to different sys._MEIPASS value in the subprocess.
- #
- # To work around this, at the time of writing (PyInstaller 5.5), the user needs to set _MEIPASS2 environment
- # variable to sys._MEIPASS before using `pyqtgraph.multiprocess` in onefile builds. And stlib's
- # `multiprocessing.freeze_support` needs to be called in the entry-point program, due to `pyqtgraph.multiprocess`
- # internally using stdlib's `multiprocessing` primitives.
- if len(sys.argv) == 2 and sys.argv[1] == os.path.join(sys._MEIPASS, 'pyqtgraph', 'multiprocess', 'bootstrap.py'):
- # Load as module; this requires --hiddenimport pyqtgraph.multiprocess.bootstrap
- try:
- import importlib.util
- spec = importlib.util.find_spec("pyqtgraph.multiprocess.bootstrap")
- bootstrap_co = spec.loader.get_code("pyqtgraph.multiprocess.bootstrap")
- except Exception:
- bootstrap_co = None
-
- if bootstrap_co:
- exec(bootstrap_co)
- sys.exit(0)
-
- # Load from file; requires pyqtgraph/multiprocess/bootstrap.py collected as data file
- # This is obsolete for PyInstaller >= v6.10.0
- bootstrap_file = os.path.join(sys._MEIPASS, 'pyqtgraph', 'multiprocess', 'bootstrap.py')
- if os.path.isfile(bootstrap_file):
- with open(bootstrap_file, 'r') as fp:
- bootstrap_code = fp.read()
- exec(bootstrap_code)
- sys.exit(0)
-
- raise RuntimeError("Could not find pyqtgraph.multiprocess bootstrap code or script!")
-
-
-_setup_pyqtgraph_multiprocess_hook()
-del _setup_pyqtgraph_multiprocess_hook
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pythoncom.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pythoncom.py
deleted file mode 100644
index 4f11fb8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pythoncom.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2022, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# Unfortunately, __import_pywin32_system_module__ from pywintypes module assumes that in a frozen application, the
-# pythoncom3X.dll and pywintypes3X.dll that are normally found in site-packages/pywin32_system32, are located
-# directly in the sys.path, without bothering to check first if they are actually available in the standard location.
-# This obviously runs afoul of our attempts at preserving the directory layout and placing them in the pywin32_system32
-# sub-directory instead of the top-level application directory. So as a work-around, add the sub-directory to sys.path
-# to keep pywintypes happy...
-import sys
-import os
-
-pywin32_system32_path = os.path.join(sys._MEIPASS, 'pywin32_system32')
-if os.path.isdir(pywin32_system32_path) and pywin32_system32_path not in sys.path:
- sys.path.append(pywin32_system32_path)
-del pywin32_system32_path
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pywintypes.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pywintypes.py
deleted file mode 100644
index 4f11fb8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_pywintypes.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2022, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# Unfortunately, __import_pywin32_system_module__ from pywintypes module assumes that in a frozen application, the
-# pythoncom3X.dll and pywintypes3X.dll that are normally found in site-packages/pywin32_system32, are located
-# directly in the sys.path, without bothering to check first if they are actually available in the standard location.
-# This obviously runs afoul of our attempts at preserving the directory layout and placing them in the pywin32_system32
-# sub-directory instead of the top-level application directory. So as a work-around, add the sub-directory to sys.path
-# to keep pywintypes happy...
-import sys
-import os
-
-pywin32_system32_path = os.path.join(sys._MEIPASS, 'pywin32_system32')
-if os.path.isdir(pywin32_system32_path) and pywin32_system32_path not in sys.path:
- sys.path.append(pywin32_system32_path)
-del pywin32_system32_path
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_tensorflow.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_tensorflow.py
deleted file mode 100644
index 747ea45..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_tensorflow.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2023, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-def _pyi_rthook():
- import sys
-
- # `tensorflow` versions prior to 2.3.0 attempt to use `site.USER_SITE` in path/string manipulation functions.
- # As frozen application runs with disabled `site`, the value of this variable is `None`, and causes path/string
- # manipulation functions to raise an error. As a work-around, we set `site.USER_SITE` to an empty string, which is
- # also what the fake `site` module available in PyInstaller prior to v5.5 did.
- import site
-
- if site.USER_SITE is None:
- site.USER_SITE = ''
-
- # The issue described about with site.USER_SITE being None has largely been resolved in contemporary `tensorflow`
- # versions, which now check that `site.ENABLE_USER_SITE` is set and that `site.USER_SITE` is not None before
- # trying to use it.
- #
- # However, `tensorflow` will attempt to search and load its plugins only if it believes that it is running from
- # "a pip-based installation" - if the package's location is rooted in one of the "site-packages" directories. See
- # https://github.com/tensorflow/tensorflow/blob/6887368d6d46223f460358323c4b76d61d1558a8/tensorflow/api_template.__init__.py#L110C76-L156
- # Unfortunately, they "cleverly" infer the module's location via `inspect.getfile(inspect.currentframe())`, which
- # in the frozen application returns anonymized relative source file name (`tensorflow/__init__.py`) - so we need one
- # of the "site directories" to be just "tensorflow" (to fool the `_running_from_pip_package()` check), and we also
- # need `sys._MEIPASS` to be among them (to load the plugins from the actual `sys._MEIPASS/tensorflow-plugins`).
- # Therefore, we monkey-patch `site.getsitepackages` to add those two entries to the list of "site directories".
-
- _orig_getsitepackages = getattr(site, 'getsitepackages', None)
-
- def _pyi_getsitepackages():
- return [
- sys._MEIPASS,
- "tensorflow",
- *(_orig_getsitepackages() if _orig_getsitepackages is not None else []),
- ]
-
- site.getsitepackages = _pyi_getsitepackages
-
- # NOTE: instead of the above override, we could also set TF_PLUGGABLE_DEVICE_LIBRARY_PATH, but that works only
- # for tensorflow >= 2.12.
-
-
-_pyi_rthook()
-del _pyi_rthook
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_traitlets.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_traitlets.py
deleted file mode 100644
index 5ec3a9f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_traitlets.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-# 'traitlets' uses module 'inspect' from default Python library to inspect
-# source code of modules. However, frozen app does not contain source code
-# of Python modules.
-#
-# hook-IPython depends on module 'traitlets'.
-
-import traitlets.traitlets
-
-
-def _disabled_deprecation_warnings(method, cls, method_name, msg):
- pass
-
-
-traitlets.traitlets._deprecated_method = _disabled_deprecation_warnings
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_usb.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_usb.py
deleted file mode 100644
index b64624d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/rthooks/pyi_rth_usb.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2013-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the Apache License 2.0
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: Apache-2.0
-#-----------------------------------------------------------------------------
-
-
-import ctypes
-import glob
-import os
-import sys
-# Pyusb changed these libusb module names in commit 2082e7.
-try:
- import usb.backend.libusb10 as libusb10
-except ImportError:
- import usb.backend.libusb1 as libusb10
-try:
- import usb.backend.libusb01 as libusb01
-except ImportError:
- import usb.backend.libusb0 as libusb01
-import usb.backend.openusb as openusb
-
-
-def get_load_func(type, candidates):
-
- def _load_library(find_library=None):
- exec_path = sys._MEIPASS
-
- library = None
- for candidate in candidates:
-
- # Find a list of library files that match 'candidate'.
- if find_library:
- # Caller provides a function that lookup lib path by candidate name.
- lib_path = find_library(candidate)
- libs = [lib_path] if lib_path else []
- else:
- # No find_library callback function, we look at the default location.
- if os.name == 'posix' and sys.platform == 'darwin':
- libs = glob.glob("%s/%s*.dylib*" % (exec_path, candidate))
- elif sys.platform == 'win32' or sys.platform == 'cygwin':
- libs = glob.glob("%s\\%s*.dll" % (exec_path, candidate))
- else:
- libs = glob.glob("%s/%s*.so*" % (exec_path, candidate))
-
- # Do linker's path lookup work to force load bundled copy.
- for libname in libs:
- try:
- # NOTE: libusb01 is using CDLL under win32.
- # (see usb.backends.libusb01)
- if sys.platform == 'win32' and type != 'libusb01':
- library = ctypes.WinDLL(libname)
- else:
- library = ctypes.CDLL(libname)
- if library is not None:
- break
- except OSError:
- library = None
- if library is not None:
- break
- else:
- raise OSError('USB library could not be found')
-
- if type == 'libusb10':
- if not hasattr(library, 'libusb_init'):
- raise OSError('USB library could not be found')
- return library
-
- return _load_library
-
-
-# NOTE: Need to keep in sync with future PyUSB updates.
-if sys.platform == 'cygwin':
- libusb10._load_library = get_load_func('libusb10', ('cygusb-1.0', ))
- libusb01._load_library = get_load_func('libusb01', ('cygusb0', ))
- openusb._load_library = get_load_func('openusb', ('openusb', ))
-else:
- libusb10._load_library = get_load_func('libusb10', ('usb-1.0', 'libusb-1.0', 'usb'))
- libusb01._load_library = get_load_func('libusb01', ('usb-0.1', 'usb', 'libusb0', 'libusb'))
- openusb._load_library = get_load_func('openusb', ('openusb', ))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__init__.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__init__.py
deleted file mode 100644
index 89c0c0f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 605bb3d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-BTrees.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-BTrees.cpython-312.pyc
deleted file mode 100644
index 0be14f2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-BTrees.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-CTkMessagebox.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-CTkMessagebox.cpython-312.pyc
deleted file mode 100644
index ce10797..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-CTkMessagebox.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Crypto.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Crypto.cpython-312.pyc
deleted file mode 100644
index 17f67c9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Crypto.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Cryptodome.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Cryptodome.cpython-312.pyc
deleted file mode 100644
index 0730131..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Cryptodome.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-HtmlTestRunner.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-HtmlTestRunner.cpython-312.pyc
deleted file mode 100644
index 93b1979..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-HtmlTestRunner.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-IPython.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-IPython.cpython-312.pyc
deleted file mode 100644
index 948353a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-IPython.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-OpenGL.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-OpenGL.cpython-312.pyc
deleted file mode 100644
index 92b2c04..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-OpenGL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-OpenGL_accelerate.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-OpenGL_accelerate.cpython-312.pyc
deleted file mode 100644
index 8ee627d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-OpenGL_accelerate.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-PyTaskbar.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-PyTaskbar.cpython-312.pyc
deleted file mode 100644
index c86eee4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-PyTaskbar.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Xlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Xlib.cpython-312.pyc
deleted file mode 100644
index 3edb20a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-Xlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-_mssql.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-_mssql.cpython-312.pyc
deleted file mode 100644
index 9cd71ad..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-_mssql.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-_mysql.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-_mysql.cpython-312.pyc
deleted file mode 100644
index 51cc27a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-_mysql.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-accessible_output2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-accessible_output2.cpython-312.pyc
deleted file mode 100644
index ac07cab..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-accessible_output2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adbc_driver_manager.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adbc_driver_manager.cpython-312.pyc
deleted file mode 100644
index 431ceb9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adbc_driver_manager.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adbutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adbutils.cpython-312.pyc
deleted file mode 100644
index 351f62a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adbutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adios.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adios.cpython-312.pyc
deleted file mode 100644
index 3b0c19e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-adios.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-afmformats.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-afmformats.cpython-312.pyc
deleted file mode 100644
index e4329e0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-afmformats.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-aliyunsdkcore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-aliyunsdkcore.cpython-312.pyc
deleted file mode 100644
index 02e81dd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-aliyunsdkcore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-altair.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-altair.cpython-312.pyc
deleted file mode 100644
index 4b3b456..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-altair.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-amazonproduct.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-amazonproduct.cpython-312.pyc
deleted file mode 100644
index e3cf963..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-amazonproduct.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-anyio.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-anyio.cpython-312.pyc
deleted file mode 100644
index 9925897..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-anyio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-apkutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-apkutils.cpython-312.pyc
deleted file mode 100644
index f595730..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-apkutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-appdirs.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-appdirs.cpython-312.pyc
deleted file mode 100644
index cbc9997..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-appdirs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-appy.pod.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-appy.pod.cpython-312.pyc
deleted file mode 100644
index 442dbed..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-appy.pod.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-apscheduler.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-apscheduler.cpython-312.pyc
deleted file mode 100644
index 7f0f90d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-apscheduler.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-argon2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-argon2.cpython-312.pyc
deleted file mode 100644
index 811c833..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-argon2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astor.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astor.cpython-312.pyc
deleted file mode 100644
index 1b2965b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astor.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astroid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astroid.cpython-312.pyc
deleted file mode 100644
index b433fc2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astroid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astropy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astropy.cpython-312.pyc
deleted file mode 100644
index 685f2dc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astropy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astropy_iers_data.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astropy_iers_data.cpython-312.pyc
deleted file mode 100644
index 0dfad28..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-astropy_iers_data.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-av.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-av.cpython-312.pyc
deleted file mode 100644
index e2d3c9c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-av.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-avro.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-avro.cpython-312.pyc
deleted file mode 100644
index 08dbfc1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-avro.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-azurerm.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-azurerm.cpython-312.pyc
deleted file mode 100644
index 31a19bb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-azurerm.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-backports.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-backports.cpython-312.pyc
deleted file mode 100644
index ba636b9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-backports.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-backports.zoneinfo.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-backports.zoneinfo.cpython-312.pyc
deleted file mode 100644
index e67f0f0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-backports.zoneinfo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bacon.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bacon.cpython-312.pyc
deleted file mode 100644
index acf99e2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bacon.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bcrypt.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bcrypt.cpython-312.pyc
deleted file mode 100644
index d10c5b2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bcrypt.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bitsandbytes.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bitsandbytes.cpython-312.pyc
deleted file mode 100644
index 4966ba7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bitsandbytes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-black.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-black.cpython-312.pyc
deleted file mode 100644
index ed4198b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-black.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bleak.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bleak.cpython-312.pyc
deleted file mode 100644
index 9732370..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bleak.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-blib2to3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-blib2to3.cpython-312.pyc
deleted file mode 100644
index 11e0b74..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-blib2to3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-blspy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-blspy.cpython-312.pyc
deleted file mode 100644
index 094cbc8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-blspy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bokeh.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bokeh.cpython-312.pyc
deleted file mode 100644
index 705bf8c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-bokeh.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-boto.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-boto.cpython-312.pyc
deleted file mode 100644
index 5d6e724..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-boto.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-boto3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-boto3.cpython-312.pyc
deleted file mode 100644
index 07852e2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-boto3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-botocore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-botocore.cpython-312.pyc
deleted file mode 100644
index a8fa043..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-botocore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-branca.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-branca.cpython-312.pyc
deleted file mode 100644
index 5528917..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-branca.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cairocffi.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cairocffi.cpython-312.pyc
deleted file mode 100644
index d8e3a43..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cairocffi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cairosvg.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cairosvg.cpython-312.pyc
deleted file mode 100644
index 1b3be9f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cairosvg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-capstone.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-capstone.cpython-312.pyc
deleted file mode 100644
index 71fa261..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-capstone.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cassandra.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cassandra.cpython-312.pyc
deleted file mode 100644
index c595c2d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cassandra.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-celpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-celpy.cpython-312.pyc
deleted file mode 100644
index 1e22967..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-celpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-certifi.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-certifi.cpython-312.pyc
deleted file mode 100644
index 334ce3d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-certifi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cf_units.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cf_units.cpython-312.pyc
deleted file mode 100644
index 2567a83..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cf_units.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cftime.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cftime.cpython-312.pyc
deleted file mode 100644
index 4213c3e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cftime.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-chardet.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-chardet.cpython-312.pyc
deleted file mode 100644
index 028c030..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-chardet.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-charset_normalizer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-charset_normalizer.cpython-312.pyc
deleted file mode 100644
index e88f73c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-charset_normalizer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cloudpickle.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cloudpickle.cpython-312.pyc
deleted file mode 100644
index 1315476..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cloudpickle.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cloudscraper.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cloudscraper.cpython-312.pyc
deleted file mode 100644
index e82f4e5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cloudscraper.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-clr.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-clr.cpython-312.pyc
deleted file mode 100644
index db7347c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-clr.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-clr_loader.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-clr_loader.cpython-312.pyc
deleted file mode 100644
index a0b9e7f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-clr_loader.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cmocean.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cmocean.cpython-312.pyc
deleted file mode 100644
index 89eed95..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cmocean.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-compliance_checker.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-compliance_checker.cpython-312.pyc
deleted file mode 100644
index 7056572..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-compliance_checker.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-comtypes.client.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-comtypes.client.cpython-312.pyc
deleted file mode 100644
index 3bef570..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-comtypes.client.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-countrycode.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-countrycode.cpython-312.pyc
deleted file mode 100644
index eef49b3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-countrycode.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-countryinfo.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-countryinfo.cpython-312.pyc
deleted file mode 100644
index b59177c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-countryinfo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cryptography.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cryptography.cpython-312.pyc
deleted file mode 100644
index 604dc65..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cryptography.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cumm.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cumm.cpython-312.pyc
deleted file mode 100644
index da23c04..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cumm.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-customtkinter.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-customtkinter.cpython-312.pyc
deleted file mode 100644
index 605c861..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-customtkinter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cv2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cv2.cpython-312.pyc
deleted file mode 100644
index 4fc5c0c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cv2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cx_Oracle.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cx_Oracle.cpython-312.pyc
deleted file mode 100644
index 4c095ed..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cx_Oracle.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cytoolz.itertoolz.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cytoolz.itertoolz.cpython-312.pyc
deleted file mode 100644
index 228786f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-cytoolz.itertoolz.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash.cpython-312.pyc
deleted file mode 100644
index 29774d6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_bootstrap_components.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_bootstrap_components.cpython-312.pyc
deleted file mode 100644
index d940120..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_bootstrap_components.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_core_components.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_core_components.cpython-312.pyc
deleted file mode 100644
index 159eaee..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_core_components.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_html_components.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_html_components.cpython-312.pyc
deleted file mode 100644
index 8c7f6b8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_html_components.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_renderer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_renderer.cpython-312.pyc
deleted file mode 100644
index 429e2be..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_renderer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_table.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_table.cpython-312.pyc
deleted file mode 100644
index d843418..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_table.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_uploader.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_uploader.cpython-312.pyc
deleted file mode 100644
index 50e641b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dash_uploader.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dask.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dask.cpython-312.pyc
deleted file mode 100644
index ded9f2a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dask.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-datasets.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-datasets.cpython-312.pyc
deleted file mode 100644
index 2f6ff7e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-datasets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateparser.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateparser.cpython-312.pyc
deleted file mode 100644
index 2533d27..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateparser.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateparser.utils.strptime.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateparser.utils.strptime.cpython-312.pyc
deleted file mode 100644
index 3ccdbd0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateparser.utils.strptime.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateutil.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateutil.cpython-312.pyc
deleted file mode 100644
index 1016184..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dateutil.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dbus_fast.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dbus_fast.cpython-312.pyc
deleted file mode 100644
index 1cd9017..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dbus_fast.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dclab.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dclab.cpython-312.pyc
deleted file mode 100644
index fc0ea95..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dclab.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ddgs.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ddgs.cpython-312.pyc
deleted file mode 100644
index af6f841..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ddgs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-detectron2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-detectron2.cpython-312.pyc
deleted file mode 100644
index e3fb755..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-detectron2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-discid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-discid.cpython-312.pyc
deleted file mode 100644
index c551e8c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-discid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-distorm3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-distorm3.cpython-312.pyc
deleted file mode 100644
index 82763ac..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-distorm3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-distributed.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-distributed.cpython-312.pyc
deleted file mode 100644
index 261aaf7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-distributed.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dns.rdata.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dns.rdata.cpython-312.pyc
deleted file mode 100644
index f03b427..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dns.rdata.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docutils.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docutils.cpython-312.pyc
deleted file mode 100644
index 8389a3e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docutils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docx.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docx.cpython-312.pyc
deleted file mode 100644
index 281ea65..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docx2pdf.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docx2pdf.cpython-312.pyc
deleted file mode 100644
index 7f0f247..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-docx2pdf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-duckdb.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-duckdb.cpython-312.pyc
deleted file mode 100644
index 4c967e0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-duckdb.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dynaconf.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dynaconf.cpython-312.pyc
deleted file mode 100644
index 6636ba5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-dynaconf.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-easyocr.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-easyocr.cpython-312.pyc
deleted file mode 100644
index e9744b6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-easyocr.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eccodeslib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eccodeslib.cpython-312.pyc
deleted file mode 100644
index ee88d9c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eccodeslib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eckitlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eckitlib.cpython-312.pyc
deleted file mode 100644
index 94216bc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eckitlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eel.cpython-312.pyc
deleted file mode 100644
index f9c2a4a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-emoji.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-emoji.cpython-312.pyc
deleted file mode 100644
index 85ce580..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-emoji.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-enchant.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-enchant.cpython-312.pyc
deleted file mode 100644
index 0453072..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-enchant.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eng_to_ipa.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eng_to_ipa.cpython-312.pyc
deleted file mode 100644
index c0002f4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eng_to_ipa.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ens.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ens.cpython-312.pyc
deleted file mode 100644
index 33f88e9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ens.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-enzyme.parsers.ebml.core.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-enzyme.parsers.ebml.core.cpython-312.pyc
deleted file mode 100644
index f22d6a8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-enzyme.parsers.ebml.core.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_abi.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_abi.cpython-312.pyc
deleted file mode 100644
index 0c16bda..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_abi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_account.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_account.cpython-312.pyc
deleted file mode 100644
index 30a5be1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_account.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_hash.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_hash.cpython-312.pyc
deleted file mode 100644
index 3c51cc8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_hash.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_keyfile.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_keyfile.cpython-312.pyc
deleted file mode 100644
index 4061f1c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_keyfile.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_keys.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_keys.cpython-312.pyc
deleted file mode 100644
index efae614..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_keys.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_rlp.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_rlp.cpython-312.pyc
deleted file mode 100644
index 71fe125..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_rlp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_typing.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_typing.cpython-312.pyc
deleted file mode 100644
index 2d41418..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_typing.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_utils.cpython-312.pyc
deleted file mode 100644
index 08bb3d6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_utils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_utils.network.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_utils.network.cpython-312.pyc
deleted file mode 100644
index b69fa8e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-eth_utils.network.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-exchangelib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-exchangelib.cpython-312.pyc
deleted file mode 100644
index cf53a0b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-exchangelib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fabric.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fabric.cpython-312.pyc
deleted file mode 100644
index ec261bb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fabric.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fairscale.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fairscale.cpython-312.pyc
deleted file mode 100644
index 4393618..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fairscale.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fake_useragent.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fake_useragent.cpython-312.pyc
deleted file mode 100644
index 42f0c4c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fake_useragent.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-faker.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-faker.cpython-312.pyc
deleted file mode 100644
index 1dc606c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-faker.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-falcon.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-falcon.cpython-312.pyc
deleted file mode 100644
index 7fbdd69..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-falcon.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fastai.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fastai.cpython-312.pyc
deleted file mode 100644
index 67b014b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fastai.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fastparquet.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fastparquet.cpython-312.pyc
deleted file mode 100644
index bf9c9e5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fastparquet.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fckitlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fckitlib.cpython-312.pyc
deleted file mode 100644
index 9a76375..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fckitlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ffpyplayer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ffpyplayer.cpython-312.pyc
deleted file mode 100644
index 2e77446..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ffpyplayer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fiona.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fiona.cpython-312.pyc
deleted file mode 100644
index 4e2106f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fiona.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flask_compress.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flask_compress.cpython-312.pyc
deleted file mode 100644
index 6ccb42f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flask_compress.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flask_restx.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flask_restx.cpython-312.pyc
deleted file mode 100644
index 9b5a27a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flask_restx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flex.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flex.cpython-312.pyc
deleted file mode 100644
index 66518ec..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flex.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flirpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flirpy.cpython-312.pyc
deleted file mode 100644
index cef95e3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-flirpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fmpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fmpy.cpython-312.pyc
deleted file mode 100644
index 6d05e30..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fmpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-folium.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-folium.cpython-312.pyc
deleted file mode 100644
index d09acdd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-folium.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-freetype.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-freetype.cpython-312.pyc
deleted file mode 100644
index fa5e116..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-freetype.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-frictionless.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-frictionless.cpython-312.pyc
deleted file mode 100644
index c4708cc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-frictionless.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fsspec.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fsspec.cpython-312.pyc
deleted file mode 100644
index 7563e0f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fsspec.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fvcore.nn.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fvcore.nn.cpython-312.pyc
deleted file mode 100644
index fd8e201..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-fvcore.nn.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gadfly.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gadfly.cpython-312.pyc
deleted file mode 100644
index 2604dd2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gadfly.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gbulb.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gbulb.cpython-312.pyc
deleted file mode 100644
index 1660c41..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gbulb.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gcloud.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gcloud.cpython-312.pyc
deleted file mode 100644
index 5445fcc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gcloud.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-geopandas.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-geopandas.cpython-312.pyc
deleted file mode 100644
index 3a86216..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-geopandas.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gitlab.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gitlab.cpython-312.pyc
deleted file mode 100644
index a77e7de..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gitlab.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-globus_sdk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-globus_sdk.cpython-312.pyc
deleted file mode 100644
index 74c1b3d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-globus_sdk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gmplot.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gmplot.cpython-312.pyc
deleted file mode 100644
index 6cd15e0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gmplot.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gmsh.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gmsh.cpython-312.pyc
deleted file mode 100644
index 5614c72..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gmsh.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gooey.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gooey.cpython-312.pyc
deleted file mode 100644
index 5950d29..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gooey.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.api_core.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.api_core.cpython-312.pyc
deleted file mode 100644
index 7daafc5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.api_core.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.bigquery.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.bigquery.cpython-312.pyc
deleted file mode 100644
index fe3c58b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.bigquery.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.core.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.core.cpython-312.pyc
deleted file mode 100644
index 0dc7dea..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.core.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.kms_v1.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.kms_v1.cpython-312.pyc
deleted file mode 100644
index 7ad7b39..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.kms_v1.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.pubsub_v1.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.pubsub_v1.cpython-312.pyc
deleted file mode 100644
index d2aa1db..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.pubsub_v1.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.speech.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.speech.cpython-312.pyc
deleted file mode 100644
index 6be5d0c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.speech.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.storage.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.storage.cpython-312.pyc
deleted file mode 100644
index aed1013..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.storage.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.translate.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.translate.cpython-312.pyc
deleted file mode 100644
index 8b6bc11..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-google.cloud.translate.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-googleapiclient.model.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-googleapiclient.model.cpython-312.pyc
deleted file mode 100644
index 2177c73..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-googleapiclient.model.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-grapheme.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-grapheme.cpython-312.pyc
deleted file mode 100644
index 2eac354..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-grapheme.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-graphql_query.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-graphql_query.cpython-312.pyc
deleted file mode 100644
index 307860e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-graphql_query.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-great_expectations.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-great_expectations.cpython-312.pyc
deleted file mode 100644
index 84b5d26..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-great_expectations.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gribapi.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gribapi.cpython-312.pyc
deleted file mode 100644
index b893d30..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gribapi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-grpc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-grpc.cpython-312.pyc
deleted file mode 100644
index b664944..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-grpc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gtk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gtk.cpython-312.pyc
deleted file mode 100644
index f55839f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-gtk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-h3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-h3.cpython-312.pyc
deleted file mode 100644
index a908b14..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-h3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-h5py.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-h5py.cpython-312.pyc
deleted file mode 100644
index cc4b4d6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-h5py.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hdf5plugin.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hdf5plugin.cpython-312.pyc
deleted file mode 100644
index f37fd74..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hdf5plugin.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hexbytes.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hexbytes.cpython-312.pyc
deleted file mode 100644
index 0821f83..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hexbytes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-httplib2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-httplib2.cpython-312.pyc
deleted file mode 100644
index b650a56..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-httplib2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-humanize.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-humanize.cpython-312.pyc
deleted file mode 100644
index 49878a9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-humanize.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hydra.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hydra.cpython-312.pyc
deleted file mode 100644
index 0999c72..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-hydra.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ijson.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ijson.cpython-312.pyc
deleted file mode 100644
index 0fdc18d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ijson.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imageio.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imageio.cpython-312.pyc
deleted file mode 100644
index 011dba0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imageio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imageio_ffmpeg.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imageio_ffmpeg.cpython-312.pyc
deleted file mode 100644
index fb58f30..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imageio_ffmpeg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imagingcontrol4.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imagingcontrol4.cpython-312.pyc
deleted file mode 100644
index c17a3d3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-imagingcontrol4.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-iminuit.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-iminuit.cpython-312.pyc
deleted file mode 100644
index 4de9689..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-iminuit.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-intake.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-intake.cpython-312.pyc
deleted file mode 100644
index bd185a3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-intake.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-iso639.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-iso639.cpython-312.pyc
deleted file mode 100644
index 23c208d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-iso639.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-itk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-itk.cpython-312.pyc
deleted file mode 100644
index c35ab12..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-itk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jaraco.text.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jaraco.text.cpython-312.pyc
deleted file mode 100644
index fccf425..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jaraco.text.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jedi.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jedi.cpython-312.pyc
deleted file mode 100644
index d2d0f04..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jedi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jieba.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jieba.cpython-312.pyc
deleted file mode 100644
index 242b67b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jieba.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jinja2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jinja2.cpython-312.pyc
deleted file mode 100644
index b883d8a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jinja2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jinxed.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jinxed.cpython-312.pyc
deleted file mode 100644
index 3cf5a44..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jinxed.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jira.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jira.cpython-312.pyc
deleted file mode 100644
index 327e3e1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jira.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonpath_rw_ext.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonpath_rw_ext.cpython-312.pyc
deleted file mode 100644
index b7936c7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonpath_rw_ext.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonrpcserver.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonrpcserver.cpython-312.pyc
deleted file mode 100644
index a7cdecc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonrpcserver.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonschema.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonschema.cpython-312.pyc
deleted file mode 100644
index dd4c7be..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonschema.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonschema_specifications.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonschema_specifications.cpython-312.pyc
deleted file mode 100644
index 3493e84..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jsonschema_specifications.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jupyterlab.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jupyterlab.cpython-312.pyc
deleted file mode 100644
index 6b741eb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-jupyterlab.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-kaleido.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-kaleido.cpython-312.pyc
deleted file mode 100644
index 9723e41..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-kaleido.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-khmernltk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-khmernltk.cpython-312.pyc
deleted file mode 100644
index f57e2f6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-khmernltk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-kinterbasdb.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-kinterbasdb.cpython-312.pyc
deleted file mode 100644
index 639772d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-kinterbasdb.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langchain.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langchain.cpython-312.pyc
deleted file mode 100644
index f81e494..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langchain.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langchain_classic.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langchain_classic.cpython-312.pyc
deleted file mode 100644
index bbcff88..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langchain_classic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langcodes.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langcodes.cpython-312.pyc
deleted file mode 100644
index 495bd50..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langcodes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langdetect.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langdetect.cpython-312.pyc
deleted file mode 100644
index ae3474f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-langdetect.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-laonlp.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-laonlp.cpython-312.pyc
deleted file mode 100644
index 3a2b8e1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-laonlp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lark.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lark.cpython-312.pyc
deleted file mode 100644
index 572eb04..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lark.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ldfparser.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ldfparser.cpython-312.pyc
deleted file mode 100644
index daa3ac0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ldfparser.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lensfunpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lensfunpy.cpython-312.pyc
deleted file mode 100644
index 5949bac..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lensfunpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-libaudioverse.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-libaudioverse.cpython-312.pyc
deleted file mode 100644
index 0ddb203..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-libaudioverse.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-librosa.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-librosa.cpython-312.pyc
deleted file mode 100644
index ede1a4d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-librosa.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lightgbm.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lightgbm.cpython-312.pyc
deleted file mode 100644
index ccd726d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lightgbm.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lightning.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lightning.cpython-312.pyc
deleted file mode 100644
index 4368f63..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lightning.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-limits.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-limits.cpython-312.pyc
deleted file mode 100644
index 23bf881..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-limits.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-linear_operator.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-linear_operator.cpython-312.pyc
deleted file mode 100644
index d54528d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-linear_operator.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lingua.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lingua.cpython-312.pyc
deleted file mode 100644
index ee9a031..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lingua.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-litestar.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-litestar.cpython-312.pyc
deleted file mode 100644
index 2b8937d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-litestar.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-llvmlite.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-llvmlite.cpython-312.pyc
deleted file mode 100644
index ef3c136..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-llvmlite.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-logilab.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-logilab.cpython-312.pyc
deleted file mode 100644
index b26f384..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-logilab.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.cpython-312.pyc
deleted file mode 100644
index 9c49f61..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.etree.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.etree.cpython-312.pyc
deleted file mode 100644
index cded39a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.etree.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.isoschematron.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.isoschematron.cpython-312.pyc
deleted file mode 100644
index 01cd9d9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.isoschematron.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.objectify.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.objectify.cpython-312.pyc
deleted file mode 100644
index 25e7ae5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lxml.objectify.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lz4.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lz4.cpython-312.pyc
deleted file mode 100644
index 58cb5c8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-lz4.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-magic.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-magic.cpython-312.pyc
deleted file mode 100644
index 2960833..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-magic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mako.codegen.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mako.codegen.cpython-312.pyc
deleted file mode 100644
index 65fa7fa..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mako.codegen.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mariadb.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mariadb.cpython-312.pyc
deleted file mode 100644
index 03a637a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mariadb.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-markdown.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-markdown.cpython-312.pyc
deleted file mode 100644
index b1bbd5d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-markdown.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mecab.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mecab.cpython-312.pyc
deleted file mode 100644
index a79f1db..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mecab.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-metpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-metpy.cpython-312.pyc
deleted file mode 100644
index c691a4b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-metpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-migrate.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-migrate.cpython-312.pyc
deleted file mode 100644
index 613832e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-migrate.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mimesis.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mimesis.cpython-312.pyc
deleted file mode 100644
index 8fb56a4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mimesis.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-minecraft_launcher_lib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-minecraft_launcher_lib.cpython-312.pyc
deleted file mode 100644
index 27a63ef..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-minecraft_launcher_lib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mistune.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mistune.cpython-312.pyc
deleted file mode 100644
index 843883b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mistune.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mnemonic.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mnemonic.cpython-312.pyc
deleted file mode 100644
index 9815d14..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mnemonic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-monai.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-monai.cpython-312.pyc
deleted file mode 100644
index 730947b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-monai.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-moviepy.audio.fx.all.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-moviepy.audio.fx.all.cpython-312.pyc
deleted file mode 100644
index 5acae4d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-moviepy.audio.fx.all.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-moviepy.video.fx.all.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-moviepy.video.fx.all.cpython-312.pyc
deleted file mode 100644
index aedca8b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-moviepy.video.fx.all.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mpl_toolkits.basemap.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mpl_toolkits.basemap.cpython-312.pyc
deleted file mode 100644
index 001cddc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-mpl_toolkits.basemap.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-msoffcrypto.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-msoffcrypto.cpython-312.pyc
deleted file mode 100644
index 5f7b37d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-msoffcrypto.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nacl.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nacl.cpython-312.pyc
deleted file mode 100644
index 51c67ee..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nacl.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-names.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-names.cpython-312.pyc
deleted file mode 100644
index cae36cf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-names.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nanite.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nanite.cpython-312.pyc
deleted file mode 100644
index 018a223..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nanite.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-narwhals.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-narwhals.cpython-312.pyc
deleted file mode 100644
index fe78582..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-narwhals.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbconvert.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbconvert.cpython-312.pyc
deleted file mode 100644
index 5851a03..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbconvert.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbdime.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbdime.cpython-312.pyc
deleted file mode 100644
index 6139de2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbdime.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbformat.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbformat.cpython-312.pyc
deleted file mode 100644
index 5d62001..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbformat.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbt.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbt.cpython-312.pyc
deleted file mode 100644
index 61a8310..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nbt.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ncclient.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ncclient.cpython-312.pyc
deleted file mode 100644
index 0952230..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ncclient.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-netCDF4.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-netCDF4.cpython-312.pyc
deleted file mode 100644
index 102e3bc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-netCDF4.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nicegui.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nicegui.cpython-312.pyc
deleted file mode 100644
index 7d9d101..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nicegui.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-niquests.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-niquests.cpython-312.pyc
deleted file mode 100644
index bf600bf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-niquests.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nltk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nltk.cpython-312.pyc
deleted file mode 100644
index 064f32b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nltk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nnpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nnpy.cpython-312.pyc
deleted file mode 100644
index 49adeb9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nnpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-notebook.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-notebook.cpython-312.pyc
deleted file mode 100644
index 02f7598..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-notebook.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numba.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numba.cpython-312.pyc
deleted file mode 100644
index 7c25f72..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numba.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numbers_parser.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numbers_parser.cpython-312.pyc
deleted file mode 100644
index 1b7de14..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numbers_parser.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numcodecs.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numcodecs.cpython-312.pyc
deleted file mode 100644
index a8b6343..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-numcodecs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cublas.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cublas.cpython-312.pyc
deleted file mode 100644
index e9a69a1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cublas.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_cupti.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_cupti.cpython-312.pyc
deleted file mode 100644
index 17a3f66..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_cupti.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_nvcc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_nvcc.cpython-312.pyc
deleted file mode 100644
index 90fbf3c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_nvcc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_nvrtc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_nvrtc.cpython-312.pyc
deleted file mode 100644
index 9a7c79b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_nvrtc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_runtime.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_runtime.cpython-312.pyc
deleted file mode 100644
index b7631f6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cuda_runtime.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cudnn.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cudnn.cpython-312.pyc
deleted file mode 100644
index 3c7a6dd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cudnn.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cufft.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cufft.cpython-312.pyc
deleted file mode 100644
index 9661060..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cufft.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.curand.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.curand.cpython-312.pyc
deleted file mode 100644
index 1c55737..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.curand.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cusolver.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cusolver.cpython-312.pyc
deleted file mode 100644
index 4a36d37..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cusolver.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cusparse.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cusparse.cpython-312.pyc
deleted file mode 100644
index 8fc1092..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.cusparse.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nccl.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nccl.cpython-312.pyc
deleted file mode 100644
index 3eaabcc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nccl.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nvjitlink.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nvjitlink.cpython-312.pyc
deleted file mode 100644
index d947028..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nvjitlink.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nvtx.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nvtx.cpython-312.pyc
deleted file mode 100644
index 966b9ec..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-nvidia.nvtx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-office365.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-office365.cpython-312.pyc
deleted file mode 100644
index 4882740..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-office365.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-onnxruntime.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-onnxruntime.cpython-312.pyc
deleted file mode 100644
index 367d43c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-onnxruntime.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-opencc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-opencc.cpython-312.pyc
deleted file mode 100644
index b9330c8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-opencc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-openpyxl.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-openpyxl.cpython-312.pyc
deleted file mode 100644
index e32eb4e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-openpyxl.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-opentelemetry.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-opentelemetry.cpython-312.pyc
deleted file mode 100644
index d13fd0b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-opentelemetry.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-orjson.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-orjson.cpython-312.pyc
deleted file mode 100644
index 42cc086..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-orjson.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-osgeo.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-osgeo.cpython-312.pyc
deleted file mode 100644
index 7c3e461..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-osgeo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pandas_flavor.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pandas_flavor.cpython-312.pyc
deleted file mode 100644
index cfab310..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pandas_flavor.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-panel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-panel.cpython-312.pyc
deleted file mode 100644
index d74d56b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-panel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-parsedatetime.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-parsedatetime.cpython-312.pyc
deleted file mode 100644
index 87da605..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-parsedatetime.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-parso.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-parso.cpython-312.pyc
deleted file mode 100644
index 08e090e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-parso.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-passlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-passlib.cpython-312.pyc
deleted file mode 100644
index 7dc604b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-passlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-paste.exceptions.reporter.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-paste.exceptions.reporter.cpython-312.pyc
deleted file mode 100644
index 37c0086..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-paste.exceptions.reporter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-patoolib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-patoolib.cpython-312.pyc
deleted file mode 100644
index f42c5eb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-patoolib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-patsy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-patsy.cpython-312.pyc
deleted file mode 100644
index e6e1c85..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-patsy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pdfminer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pdfminer.cpython-312.pyc
deleted file mode 100644
index a9a7f4b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pdfminer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pendulum.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pendulum.cpython-312.pyc
deleted file mode 100644
index 4ff1132..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pendulum.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-phonenumbers.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-phonenumbers.cpython-312.pyc
deleted file mode 100644
index 1425208..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-phonenumbers.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pingouin.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pingouin.cpython-312.pyc
deleted file mode 100644
index 81016b3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pingouin.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pint.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pint.cpython-312.pyc
deleted file mode 100644
index 55869d4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pint.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pinyin.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pinyin.cpython-312.pyc
deleted file mode 100644
index 79fa1f8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pinyin.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-platformdirs.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-platformdirs.cpython-312.pyc
deleted file mode 100644
index 320749a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-platformdirs.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-plotly.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-plotly.cpython-312.pyc
deleted file mode 100644
index 1364d43..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-plotly.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pointcept.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pointcept.cpython-312.pyc
deleted file mode 100644
index 2c60aff..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pointcept.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pptx.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pptx.cpython-312.pyc
deleted file mode 100644
index dfdebad..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pptx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-prettytable.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-prettytable.cpython-312.pyc
deleted file mode 100644
index a67defc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-prettytable.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psutil.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psutil.cpython-312.pyc
deleted file mode 100644
index 360a8e0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psutil.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psychopy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psychopy.cpython-312.pyc
deleted file mode 100644
index dd9c6a1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psychopy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psycopg2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psycopg2.cpython-312.pyc
deleted file mode 100644
index 5269788..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psycopg2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psycopg_binary.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psycopg_binary.cpython-312.pyc
deleted file mode 100644
index 7505c72..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-psycopg_binary.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-publicsuffix2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-publicsuffix2.cpython-312.pyc
deleted file mode 100644
index f6a1549..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-publicsuffix2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pubsub.core.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pubsub.core.cpython-312.pyc
deleted file mode 100644
index eb613af..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pubsub.core.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-puremagic.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-puremagic.cpython-312.pyc
deleted file mode 100644
index ec44e87..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-puremagic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-py.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-py.cpython-312.pyc
deleted file mode 100644
index 03895db..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-py.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyarrow.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyarrow.cpython-312.pyc
deleted file mode 100644
index bd870ed..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyarrow.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycountry.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycountry.cpython-312.pyc
deleted file mode 100644
index 77fda6c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycountry.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycparser.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycparser.cpython-312.pyc
deleted file mode 100644
index bcb086c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycparser.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycrfsuite.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycrfsuite.cpython-312.pyc
deleted file mode 100644
index e5f5e7c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pycrfsuite.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydantic.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydantic.cpython-312.pyc
deleted file mode 100644
index f1b9260..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydantic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydicom.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydicom.cpython-312.pyc
deleted file mode 100644
index 9bd1e54..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydicom.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydivert.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydivert.cpython-312.pyc
deleted file mode 100644
index aa704bf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pydivert.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyecharts.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyecharts.cpython-312.pyc
deleted file mode 100644
index 361632e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyecharts.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-io.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-io.cpython-312.pyc
deleted file mode 100644
index 68f96cd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-io.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-ods.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-ods.cpython-312.pyc
deleted file mode 100644
index 9c815e4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-ods.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-ods3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-ods3.cpython-312.pyc
deleted file mode 100644
index 5026b76..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-ods3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-odsr.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-odsr.cpython-312.pyc
deleted file mode 100644
index 58b9bd9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-odsr.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xls.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xls.cpython-312.pyc
deleted file mode 100644
index 87979bf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xls.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xlsx.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xlsx.cpython-312.pyc
deleted file mode 100644
index adc49bd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xlsx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xlsxw.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xlsxw.cpython-312.pyc
deleted file mode 100644
index 1d06452..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel-xlsxw.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel.cpython-312.pyc
deleted file mode 100644
index ecc1238..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_io.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_io.cpython-312.pyc
deleted file mode 100644
index c5906d5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_io.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_ods.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_ods.cpython-312.pyc
deleted file mode 100644
index b4fd5c2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_ods.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_ods3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_ods3.cpython-312.pyc
deleted file mode 100644
index ba0391e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_ods3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_odsr.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_odsr.cpython-312.pyc
deleted file mode 100644
index 9aab0c8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_odsr.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xls.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xls.cpython-312.pyc
deleted file mode 100644
index 634ad84..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xls.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xlsx.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xlsx.cpython-312.pyc
deleted file mode 100644
index 7e7fb6b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xlsx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xlsxw.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xlsxw.cpython-312.pyc
deleted file mode 100644
index 5d0a781..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcel_xlsxw.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcelerate.Writer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcelerate.Writer.cpython-312.pyc
deleted file mode 100644
index 97f0aba..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyexcelerate.Writer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pygraphviz.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pygraphviz.cpython-312.pyc
deleted file mode 100644
index 556cfae..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pygraphviz.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pygwalker.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pygwalker.cpython-312.pyc
deleted file mode 100644
index b0d3c03..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pygwalker.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylibmagic.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylibmagic.cpython-312.pyc
deleted file mode 100644
index adf5e52..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylibmagic.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylint.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylint.cpython-312.pyc
deleted file mode 100644
index 558d561..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylint.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylsl.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylsl.cpython-312.pyc
deleted file mode 100644
index 7fd9704..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pylsl.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymediainfo.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymediainfo.cpython-312.pyc
deleted file mode 100644
index 13757f5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymediainfo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymeshlab.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymeshlab.cpython-312.pyc
deleted file mode 100644
index f207d09..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymeshlab.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymorphy3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymorphy3.cpython-312.pyc
deleted file mode 100644
index e66db70..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymorphy3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymssql.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymssql.cpython-312.pyc
deleted file mode 100644
index 698727c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pymssql.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pynng.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pynng.cpython-312.pyc
deleted file mode 100644
index c7ad7ad..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pynng.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pynput.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pynput.cpython-312.pyc
deleted file mode 100644
index d261043..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pynput.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyodbc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyodbc.cpython-312.pyc
deleted file mode 100644
index 429051f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyodbc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyopencl.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyopencl.cpython-312.pyc
deleted file mode 100644
index c74ffc4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyopencl.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypdfium2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypdfium2.cpython-312.pyc
deleted file mode 100644
index 5fffb83..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypdfium2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypdfium2_raw.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypdfium2_raw.cpython-312.pyc
deleted file mode 100644
index d845cc7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypdfium2_raw.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypemicro.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypemicro.cpython-312.pyc
deleted file mode 100644
index 8d2a81c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypemicro.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyphen.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyphen.cpython-312.pyc
deleted file mode 100644
index c4dbbe9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyphen.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyppeteer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyppeteer.cpython-312.pyc
deleted file mode 100644
index 775d163..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyppeteer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyproj.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyproj.cpython-312.pyc
deleted file mode 100644
index 64f0fc1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyproj.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypsexec.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypsexec.cpython-312.pyc
deleted file mode 100644
index 80e5458..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypsexec.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypylon.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypylon.cpython-312.pyc
deleted file mode 100644
index d002c99..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pypylon.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyqtgraph.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyqtgraph.cpython-312.pyc
deleted file mode 100644
index 9b8e4ba..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyqtgraph.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyshark.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyshark.cpython-312.pyc
deleted file mode 100644
index a154666..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyshark.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pysnmp.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pysnmp.cpython-312.pyc
deleted file mode 100644
index e9816e4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pysnmp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pystray.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pystray.cpython-312.pyc
deleted file mode 100644
index 34c3bf3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pystray.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pytest.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pytest.cpython-312.pyc
deleted file mode 100644
index 37215e5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pytest.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pythainlp.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pythainlp.cpython-312.pyc
deleted file mode 100644
index 31aa835..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pythainlp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pythoncom.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pythoncom.cpython-312.pyc
deleted file mode 100644
index f20a7a2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pythoncom.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pytokens.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pytokens.cpython-312.pyc
deleted file mode 100644
index 2c66f8e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pytokens.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyttsx.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyttsx.cpython-312.pyc
deleted file mode 100644
index a5fb8d2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyttsx.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyttsx3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyttsx3.cpython-312.pyc
deleted file mode 100644
index d832f79..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyttsx3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyviz_comms.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyviz_comms.cpython-312.pyc
deleted file mode 100644
index 51a3930..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyviz_comms.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyvjoy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyvjoy.cpython-312.pyc
deleted file mode 100644
index 5824a27..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pyvjoy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pywintypes.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pywintypes.cpython-312.pyc
deleted file mode 100644
index 619c8ad..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pywintypes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pywt.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pywt.cpython-312.pyc
deleted file mode 100644
index b037219..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-pywt.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-qtmodern.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-qtmodern.cpython-312.pyc
deleted file mode 100644
index 64b00ed..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-qtmodern.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-radicale.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-radicale.cpython-312.pyc
deleted file mode 100644
index 637fbd0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-radicale.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-raven.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-raven.cpython-312.pyc
deleted file mode 100644
index e69fbaf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-raven.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rawpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rawpy.cpython-312.pyc
deleted file mode 100644
index f6d4ef9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rawpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rdflib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rdflib.cpython-312.pyc
deleted file mode 100644
index 4dfa36b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rdflib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-redmine.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-redmine.cpython-312.pyc
deleted file mode 100644
index 3b7d9a1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-redmine.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-regex.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-regex.cpython-312.pyc
deleted file mode 100644
index a571bbd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-regex.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-reportlab.lib.utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-reportlab.lib.utils.cpython-312.pyc
deleted file mode 100644
index 345b050..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-reportlab.lib.utils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-reportlab.pdfbase._fontdata.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-reportlab.pdfbase._fontdata.cpython-312.pyc
deleted file mode 100644
index 17a6fca..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-reportlab.pdfbase._fontdata.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-resampy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-resampy.cpython-312.pyc
deleted file mode 100644
index 7072aa5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-resampy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rich.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rich.cpython-312.pyc
deleted file mode 100644
index 359a697..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rich.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rlp.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rlp.cpython-312.pyc
deleted file mode 100644
index 363c9da..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rlp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rpy2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rpy2.cpython-312.pyc
deleted file mode 100644
index 932459a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rpy2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rtree.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rtree.cpython-312.pyc
deleted file mode 100644
index 869ea09..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rtree.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ruamel.yaml.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ruamel.yaml.cpython-312.pyc
deleted file mode 100644
index e0fcb7f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ruamel.yaml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rubicon.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rubicon.cpython-312.pyc
deleted file mode 100644
index 06362b4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-rubicon.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sacremoses.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sacremoses.cpython-312.pyc
deleted file mode 100644
index 5047e1c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sacremoses.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sam2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sam2.cpython-312.pyc
deleted file mode 100644
index e4d851d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sam2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-saml2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-saml2.cpython-312.pyc
deleted file mode 100644
index 86fa30e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-saml2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-schwifty.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-schwifty.cpython-312.pyc
deleted file mode 100644
index 0da9748..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-schwifty.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-seedir.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-seedir.cpython-312.pyc
deleted file mode 100644
index 9483ec0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-seedir.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-selectolax.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-selectolax.cpython-312.pyc
deleted file mode 100644
index 5a80776..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-selectolax.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-selenium.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-selenium.cpython-312.pyc
deleted file mode 100644
index 30cacb8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-selenium.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sentry_sdk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sentry_sdk.cpython-312.pyc
deleted file mode 100644
index ec2d7b6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sentry_sdk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-setuptools_scm.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-setuptools_scm.cpython-312.pyc
deleted file mode 100644
index 446e867..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-setuptools_scm.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-shapely.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-shapely.cpython-312.pyc
deleted file mode 100644
index 13f69db..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-shapely.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-shotgun_api3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-shotgun_api3.cpython-312.pyc
deleted file mode 100644
index 822e9f2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-shotgun_api3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-simplemma.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-simplemma.cpython-312.pyc
deleted file mode 100644
index f54db91..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-simplemma.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.color.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.color.cpython-312.pyc
deleted file mode 100644
index 3d19e9c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.color.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.cpython-312.pyc
deleted file mode 100644
index 64a2c56..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.data.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.data.cpython-312.pyc
deleted file mode 100644
index 84cd0cd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.data.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.draw.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.draw.cpython-312.pyc
deleted file mode 100644
index 11ed96f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.draw.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.exposure.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.exposure.cpython-312.pyc
deleted file mode 100644
index 6405531..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.exposure.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.feature.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.feature.cpython-312.pyc
deleted file mode 100644
index 97631b8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.feature.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.filters.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.filters.cpython-312.pyc
deleted file mode 100644
index 78b2c8e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.filters.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.future.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.future.cpython-312.pyc
deleted file mode 100644
index be3636f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.future.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.graph.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.graph.cpython-312.pyc
deleted file mode 100644
index 00d1fa8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.graph.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.io.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.io.cpython-312.pyc
deleted file mode 100644
index 2f54a5e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.io.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.measure.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.measure.cpython-312.pyc
deleted file mode 100644
index fbda603..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.measure.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.metrics.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.metrics.cpython-312.pyc
deleted file mode 100644
index b98e31d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.metrics.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.morphology.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.morphology.cpython-312.pyc
deleted file mode 100644
index cf15d40..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.morphology.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.registration.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.registration.cpython-312.pyc
deleted file mode 100644
index 6899f83..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.registration.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.restoration.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.restoration.cpython-312.pyc
deleted file mode 100644
index df235dd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.restoration.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.segmentation.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.segmentation.cpython-312.pyc
deleted file mode 100644
index 48e4a2b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.segmentation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.transform.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.transform.cpython-312.pyc
deleted file mode 100644
index d8af41d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skimage.transform.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.cluster.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.cluster.cpython-312.pyc
deleted file mode 100644
index e44a331..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.cluster.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.cpython-312.pyc
deleted file mode 100644
index b6d46d9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.cupy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.cupy.cpython-312.pyc
deleted file mode 100644
index c83c162..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.cupy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.dask.array.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.dask.array.cpython-312.pyc
deleted file mode 100644
index e5bdcda..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.dask.array.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.numpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.numpy.cpython-312.pyc
deleted file mode 100644
index a5e96cd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.numpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.torch.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.torch.cpython-312.pyc
deleted file mode 100644
index 70b6649..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.externals.array_api_compat.torch.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.linear_model.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.linear_model.cpython-312.pyc
deleted file mode 100644
index a693fbd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.linear_model.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.cluster.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.cluster.cpython-312.pyc
deleted file mode 100644
index e622612..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.cluster.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.cpython-312.pyc
deleted file mode 100644
index 72e58a4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.pairwise.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.pairwise.cpython-312.pyc
deleted file mode 100644
index 1f7513c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.metrics.pairwise.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.neighbors.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.neighbors.cpython-312.pyc
deleted file mode 100644
index 01af51a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.neighbors.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.tree.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.tree.cpython-312.pyc
deleted file mode 100644
index 13565db..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.tree.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.utils.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.utils.cpython-312.pyc
deleted file mode 100644
index f3160da..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sklearn.utils.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skyfield.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skyfield.cpython-312.pyc
deleted file mode 100644
index 66c60d6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-skyfield.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-slixmpp.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-slixmpp.cpython-312.pyc
deleted file mode 100644
index 1064f57..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-slixmpp.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sound_lib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sound_lib.cpython-312.pyc
deleted file mode 100644
index 34d5946..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sound_lib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sounddevice.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sounddevice.cpython-312.pyc
deleted file mode 100644
index d0c00bc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sounddevice.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-soundfile.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-soundfile.cpython-312.pyc
deleted file mode 100644
index b5028ff..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-soundfile.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spacy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spacy.cpython-312.pyc
deleted file mode 100644
index 447f0b8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spacy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-speech_recognition.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-speech_recognition.cpython-312.pyc
deleted file mode 100644
index 1dffcfd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-speech_recognition.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spiceypy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spiceypy.cpython-312.pyc
deleted file mode 100644
index 48aea17..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spiceypy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spnego.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spnego.cpython-312.pyc
deleted file mode 100644
index 256cb15..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-spnego.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-srsly.msgpack._packer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-srsly.msgpack._packer.cpython-312.pyc
deleted file mode 100644
index c6c0bc1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-srsly.msgpack._packer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sspilib.raw.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sspilib.raw.cpython-312.pyc
deleted file mode 100644
index a58bd74..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sspilib.raw.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-statsmodels.tsa.statespace.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-statsmodels.tsa.statespace.cpython-312.pyc
deleted file mode 100644
index b4151d0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-statsmodels.tsa.statespace.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-stdnum.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-stdnum.cpython-312.pyc
deleted file mode 100644
index 106b960..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-stdnum.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-storm.database.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-storm.database.cpython-312.pyc
deleted file mode 100644
index 9e30da1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-storm.database.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sudachipy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sudachipy.cpython-312.pyc
deleted file mode 100644
index ded5911..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sudachipy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sunpy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sunpy.cpython-312.pyc
deleted file mode 100644
index be4941f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sunpy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sv_ttk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sv_ttk.cpython-312.pyc
deleted file mode 100644
index a8c5e1e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-sv_ttk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-swagger_spec_validator.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-swagger_spec_validator.cpython-312.pyc
deleted file mode 100644
index d42b8cb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-swagger_spec_validator.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tableauhyperapi.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tableauhyperapi.cpython-312.pyc
deleted file mode 100644
index d32c480..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tableauhyperapi.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tables.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tables.cpython-312.pyc
deleted file mode 100644
index f2eabac..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tables.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tcod.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tcod.cpython-312.pyc
deleted file mode 100644
index f995f6f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tcod.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tensorflow.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tensorflow.cpython-312.pyc
deleted file mode 100644
index 6fd16aa..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tensorflow.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-text_unidecode.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-text_unidecode.cpython-312.pyc
deleted file mode 100644
index 79c37ff..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-text_unidecode.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-textdistance.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-textdistance.cpython-312.pyc
deleted file mode 100644
index 47adfd6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-textdistance.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-thinc.backends.numpy_ops.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-thinc.backends.numpy_ops.cpython-312.pyc
deleted file mode 100644
index dac3ac6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-thinc.backends.numpy_ops.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-thinc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-thinc.cpython-312.pyc
deleted file mode 100644
index 78da787..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-thinc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-timezonefinder.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-timezonefinder.cpython-312.pyc
deleted file mode 100644
index 3feb8d9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-timezonefinder.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-timm.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-timm.cpython-312.pyc
deleted file mode 100644
index 8555583..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-timm.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tinycss2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tinycss2.cpython-312.pyc
deleted file mode 100644
index e864e3d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tinycss2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterdnd2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterdnd2.cpython-312.pyc
deleted file mode 100644
index 6c07f0b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterdnd2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb.cpython-312.pyc
deleted file mode 100644
index b631b44..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb_tkhtml.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb_tkhtml.cpython-312.pyc
deleted file mode 100644
index 8696eee..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb_tkhtml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb_tkhtml_extras.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb_tkhtml_extras.cpython-312.pyc
deleted file mode 100644
index 3ff336e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tkinterweb_tkhtml_extras.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga.cpython-312.pyc
deleted file mode 100644
index fcbb1fa..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_cocoa.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_cocoa.cpython-312.pyc
deleted file mode 100644
index a371c86..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_cocoa.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_gtk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_gtk.cpython-312.pyc
deleted file mode 100644
index 723c243..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_gtk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_winforms.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_winforms.cpython-312.pyc
deleted file mode 100644
index 9013285..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-toga_winforms.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torch.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torch.cpython-312.pyc
deleted file mode 100644
index ceb9aba..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torch.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchao.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchao.cpython-312.pyc
deleted file mode 100644
index b98abfb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchao.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchaudio.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchaudio.cpython-312.pyc
deleted file mode 100644
index a30f81e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchaudio.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchtext.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchtext.cpython-312.pyc
deleted file mode 100644
index b4507ff..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchtext.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchvision.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchvision.cpython-312.pyc
deleted file mode 100644
index 637ff49..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchvision.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchvision.io.image.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchvision.io.image.cpython-312.pyc
deleted file mode 100644
index 631f9a4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-torchvision.io.image.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame.cpython-312.pyc
deleted file mode 100644
index 753a4de..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_client.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_client.cpython-312.pyc
deleted file mode 100644
index 10eb753..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_client.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_code.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_code.cpython-312.pyc
deleted file mode 100644
index e696d8a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_code.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_components.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_components.cpython-312.pyc
deleted file mode 100644
index 5fb6f29..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_components.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_datagrid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_datagrid.cpython-312.pyc
deleted file mode 100644
index ce2d091..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_datagrid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_deckgl.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_deckgl.cpython-312.pyc
deleted file mode 100644
index 14227a6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_deckgl.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_formkit.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_formkit.cpython-312.pyc
deleted file mode 100644
index baae4b2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_formkit.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_grid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_grid.cpython-312.pyc
deleted file mode 100644
index 27e6c6a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_grid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_iframe.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_iframe.cpython-312.pyc
deleted file mode 100644
index 515fb4e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_iframe.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_keycloak.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_keycloak.cpython-312.pyc
deleted file mode 100644
index 569b6b3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_keycloak.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_leaflet.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_leaflet.cpython-312.pyc
deleted file mode 100644
index 03166c8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_leaflet.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_markdown.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_markdown.cpython-312.pyc
deleted file mode 100644
index 72237a6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_markdown.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_matplotlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_matplotlib.cpython-312.pyc
deleted file mode 100644
index a3a0f04..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_matplotlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_mesh_streamer.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_mesh_streamer.cpython-312.pyc
deleted file mode 100644
index d603d54..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_mesh_streamer.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_plotly.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_plotly.cpython-312.pyc
deleted file mode 100644
index 737722b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_plotly.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_pvui.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_pvui.cpython-312.pyc
deleted file mode 100644
index fa8976a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_pvui.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_quasar.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_quasar.cpython-312.pyc
deleted file mode 100644
index cf187fb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_quasar.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_rca.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_rca.cpython-312.pyc
deleted file mode 100644
index e1271af..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_rca.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_router.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_router.cpython-312.pyc
deleted file mode 100644
index 0fd66d3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_router.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_simput.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_simput.cpython-312.pyc
deleted file mode 100644
index 8a6d110..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_simput.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_tauri.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_tauri.cpython-312.pyc
deleted file mode 100644
index a2e6201..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_tauri.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_tweakpane.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_tweakpane.cpython-312.pyc
deleted file mode 100644
index c1a79b0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_tweakpane.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vega.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vega.cpython-312.pyc
deleted file mode 100644
index f0f0c43..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vega.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtk.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtk.cpython-312.pyc
deleted file mode 100644
index c96fb2f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtk.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtk3d.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtk3d.cpython-312.pyc
deleted file mode 100644
index b652297..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtk3d.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtklocal.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtklocal.cpython-312.pyc
deleted file mode 100644
index f672331..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vtklocal.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vuetify.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vuetify.cpython-312.pyc
deleted file mode 100644
index 52482ad..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_vuetify.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_xterm.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_xterm.cpython-312.pyc
deleted file mode 100644
index 451bea2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trame_xterm.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-transformers.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-transformers.cpython-312.pyc
deleted file mode 100644
index 3234507..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-transformers.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-travertino.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-travertino.cpython-312.pyc
deleted file mode 100644
index 03578ae..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-travertino.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trimesh.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trimesh.cpython-312.pyc
deleted file mode 100644
index 23b2ec9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-trimesh.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-triton.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-triton.cpython-312.pyc
deleted file mode 100644
index 59f07e9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-triton.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ttkthemes.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ttkthemes.cpython-312.pyc
deleted file mode 100644
index e090990..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ttkthemes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ttkwidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ttkwidgets.cpython-312.pyc
deleted file mode 100644
index 5487018..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ttkwidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tzdata.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tzdata.cpython-312.pyc
deleted file mode 100644
index 93ce432..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tzdata.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tzwhere.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tzwhere.cpython-312.pyc
deleted file mode 100644
index b967f26..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-tzwhere.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-u1db.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-u1db.cpython-312.pyc
deleted file mode 100644
index 78e24bb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-u1db.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ultralytics.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ultralytics.cpython-312.pyc
deleted file mode 100644
index 10d9140..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-ultralytics.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-umap.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-umap.cpython-312.pyc
deleted file mode 100644
index ba0cf31..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-umap.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-unidecode.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-unidecode.cpython-312.pyc
deleted file mode 100644
index 802025a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-unidecode.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uniseg.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uniseg.cpython-312.pyc
deleted file mode 100644
index fe58138..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uniseg.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-urllib3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-urllib3.cpython-312.pyc
deleted file mode 100644
index 15adcb6..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-urllib3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-urllib3_future.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-urllib3_future.cpython-312.pyc
deleted file mode 100644
index 4718900..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-urllib3_future.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-usb.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-usb.cpython-312.pyc
deleted file mode 100644
index b1a98c1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-usb.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uuid6.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uuid6.cpython-312.pyc
deleted file mode 100644
index b46f193..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uuid6.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uvicorn.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uvicorn.cpython-312.pyc
deleted file mode 100644
index 74cf840..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uvicorn.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uvloop.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uvloop.cpython-312.pyc
deleted file mode 100644
index 139b98a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-uvloop.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vaderSentiment.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vaderSentiment.cpython-312.pyc
deleted file mode 100644
index c061885..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vaderSentiment.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmCore.cpython-312.pyc
deleted file mode 100644
index 757e8f8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmDataModel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmDataModel.cpython-312.pyc
deleted file mode 100644
index d12d816..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmDataModel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmFilters.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmFilters.cpython-312.pyc
deleted file mode 100644
index a5384bb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkAcceleratorsVTKmFilters.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkChartsCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkChartsCore.cpython-312.pyc
deleted file mode 100644
index 4de67a1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkChartsCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonColor.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonColor.cpython-312.pyc
deleted file mode 100644
index b8a5e02..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonColor.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonComputationalGeometry.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonComputationalGeometry.cpython-312.pyc
deleted file mode 100644
index a2b4a53..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonComputationalGeometry.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonDataModel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonDataModel.cpython-312.pyc
deleted file mode 100644
index 123c10d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonDataModel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonExecutionModel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonExecutionModel.cpython-312.pyc
deleted file mode 100644
index 637bd61..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonExecutionModel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonMath.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonMath.cpython-312.pyc
deleted file mode 100644
index 20da1fb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonMath.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonMisc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonMisc.cpython-312.pyc
deleted file mode 100644
index c5d47bb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonMisc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonPython.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonPython.cpython-312.pyc
deleted file mode 100644
index 4fbfa6e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonPython.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonSystem.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonSystem.cpython-312.pyc
deleted file mode 100644
index 28d5142..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonSystem.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonTransforms.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonTransforms.cpython-312.pyc
deleted file mode 100644
index c601b93..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkCommonTransforms.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkDomainsChemistry.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkDomainsChemistry.cpython-312.pyc
deleted file mode 100644
index 3d47f37..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkDomainsChemistry.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkDomainsChemistryOpenGL2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkDomainsChemistryOpenGL2.cpython-312.pyc
deleted file mode 100644
index 0f6d558..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkDomainsChemistryOpenGL2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersAMR.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersAMR.cpython-312.pyc
deleted file mode 100644
index 8c8c11c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersAMR.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersCellGrid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersCellGrid.cpython-312.pyc
deleted file mode 100644
index 54287d5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersCellGrid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersCore.cpython-312.pyc
deleted file mode 100644
index e83979c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersExtraction.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersExtraction.cpython-312.pyc
deleted file mode 100644
index d69ddba..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersExtraction.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersFlowPaths.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersFlowPaths.cpython-312.pyc
deleted file mode 100644
index b9ad0ad..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersFlowPaths.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeneral.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeneral.cpython-312.pyc
deleted file mode 100644
index bb9a8dc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeneral.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeneric.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeneric.cpython-312.pyc
deleted file mode 100644
index 5e6b4cb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeneric.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeometry.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeometry.cpython-312.pyc
deleted file mode 100644
index 71ce449..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeometry.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeometryPreview.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeometryPreview.cpython-312.pyc
deleted file mode 100644
index e29b6bd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersGeometryPreview.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersHybrid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersHybrid.cpython-312.pyc
deleted file mode 100644
index d300393..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersHybrid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersHyperTree.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersHyperTree.cpython-312.pyc
deleted file mode 100644
index 4b1d71e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersHyperTree.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersImaging.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersImaging.cpython-312.pyc
deleted file mode 100644
index ae9a76c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersImaging.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersModeling.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersModeling.cpython-312.pyc
deleted file mode 100644
index 5639053..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersModeling.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallel.cpython-312.pyc
deleted file mode 100644
index c3842f2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelDIY2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelDIY2.cpython-312.pyc
deleted file mode 100644
index bdec8ba..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelDIY2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelImaging.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelImaging.cpython-312.pyc
deleted file mode 100644
index 204c2b4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelImaging.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelStatistics.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelStatistics.cpython-312.pyc
deleted file mode 100644
index e7b142a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersParallelStatistics.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersPoints.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersPoints.cpython-312.pyc
deleted file mode 100644
index a80d2be..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersPoints.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersProgrammable.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersProgrammable.cpython-312.pyc
deleted file mode 100644
index aa2c1a4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersProgrammable.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersPython.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersPython.cpython-312.pyc
deleted file mode 100644
index 3388686..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersPython.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersReduction.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersReduction.cpython-312.pyc
deleted file mode 100644
index 177f764..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersReduction.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSMP.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSMP.cpython-312.pyc
deleted file mode 100644
index 53778b4..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSMP.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSelection.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSelection.cpython-312.pyc
deleted file mode 100644
index 87edbf0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSelection.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSources.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSources.cpython-312.pyc
deleted file mode 100644
index e115990..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersSources.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersStatistics.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersStatistics.cpython-312.pyc
deleted file mode 100644
index 7c571e1..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersStatistics.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTemporal.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTemporal.cpython-312.pyc
deleted file mode 100644
index 484c95b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTemporal.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTensor.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTensor.cpython-312.pyc
deleted file mode 100644
index 29a70eb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTensor.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTexture.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTexture.cpython-312.pyc
deleted file mode 100644
index c63fc87..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTexture.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTopology.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTopology.cpython-312.pyc
deleted file mode 100644
index 788683e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersTopology.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersVerdict.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersVerdict.cpython-312.pyc
deleted file mode 100644
index 57969d0..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkFiltersVerdict.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkGeovisCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkGeovisCore.cpython-312.pyc
deleted file mode 100644
index ea950e8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkGeovisCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAMR.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAMR.cpython-312.pyc
deleted file mode 100644
index 04c4e9a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAMR.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAsynchronous.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAsynchronous.cpython-312.pyc
deleted file mode 100644
index 92d19f8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAsynchronous.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAvmesh.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAvmesh.cpython-312.pyc
deleted file mode 100644
index 1aec05e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOAvmesh.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCGNSReader.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCGNSReader.cpython-312.pyc
deleted file mode 100644
index accd7d3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCGNSReader.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCONVERGECFD.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCONVERGECFD.cpython-312.pyc
deleted file mode 100644
index e0b014c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCONVERGECFD.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCellGrid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCellGrid.cpython-312.pyc
deleted file mode 100644
index a81e216..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCellGrid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCesium3DTiles.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCesium3DTiles.cpython-312.pyc
deleted file mode 100644
index e12bc4d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCesium3DTiles.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOChemistry.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOChemistry.cpython-312.pyc
deleted file mode 100644
index bc333ee..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOChemistry.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCityGML.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCityGML.cpython-312.pyc
deleted file mode 100644
index d97b49b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCityGML.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCore.cpython-312.pyc
deleted file mode 100644
index 87127f3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOERF.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOERF.cpython-312.pyc
deleted file mode 100644
index 0ffdb52..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOERF.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOEnSight.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOEnSight.cpython-312.pyc
deleted file mode 100644
index b101c99..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOEnSight.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOEngys.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOEngys.cpython-312.pyc
deleted file mode 100644
index c1ec5d3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOEngys.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExodus.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExodus.cpython-312.pyc
deleted file mode 100644
index 189021a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExodus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExport.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExport.cpython-312.pyc
deleted file mode 100644
index 63e2a86..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExport.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExportGL2PS.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExportGL2PS.cpython-312.pyc
deleted file mode 100644
index 2de97ad..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExportGL2PS.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExportPDF.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExportPDF.cpython-312.pyc
deleted file mode 100644
index a2ed3fe..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOExportPDF.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOFDS.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOFDS.cpython-312.pyc
deleted file mode 100644
index f31a498..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOFDS.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOFLUENTCFF.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOFLUENTCFF.cpython-312.pyc
deleted file mode 100644
index c01f880..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOFLUENTCFF.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOGeoJSON.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOGeoJSON.cpython-312.pyc
deleted file mode 100644
index e9e501e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOGeoJSON.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOGeometry.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOGeometry.cpython-312.pyc
deleted file mode 100644
index 97de056..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOGeometry.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOH5Rage.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOH5Rage.cpython-312.pyc
deleted file mode 100644
index 6991f86..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOH5Rage.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOH5part.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOH5part.cpython-312.pyc
deleted file mode 100644
index 7b35185..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOH5part.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOHDF.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOHDF.cpython-312.pyc
deleted file mode 100644
index c7dd79d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOHDF.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOIOSS.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOIOSS.cpython-312.pyc
deleted file mode 100644
index 36202fe..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOIOSS.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOImage.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOImage.cpython-312.pyc
deleted file mode 100644
index e56f833..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOImage.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOImport.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOImport.cpython-312.pyc
deleted file mode 100644
index 4e784aa..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOImport.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOInfovis.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOInfovis.cpython-312.pyc
deleted file mode 100644
index a0f676a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOInfovis.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLANLX3D.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLANLX3D.cpython-312.pyc
deleted file mode 100644
index 95c2ead..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLANLX3D.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLSDyna.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLSDyna.cpython-312.pyc
deleted file mode 100644
index 1f424ac..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLSDyna.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLegacy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLegacy.cpython-312.pyc
deleted file mode 100644
index 44e142b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOLegacy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMINC.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMINC.cpython-312.pyc
deleted file mode 100644
index 9f1d80b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMINC.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMotionFX.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMotionFX.cpython-312.pyc
deleted file mode 100644
index 34bef7c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMotionFX.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMovie.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMovie.cpython-312.pyc
deleted file mode 100644
index baf295e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOMovie.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIONetCDF.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIONetCDF.cpython-312.pyc
deleted file mode 100644
index 7028fbf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIONetCDF.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOOMF.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOOMF.cpython-312.pyc
deleted file mode 100644
index dc2b993..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOOMF.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOOggTheora.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOOggTheora.cpython-312.pyc
deleted file mode 100644
index cef4d36..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOOggTheora.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOPIO.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOPIO.cpython-312.pyc
deleted file mode 100644
index ceaa7dd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOPIO.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOPLY.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOPLY.cpython-312.pyc
deleted file mode 100644
index 9335e92..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOPLY.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallel.cpython-312.pyc
deleted file mode 100644
index d023093..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelExodus.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelExodus.cpython-312.pyc
deleted file mode 100644
index 8458738..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelExodus.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelLSDyna.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelLSDyna.cpython-312.pyc
deleted file mode 100644
index 4459a29..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelLSDyna.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelXML.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelXML.cpython-312.pyc
deleted file mode 100644
index 393f6c9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOParallelXML.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOSQL.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOSQL.cpython-312.pyc
deleted file mode 100644
index e40a625..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOSQL.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOSegY.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOSegY.cpython-312.pyc
deleted file mode 100644
index 961131b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOSegY.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOTRUCHAS.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOTRUCHAS.cpython-312.pyc
deleted file mode 100644
index c1b0977..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOTRUCHAS.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOTecplotTable.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOTecplotTable.cpython-312.pyc
deleted file mode 100644
index 3c773f3..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOTecplotTable.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVPIC.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVPIC.cpython-312.pyc
deleted file mode 100644
index 187bd78..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVPIC.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVeraOut.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVeraOut.cpython-312.pyc
deleted file mode 100644
index f8bb677..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVeraOut.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVideo.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVideo.cpython-312.pyc
deleted file mode 100644
index 52b2652..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOVideo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXML.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXML.cpython-312.pyc
deleted file mode 100644
index 7c62b46..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXML.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXMLParser.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXMLParser.cpython-312.pyc
deleted file mode 100644
index 8dc313c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXMLParser.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXdmf2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXdmf2.cpython-312.pyc
deleted file mode 100644
index 97b5acb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkIOXdmf2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingColor.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingColor.cpython-312.pyc
deleted file mode 100644
index 57a8cf9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingColor.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingCore.cpython-312.pyc
deleted file mode 100644
index 5b12af8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingFourier.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingFourier.cpython-312.pyc
deleted file mode 100644
index 91970ff..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingFourier.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingGeneral.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingGeneral.cpython-312.pyc
deleted file mode 100644
index 782a028..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingGeneral.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingHybrid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingHybrid.cpython-312.pyc
deleted file mode 100644
index 925ceaf..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingHybrid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingMath.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingMath.cpython-312.pyc
deleted file mode 100644
index f2b0359..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingMath.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingMorphological.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingMorphological.cpython-312.pyc
deleted file mode 100644
index 8036dd5..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingMorphological.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingOpenGL2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingOpenGL2.cpython-312.pyc
deleted file mode 100644
index 2014d78..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingOpenGL2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingSources.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingSources.cpython-312.pyc
deleted file mode 100644
index 84fb16a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingSources.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingStatistics.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingStatistics.cpython-312.pyc
deleted file mode 100644
index 748231b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingStatistics.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingStencil.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingStencil.cpython-312.pyc
deleted file mode 100644
index a2124c7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkImagingStencil.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInfovisCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInfovisCore.cpython-312.pyc
deleted file mode 100644
index b83a020..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInfovisCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInfovisLayout.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInfovisLayout.cpython-312.pyc
deleted file mode 100644
index 487a91c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInfovisLayout.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionImage.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionImage.cpython-312.pyc
deleted file mode 100644
index ad6be47..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionImage.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionStyle.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionStyle.cpython-312.pyc
deleted file mode 100644
index b2ee0f7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionStyle.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionWidgets.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionWidgets.cpython-312.pyc
deleted file mode 100644
index a818977..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkInteractionWidgets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkParallelCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkParallelCore.cpython-312.pyc
deleted file mode 100644
index 6e6af26..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkParallelCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkPythonContext2D.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkPythonContext2D.cpython-312.pyc
deleted file mode 100644
index 01d3c11..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkPythonContext2D.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingAnnotation.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingAnnotation.cpython-312.pyc
deleted file mode 100644
index f9dd265..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingAnnotation.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingCellGrid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingCellGrid.cpython-312.pyc
deleted file mode 100644
index 56cb487..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingCellGrid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingContext2D.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingContext2D.cpython-312.pyc
deleted file mode 100644
index d09d004..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingContext2D.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingContextOpenGL2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingContextOpenGL2.cpython-312.pyc
deleted file mode 100644
index 9b46220..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingContextOpenGL2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingCore.cpython-312.pyc
deleted file mode 100644
index f68b75b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingExternal.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingExternal.cpython-312.pyc
deleted file mode 100644
index 46e5845..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingExternal.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingFreeType.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingFreeType.cpython-312.pyc
deleted file mode 100644
index 5091ec8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingFreeType.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingGL2PSOpenGL2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingGL2PSOpenGL2.cpython-312.pyc
deleted file mode 100644
index dabb38b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingGL2PSOpenGL2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingGridAxes.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingGridAxes.cpython-312.pyc
deleted file mode 100644
index fb3844d..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingGridAxes.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingHyperTreeGrid.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingHyperTreeGrid.cpython-312.pyc
deleted file mode 100644
index a1a4fbc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingHyperTreeGrid.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingImage.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingImage.cpython-312.pyc
deleted file mode 100644
index 6fc73bd..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingImage.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLICOpenGL2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLICOpenGL2.cpython-312.pyc
deleted file mode 100644
index 4ab1da2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLICOpenGL2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLOD.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLOD.cpython-312.pyc
deleted file mode 100644
index fb3d5d9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLOD.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLabel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLabel.cpython-312.pyc
deleted file mode 100644
index 976cd64..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingLabel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingMatplotlib.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingMatplotlib.cpython-312.pyc
deleted file mode 100644
index 7b0f0f2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingMatplotlib.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingOpenGL2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingOpenGL2.cpython-312.pyc
deleted file mode 100644
index 6bbccae..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingOpenGL2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingParallel.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingParallel.cpython-312.pyc
deleted file mode 100644
index a9345a9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingParallel.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingSceneGraph.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingSceneGraph.cpython-312.pyc
deleted file mode 100644
index 121e30b..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingSceneGraph.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingUI.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingUI.cpython-312.pyc
deleted file mode 100644
index 119459f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingUI.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVR.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVR.cpython-312.pyc
deleted file mode 100644
index 0613099..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVR.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVRModels.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVRModels.cpython-312.pyc
deleted file mode 100644
index 7de3113..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVRModels.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolume.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolume.cpython-312.pyc
deleted file mode 100644
index 87482a9..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolume.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolumeAMR.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolumeAMR.cpython-312.pyc
deleted file mode 100644
index a0676ca..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolumeAMR.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolumeOpenGL2.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolumeOpenGL2.cpython-312.pyc
deleted file mode 100644
index fce2bbe..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVolumeOpenGL2.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVtkJS.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVtkJS.cpython-312.pyc
deleted file mode 100644
index 79db393..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkRenderingVtkJS.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkSerializationManager.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkSerializationManager.cpython-312.pyc
deleted file mode 100644
index e90f42a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkSerializationManager.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkTestingRendering.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkTestingRendering.cpython-312.pyc
deleted file mode 100644
index 52af4bb..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkTestingRendering.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkTestingSerialization.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkTestingSerialization.cpython-312.pyc
deleted file mode 100644
index a12bc8f..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkTestingSerialization.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsContext2D.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsContext2D.cpython-312.pyc
deleted file mode 100644
index 1eb3b8a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsContext2D.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsCore.cpython-312.pyc
deleted file mode 100644
index 8fd0a13..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsInfovis.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsInfovis.cpython-312.pyc
deleted file mode 100644
index ae561b8..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkViewsInfovis.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkWebCore.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkWebCore.cpython-312.pyc
deleted file mode 100644
index 1cd8a7e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkWebCore.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkWebGLExporter.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkWebGLExporter.cpython-312.pyc
deleted file mode 100644
index 7a11eaa..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkmodules.vtkWebGLExporter.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkpython.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkpython.cpython-312.pyc
deleted file mode 100644
index 1329791..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-vtkpython.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wavefile.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wavefile.cpython-312.pyc
deleted file mode 100644
index c672e82..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wavefile.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-weasyprint.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-weasyprint.cpython-312.pyc
deleted file mode 100644
index 5842ffe..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-weasyprint.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-web3.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-web3.cpython-312.pyc
deleted file mode 100644
index 93cac36..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-web3.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webassets.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webassets.cpython-312.pyc
deleted file mode 100644
index 2a848ce..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webassets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webrtcvad.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webrtcvad.cpython-312.pyc
deleted file mode 100644
index 24a175a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webrtcvad.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-websockets.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-websockets.cpython-312.pyc
deleted file mode 100644
index e6f67a7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-websockets.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webview.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webview.cpython-312.pyc
deleted file mode 100644
index 02b3c13..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-webview.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-win32com.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-win32com.cpython-312.pyc
deleted file mode 100644
index 6533ddc..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-win32com.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wordcloud.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wordcloud.cpython-312.pyc
deleted file mode 100644
index 45bf216..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wordcloud.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-workflow.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-workflow.cpython-312.pyc
deleted file mode 100644
index e1c3f70..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-workflow.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.lib.activex.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.lib.activex.cpython-312.pyc
deleted file mode 100644
index fb1826c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.lib.activex.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.lib.pubsub.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.lib.pubsub.cpython-312.pyc
deleted file mode 100644
index da32764..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.lib.pubsub.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.xrc.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.xrc.cpython-312.pyc
deleted file mode 100644
index 88f8761..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-wx.xrc.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xarray.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xarray.cpython-312.pyc
deleted file mode 100644
index f4450ef..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xarray.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xml.dom.html.HTMLDocument.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xml.dom.html.HTMLDocument.cpython-312.pyc
deleted file mode 100644
index 0d5d63a..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xml.dom.html.HTMLDocument.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xml.sax.saxexts.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xml.sax.saxexts.cpython-312.pyc
deleted file mode 100644
index 41d04b2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xml.sax.saxexts.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xmldiff.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xmldiff.cpython-312.pyc
deleted file mode 100644
index 145b5de..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xmldiff.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xmlschema.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xmlschema.cpython-312.pyc
deleted file mode 100644
index b05ab15..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xmlschema.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xsge_gui.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xsge_gui.cpython-312.pyc
deleted file mode 100644
index 0086c00..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xsge_gui.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xyzservices.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xyzservices.cpython-312.pyc
deleted file mode 100644
index bcee473..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-xyzservices.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-yapf_third_party.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-yapf_third_party.cpython-312.pyc
deleted file mode 100644
index 3b7327e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-yapf_third_party.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-z3c.rml.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-z3c.rml.cpython-312.pyc
deleted file mode 100644
index 69ff893..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-z3c.rml.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zarr.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zarr.cpython-312.pyc
deleted file mode 100644
index c18506e..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zarr.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zeep.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zeep.cpython-312.pyc
deleted file mode 100644
index c5fc978..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zeep.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zmq.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zmq.cpython-312.pyc
deleted file mode 100644
index 7e6b19c..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zmq.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zoneinfo.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zoneinfo.cpython-312.pyc
deleted file mode 100644
index 1061482..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/__pycache__/hook-zoneinfo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-BTrees.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-BTrees.py
deleted file mode 100644
index 1213dfd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-BTrees.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for BTrees: https://pypi.org/project/BTrees/4.5.1/
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('BTrees')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-CTkMessagebox.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-CTkMessagebox.py
deleted file mode 100644
index dd43aad..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-CTkMessagebox.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-# A fully customizable messagebox for customtkinter!
-# (extension/add-on)
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("CTkMessagebox")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Crypto.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Crypto.py
deleted file mode 100644
index a52de53..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Crypto.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for PyCryptodome library: https://pypi.python.org/pypi/pycryptodome
-
-PyCryptodome is an almost drop-in replacement for the now unmaintained
-PyCrypto library. The two are mutually exclusive as they live under
-the same package ("Crypto").
-
-PyCryptodome distributes dynamic libraries and builds them as if they were
-Python C extensions (even though they are not extensions - as they can't be
-imported by Python). It might sound a bit weird, but this decision is rooted
-in PyPy and its partial and slow support for C extensions. However, this also
-invalidates several of the existing methods used by PyInstaller to decide the
-right files to pull in.
-
-Even though this hook is meant to help with PyCryptodome only, it will be
-triggered also when PyCrypto is installed, so it must be tested with both.
-
-Tested with PyCryptodome 3.5.1, PyCrypto 2.6.1, Python 2.7 & 3.6, Fedora & Windows
-"""
-
-import os
-import glob
-
-from PyInstaller.compat import EXTENSION_SUFFIXES
-from PyInstaller.utils.hooks import get_module_file_attribute
-
-# Include the modules as binaries in a subfolder named like the package.
-# Cryptodome's loader expects to find them inside the package directory for
-# the main module. We cannot use hiddenimports because that would add the
-# modules outside the package.
-
-binaries = []
-binary_module_names = [
- 'Crypto.Math', # First in the list
- 'Crypto.Cipher',
- 'Crypto.Util',
- 'Crypto.Hash',
- 'Crypto.Protocol',
- 'Crypto.PublicKey',
-]
-
-try:
- for module_name in binary_module_names:
- m_dir = os.path.dirname(get_module_file_attribute(module_name))
- for ext in EXTENSION_SUFFIXES:
- module_bin = glob.glob(os.path.join(m_dir, '_*%s' % ext))
- for f in module_bin:
- binaries.append((f, module_name.replace('.', os.sep)))
-except ImportError:
- # Do nothing for PyCrypto (Crypto.Math does not exist there)
- pass
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Cryptodome.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Cryptodome.py
deleted file mode 100644
index 3a88482..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Cryptodome.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for Cryptodome module: https://pypi.python.org/pypi/pycryptodomex
-
-Tested with Cryptodomex 3.4.2, Python 2.7 & 3.5, Windows
-"""
-
-import os
-import glob
-
-from PyInstaller.compat import EXTENSION_SUFFIXES
-from PyInstaller.utils.hooks import get_module_file_attribute
-
-# Include the modules as binaries in a subfolder named like the package.
-# Cryptodome's loader expects to find them inside the package directory for
-# the main module. We cannot use hiddenimports because that would add the
-# modules outside the package.
-
-binaries = []
-binary_module_names = [
- 'Cryptodome.Cipher',
- 'Cryptodome.Util',
- 'Cryptodome.Hash',
- 'Cryptodome.Protocol',
- 'Cryptodome.Math',
- 'Cryptodome.PublicKey',
-]
-
-for module_name in binary_module_names:
- m_dir = os.path.dirname(get_module_file_attribute(module_name))
- for ext in EXTENSION_SUFFIXES:
- module_bin = glob.glob(os.path.join(m_dir, '_*%s' % ext))
- for f in module_bin:
- binaries.append((f, module_name.replace('.', '/')))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-HtmlTestRunner.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-HtmlTestRunner.py
deleted file mode 100644
index 56abec9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-HtmlTestRunner.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for HtmlTestRunner: https://pypi.org/project/html-testRunner//1.2.1
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('HtmlTestRunner')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-IPython.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-IPython.py
deleted file mode 100644
index 8fec50b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-IPython.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Tested with IPython 4.0.0.
-
-from PyInstaller.compat import is_win, is_darwin
-from PyInstaller.utils.hooks import collect_data_files
-
-# Ignore 'matplotlib'. IPython contains support for matplotlib.
-# Ignore GUI libraries. IPython supports integration with GUI frameworks.
-# Assume that it will be imported by any other module when the user really
-# uses it.
-excludedimports = [
- 'gtk',
- 'matplotlib',
- 'PySide',
- 'PyQt4',
- 'PySide2',
- 'PyQt5',
- 'PySide6',
- 'PyQt6',
-]
-
-# IPython uses 'tkinter' for clipboard access on Linux/Unix. Exclude it on Windows and OS X.
-if is_win or is_darwin:
- excludedimports.append('tkinter')
-
-datas = collect_data_files('IPython')
-
-# IPython imports extensions by changing to the extensions directory and using
-# importlib.import_module, so we need to copy over the extensions as if they
-# were data files.
-datas += collect_data_files('IPython.extensions', include_py_files=True)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-OpenGL.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-OpenGL.py
deleted file mode 100644
index ae7bd48..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-OpenGL.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for PyOpenGL 3.x versions from 3.0.0b6 up. Previous versions have a
-plugin system based on pkg_resources which is problematic to handle correctly
-under pyinstaller; 2.x versions used to run fine without hooks, so this one
-shouldn't hurt.
-"""
-
-from PyInstaller.compat import is_win, is_darwin
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-
-# PlatformPlugin performs a conditional import based on os.name and
-# sys.platform. PyInstaller misses this so let's add it ourselves...
-if is_win:
- hiddenimports = ['OpenGL.platform.win32']
-elif is_darwin:
- hiddenimports = ['OpenGL.platform.darwin']
-# Use glx for other platforms (Linux, ...)
-else:
- hiddenimports = ['OpenGL.platform.glx']
-
-# Arrays modules are needed too.
-hiddenimports += collect_submodules('OpenGL.arrays')
-
-# PyOpenGL 3.x uses ctypes to load DLL libraries. PyOpenGL windows installer
-# adds necessary dll files to
-# DLL_DIRECTORY = os.path.join( os.path.dirname( OpenGL.__file__ ), 'DLLS')
-# PyInstaller is not able to find these dlls. Just include them all as data
-# files.
-if is_win:
- datas = collect_data_files('OpenGL')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-OpenGL_accelerate.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-OpenGL_accelerate.py
deleted file mode 100644
index 5d6998b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-OpenGL_accelerate.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-OpenGL_accelerate contais modules written in cython. This module
-should speed up some functions from OpenGL module. The following
-hiddenimports are not resolved by PyInstaller because OpenGL_accelerate
-is compiled to native Python modules.
-"""
-
-hiddenimports = [
- 'OpenGL_accelerate.wrapper',
- 'OpenGL_accelerate.formathandler',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-PyTaskbar.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-PyTaskbar.py
deleted file mode 100644
index 55a82a1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-PyTaskbar.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("PyTaskbar")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Xlib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Xlib.py
deleted file mode 100644
index 8ce588e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-Xlib.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('Xlib')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-_mssql.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-_mssql.py
deleted file mode 100644
index 356a314..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-_mssql.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['uuid']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-_mysql.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-_mysql.py
deleted file mode 100644
index 252fd2a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-_mysql.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for _mysql, required if higher-level pure python module is not imported
-"""
-
-hiddenimports = ['_mysql_exceptions']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-accessible_output2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-accessible_output2.py
deleted file mode 100644
index 8d69536..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-accessible_output2.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-accessible_output2: http://hg.q-continuum.net/accessible_output2
-"""
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs('accessible_output2')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adbc_driver_manager.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adbc_driver_manager.py
deleted file mode 100644
index b08866d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adbc_driver_manager.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-
-hiddenimports = ['adbc_driver_manager._static_version']
-module_collection_mode = {
- 'adbc_driver_manager._static_version': 'py',
-}
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adbutils.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adbutils.py
deleted file mode 100644
index 302439e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adbutils.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies
-
-# adb.exe is not automatically collected by collect_dynamic_libs()
-datas = collect_data_files("adbutils", subdir="binaries", includes=["adb*"])
-
-# adbutils v2.2.2 replaced `pkg_resources` with `importlib.resources`, and now uses the following code to determine the
-# path to the `adbutils.binaries` sub-package directory:
-# https://github.com/openatx/adbutils/blob/2.2.2/adbutils/_utils.py#L78-L87
-# As `adbutils.binaries` is not directly imported anywhere, we need a hidden import.
-if is_module_satisfies('adbutils >= 2.2.2'):
- hiddenimports = ['adbutils.binaries']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adios.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adios.py
deleted file mode 100644
index 761de00..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-adios.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for http://pypi.python.org/pypi/adios/
-"""
-
-hiddenimports = ['adios._hl.selections']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-afmformats.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-afmformats.py
deleted file mode 100644
index 79eafa6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-afmformats.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for afmformats: https://pypi.python.org/pypi/afmformats
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('afmformats')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-aliyunsdkcore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-aliyunsdkcore.py
deleted file mode 100644
index 50b0d96..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-aliyunsdkcore.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("aliyunsdkcore")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-altair.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-altair.py
deleted file mode 100644
index 126115b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-altair.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("altair")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-amazonproduct.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-amazonproduct.py
deleted file mode 100644
index 46b8467..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-amazonproduct.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for Python bindings for Amazon's Product Advertising API.
-https://bitbucket.org/basti/python-amazon-product-api
-"""
-
-hiddenimports = ['amazonproduct.processors.__init__',
- 'amazonproduct.processors._lxml',
- 'amazonproduct.processors.objectify',
- 'amazonproduct.processors.elementtree',
- 'amazonproduct.processors.etree',
- 'amazonproduct.processors.minidom',
- 'amazonproduct.contrib.__init__',
- 'amazonproduct.contrib.cart',
- 'amazonproduct.contrib.caching',
- 'amazonproduct.contrib.retry']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-anyio.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-anyio.py
deleted file mode 100644
index c19fb44..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-anyio.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-AnyIO contains a number of back-ends as dynamically imported modules.
-This hook was tested against AnyIO v1.4.0.
-"""
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('anyio._backends')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-apkutils.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-apkutils.py
deleted file mode 100644
index a8804bc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-apkutils.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("apkutils")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-appdirs.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-appdirs.py
deleted file mode 100644
index d49d5ba..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-appdirs.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Import hook for appdirs.
-
-On Windows, appdirs tries 2 different methods to get well-known directories
-from the system: First with win32com, then with ctypes. Excluding win32com here
-avoids including all the win32com related DLLs in programs that don't include
-them otherwise.
-"""
-
-excludedimports = ['win32com']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-appy.pod.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-appy.pod.py
deleted file mode 100644
index 056aea2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-appy.pod.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for appy.pod: https://pypi.python.org/pypi/appy/0.9.1
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('appy.pod', True)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-apscheduler.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-apscheduler.py
deleted file mode 100644
index 4ac1838..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-apscheduler.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-APScheduler uses entry points to dynamically load executors, job
-stores and triggers.
-This hook was tested against APScheduler 3.6.3.
-"""
-
-from PyInstaller.utils.hooks import (collect_submodules, copy_metadata,
- is_module_satisfies)
-
-if is_module_satisfies("apscheduler < 4"):
- if is_module_satisfies("pyinstaller >= 4.4"):
- datas = copy_metadata('APScheduler', recursive=True)
- else:
- datas = copy_metadata('APScheduler')
-
- hiddenimports = collect_submodules('apscheduler')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-argon2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-argon2.py
deleted file mode 100644
index 505639a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-argon2.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ["_cffi_backend"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astor.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astor.py
deleted file mode 100644
index 93452da..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astor.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('astor')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astroid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astroid.py
deleted file mode 100644
index 22323cd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astroid.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# ***************************************************
-# hook-astriod.py - PyInstaller hook file for astriod
-# ***************************************************
-# The astriod package, in __pkginfo__.py, is version 1.1.1. Looking at its
-# source:
-#
-# From __init__.py, starting at line 111::
-#
-# BRAIN_MODULES_DIR = join(dirname(__file__), 'brain')
-# if BRAIN_MODULES_DIR not in sys.path:
-# # add it to the end of the list so user path take precedence
-# sys.path.append(BRAIN_MODULES_DIR)
-# # load modules in this directory
-# for module in listdir(BRAIN_MODULES_DIR):
-# if module.endswith('.py'):
-# __import__(module[:-3])
-#
-# So, we need all the Python source in the ``brain/`` subdirectory,
-# since this is run-time discovered and loaded. Therefore, these
-# files are all data files.
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules, \
- is_module_or_submodule
-
-# Note that brain/ isn't a module (it lacks an __init__.py, so it can't be
-# referred to as astroid.brain; instead, locate it as package astriod,
-# subdirectory brain/.
-datas = collect_data_files('astroid', True, 'brain')
-
-# Update: in astroid v 1.4.1, the brain/ module import parts of astroid. Since
-# everything in brain/ is dynamically imported, these are hidden imports. For
-# simplicity, include everything in astroid. Exclude all the test/ subpackage
-# contents and the test_util module.
-hiddenimports = ['six'] + collect_submodules('astroid',
- lambda name: (not is_module_or_submodule(name, 'astroid.tests')) and
- (not name == 'test_util'))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astropy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astropy.py
deleted file mode 100644
index 925ca4d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astropy.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules, \
- copy_metadata, is_module_satisfies
-
-# Astropy includes a number of non-Python files that need to be present
-# at runtime, so we include these explicitly here.
-datas = collect_data_files('astropy')
-
-# In a number of places, astropy imports other sub-modules in a way that is not
-# always auto-discovered by pyinstaller, so we always include all submodules.
-hiddenimports = collect_submodules('astropy')
-
-# We now need to include the *_parsetab.py and *_lextab.py files for unit and
-# coordinate parsing, since these are loaded as files rather than imported as
-# sub-modules. We leverage collect_data_files to get all files in astropy then
-# filter these.
-ply_files = []
-for path, target in collect_data_files('astropy', include_py_files=True):
- if path.endswith(('_parsetab.py', '_lextab.py')):
- ply_files.append((path, target))
-
-datas += ply_files
-
-# Astropy version >= 5.0 queries metadata to get version information.
-if is_module_satisfies('astropy >= 5.0'):
- datas += copy_metadata('astropy')
- datas += copy_metadata('numpy')
-
-# In the Cython code, Astropy imports numpy.lib.recfunctions which isn't
-# automatically discovered by pyinstaller, so we add this as a hidden import.
-hiddenimports += ['numpy.lib.recfunctions']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astropy_iers_data.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astropy_iers_data.py
deleted file mode 100644
index 828dd45..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-astropy_iers_data.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for https://github.com/astropy/astropy-iers-data
-
-from PyInstaller.utils.hooks import collect_data_files
-datas = collect_data_files("astropy_iers_data")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-av.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-av.py
deleted file mode 100644
index 8770d6d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-av.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-import os
-
-from PyInstaller.compat import is_win
-from PyInstaller.utils.hooks import collect_submodules, is_module_satisfies, get_package_paths
-
-hiddenimports = ['fractions'] + collect_submodules("av")
-
-# Starting with av 9.1.1, the DLLs shipped with Windows PyPI wheels are stored
-# in site-packages/av.libs instead of directly in the site-packages/av.
-if is_module_satisfies("av >= 9.1.1") and is_win:
- pkg_base, pkg_dir = get_package_paths("av")
- lib_dir = os.path.join(pkg_base, "av.libs")
- if os.path.isdir(lib_dir):
- # We collect DLLs as data files instead of binaries to suppress binary
- # analysis, which would result in duplicates (because it collects a copy
- # into the top-level directory instead of preserving the original layout).
- # In addition to DLls, this also collects .load-order* file (required on
- # python < 3.8), and ensures that Shapely.libs directory exists (required
- # on python >= 3.8 due to os.add_dll_directory call).
- datas = [
- (os.path.join(lib_dir, lib_file), 'av.libs')
- for lib_file in os.listdir(lib_dir)
- ]
-
-# With av 13.0.0, one of the cythonized modules (`av.audio.layout`) started using `dataclasses`. Add it to hidden
-# imports to ensure it is collected in cases when it is not referenced from anywhere else.
-if is_module_satisfies("av >= 13.0.0"):
- hiddenimports += ['dataclasses']
-
-# av 13.1.0 added a cythonized `av.opaque` module that uses `uuid`; add it to hidden imports to ensure it is collected
-# in cases when it is not referenced from anywhere else.
-if is_module_satisfies("av >= 13.1.0"):
- hiddenimports += ['uuid']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-avro.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-avro.py
deleted file mode 100644
index 178fa29..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-avro.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Avro is a serialization and RPC framework.
-"""
-
-import os
-from PyInstaller.utils.hooks import get_module_file_attribute
-
-res_loc = os.path.dirname(get_module_file_attribute("avro"))
-# see https://github.com/apache/avro/blob/master/lang/py3/setup.py
-datas = [
- # Include the version.txt file, used to set __version__
- (os.path.join(res_loc, "VERSION.txt"), "avro"),
- # The handshake schema is needed for IPC communication
- (os.path.join(res_loc, "HandshakeRequest.avsc"), "avro"),
- (os.path.join(res_loc, "HandshakeResponse.avsc"), "avro"),
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-azurerm.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-azurerm.py
deleted file mode 100644
index 52e9c51..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-azurerm.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-# Azurerm is a lite api to microsoft azure.
-# Azurerm is using pkg_resources internally which is not supported by py-installer.
-# This hook will collect the module metadata.
-# Tested with Azurerm 0.10.0
-
-from PyInstaller.utils.hooks import copy_metadata, is_module_satisfies
-
-if is_module_satisfies("pyinstaller >= 4.4"):
- datas = copy_metadata("azurerm", recursive=True)
-else:
- datas = copy_metadata("azurerm")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-backports.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-backports.py
deleted file mode 100644
index af9ead4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-backports.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Some of jaraco's backports packages (backports.functools-lru-cache, backports.tarfile) use pkgutil-style `backports`
-# namespace package, with `__init__.py` file that contains:
-#
-# __path__ = __import__('pkgutil').extend_path(__path__, __name__)
-#
-# This import via `__import__` function slips past PyInstaller's modulegraph analysis; so add a hidden import, in case
-# the user's program (and its dependencies) have no other direct imports of `pkgutil`.
-hiddenimports = ['pkgutil']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-backports.zoneinfo.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-backports.zoneinfo.py
deleted file mode 100644
index 03a5e41..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-backports.zoneinfo.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_win
-
-# On Windows, timezone data is provided by the tzdata package that is
-# not directly loaded.
-if is_win:
- hiddenimports = ['tzdata']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bacon.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bacon.py
deleted file mode 100644
index febf11b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bacon.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for Bacon (https://github.com/aholkner/bacon)
-# Bacon requires its native DLLs to be copied alongside frozen executable.
-
-import os
-import ctypes
-
-from PyInstaller.compat import is_win, is_darwin
-from PyInstaller.utils.hooks import get_package_paths
-
-
-def collect_native_files(package, files):
- pkg_base, pkg_dir = get_package_paths(package)
- return [(os.path.join(pkg_dir, file), '.') for file in files]
-
-
-if is_win:
- files = ['Bacon.dll',
- 'd3dcompiler_46.dll',
- 'libEGL.dll',
- 'libGLESv2.dll',
- 'msvcp110.dll',
- 'msvcr110.dll',
- 'vccorllib110.dll']
- if ctypes.sizeof(ctypes.c_void_p) == 4:
- hiddenimports = ["bacon.windows32"]
- datas = collect_native_files('bacon.windows32', files)
- else:
- hiddenimports = ["bacon.windows64"]
- datas = collect_native_files('bacon.windows64', files)
-elif is_darwin:
- if ctypes.sizeof(ctypes.c_void_p) == 4:
- hiddenimports = ["bacon.darwin32"]
- files = ['Bacon.dylib']
- datas = collect_native_files('bacon.darwin32', files)
- else:
- hiddenimports = ["bacon.darwin64"]
- files = ['Bacon64.dylib']
- datas = collect_native_files('bacon.darwin64', files)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bcrypt.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bcrypt.py
deleted file mode 100644
index adbb592..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bcrypt.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for https://pypi.org/project/bcrypt/
-"""
-
-hiddenimports = ['_cffi_backend']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bitsandbytes.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bitsandbytes.py
deleted file mode 100644
index 7897cf3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bitsandbytes.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ---------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# bitsandbytes contains several extensions for CPU and different CUDA versions: libbitsandbytes_cpu.so,
-# libbitsandbytes_cuda110_nocublaslt.so, libbitsandbytes_cuda110.so, etc. At build-time, we could query the
-# `bitsandbytes.cextension.setup` and its `binary_name` attribute for the extension that is in use. However, if the
-# build system does not have CUDA available, this would automatically mean that we will not collect any of the CUDA
-# libs. So for now, we collect them all.
-binaries = collect_dynamic_libs("bitsandbytes")
-
-# bitsandbytes uses triton's JIT module, which requires access to source .py files.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-black.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-black.py
deleted file mode 100644
index 25ba19c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-black.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_submodules, collect_data_files
-
-# These are all imported from cythonized extensions.
-hiddenimports = [
- 'json',
- 'platform',
- 'click',
- 'mypy_extensions',
- 'pathspec',
- '_black_version',
- 'platformdirs',
- *collect_submodules('black'),
- # blib2to3.pytree, blib2to3.pygen, various submodules from blib2to3.pgen2; best to just collect all submodules.
- *collect_submodules('blib2to3'),
-]
-
-# Ensure that `black/resources/black.schema.json` is collected, in case someone tries to call `black.schema.get_schema`.
-datas = collect_data_files('black')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bleak.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bleak.py
deleted file mode 100644
index 9fa261e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bleak.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-# hook for https://github.com/hbldh/bleak
-
-from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
-from PyInstaller.compat import is_win
-
-if is_win:
- datas = collect_data_files('bleak', subdir=r'backends\dotnet')
- binaries = collect_dynamic_libs('bleak')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-blib2to3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-blib2to3.py
deleted file mode 100644
index cda9c1c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-blib2to3.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_submodules, collect_data_files
-from _pyinstaller_hooks_contrib.utils.mypy import find_mypyc_module_for_dist
-
-hiddenimports = [
- # `black` (or rather, its `blib2to3` library) uses `mypy`, and includes a top-level module with
- # dynamically-generated name prefix; for example, `30fcd23745efe32ce681__mypyc`.
- *find_mypyc_module_for_dist('black'),
- 'dataclasses',
- 'pkgutil',
- 'tempfile',
- *collect_submodules('blib2to3')
-]
-
-# Ensure that data files, such as `PatternGrammar.txt` and `Grammar.txt`, are collected.
-datas = collect_data_files('blib2to3')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-blspy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-blspy.py
deleted file mode 100644
index 18cbca2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-blspy.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-import glob
-
-from PyInstaller.utils.hooks import get_module_file_attribute
-from PyInstaller.compat import is_win
-
-# blspy comes as a stand-alone extension module that's placed directly
-# in site-packages.
-#
-# On macOS and Linux, it is linked against the GMP library, whose shared
-# library is stored in blspy.libs and .dylibsblspy, respectively. As this
-# is a linked dependency, it is collected properly by PyInstaller and
-# no further work is needed.
-#
-# On Windows, however, the blspy extension is linked against MPIR library,
-# whose DLLs are placed directly into site-packages. The mpir.dll is
-# linked dependency and is picked up automatically, but it in turn
-# dynamically loads CPU-specific backends that are named mpir_*.dll.
-# We need to colllect these manually.
-if is_win:
- blspy_dir = os.path.dirname(get_module_file_attribute('blspy'))
- mpir_dlls = glob.glob(os.path.join(blspy_dir, 'mpir_*.dll'))
- binaries = [(mpir_dll, '.') for mpir_dll in mpir_dlls]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bokeh.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bokeh.py
deleted file mode 100644
index 8c42be6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-bokeh.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata, is_module_satisfies
-
-# core/_templates/*
-# server/static/**/*
-# subcommands/*.py
-# bokeh/_sri.json
-
-datas = collect_data_files('bokeh.core') + \
- collect_data_files('bokeh.server') + \
- collect_data_files('bokeh.command.subcommands', include_py_files=True) + \
- collect_data_files('bokeh')
-
-# bokeh >= 3.0.0 sets its __version__ from metadata
-if is_module_satisfies('bokeh >= 3.0.0'):
- datas += copy_metadata('bokeh')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-boto.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-boto.py
deleted file mode 100644
index 4ee2144..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-boto.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# Boto3, the next version of Boto, is now stable and recommended for general
-# use.
-#
-# Boto is an integrated interface to current and future infrastructural
-# services offered by Amazon Web Services.
-#
-# http://boto.readthedocs.org/en/latest/
-#
-# Tested with boto 2.38.0
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('boto')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-boto3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-boto3.py
deleted file mode 100644
index 579463c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-boto3.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# Boto is the Amazon Web Services (AWS) SDK for Python, which allows Python
-# developers to write software that makes use of Amazon services like S3 and
-# EC2. Boto provides an easy to use, object-oriented API as well as low-level
-# direct service access.
-#
-# http://boto3.readthedocs.org/en/latest/
-#
-# Tested with boto3 1.2.1
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-hiddenimports = (
- collect_submodules('boto3.dynamodb') +
- collect_submodules('boto3.ec2') +
- collect_submodules('boto3.s3')
-)
-datas = collect_data_files('boto3')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-botocore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-botocore.py
deleted file mode 100644
index 47ab1a0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-botocore.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# Botocore is a low-level interface to a growing number of Amazon Web Services.
-# Botocore serves as the foundation for the AWS-CLI command line utilities. It
-# will also play an important role in the boto3.x project.
-#
-# The botocore package is compatible with Python versions 2.6.5, Python 2.7.x,
-# and Python 3.3.x and higher.
-#
-# https://botocore.readthedocs.org/en/latest/
-#
-# Tested with botocore 1.4.36
-
-from PyInstaller.utils.hooks import collect_data_files
-from PyInstaller.utils.hooks import is_module_satisfies
-
-if is_module_satisfies('botocore >= 1.4.36'):
- hiddenimports = ['html.parser']
-
-datas = collect_data_files('botocore')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-branca.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-branca.py
deleted file mode 100644
index 9cb01f9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-branca.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("branca")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cairocffi.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cairocffi.py
deleted file mode 100644
index c7db979..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cairocffi.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-import ctypes.util
-import os
-
-from PyInstaller.depend.utils import _resolveCtypesImports
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies, logger
-
-datas = collect_data_files("cairocffi")
-
-binaries = []
-
-# NOTE: Update this if cairocffi requires more libraries
-libs = ["cairo-2", "cairo", "libcairo-2"]
-
-try:
- lib_basenames = []
- for lib in libs:
- libname = ctypes.util.find_library(lib)
- if libname is not None:
- lib_basenames += [os.path.basename(libname)]
-
- if lib_basenames:
- resolved_libs = _resolveCtypesImports(lib_basenames)
- for resolved_lib in resolved_libs:
- binaries.append((resolved_lib[1], '.'))
-except Exception as e:
- logger.warning("Error while trying to find system-installed Cairo library: %s", e)
-
-if not binaries:
- logger.warning("Cairo library not found - cairocffi will likely fail to work!")
-
-# cairocffi 1.6.0 requires cairocffi/constants.py source file, so make sure it is collected.
-# The module collection mode setting requires PyInstaller >= 5.3.
-if is_module_satisfies('cairocffi >= 1.6.0'):
- module_collection_mode = {'cairocffi.constants': 'pyz+py'}
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cairosvg.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cairosvg.py
deleted file mode 100644
index 6098bf2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cairosvg.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-import ctypes.util
-import os
-
-from PyInstaller.depend.utils import _resolveCtypesImports
-from PyInstaller.utils.hooks import collect_data_files, logger
-
-datas = collect_data_files("cairosvg")
-
-binaries = []
-
-# NOTE: Update this if cairosvg requires more libraries
-libs = ["cairo-2", "cairo", "libcairo-2"]
-
-try:
- lib_basenames = []
- for lib in libs:
- libname = ctypes.util.find_library(lib)
- if libname is not None:
- lib_basenames += [os.path.basename(libname)]
-
- if lib_basenames:
- resolved_libs = _resolveCtypesImports(lib_basenames)
- for resolved_lib in resolved_libs:
- binaries.append((resolved_lib[1], '.'))
-except Exception as e:
- logger.warning("Error while trying to find system-installed Cairo library: %s", e)
-
-if not binaries:
- logger.warning("Cairo library not found - cairosvg will likely fail to work!")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-capstone.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-capstone.py
deleted file mode 100644
index 3f18043..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-capstone.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# Collect needed libraries for capstone
-binaries = collect_dynamic_libs('capstone')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cassandra.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cassandra.py
deleted file mode 100644
index 1ebd1dd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cassandra.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# A modern, feature-rich and highly-tunable Python client library for Apache Cassandra (2.1+) and
-# DataStax Enterprise (4.7+) using exclusively Cassandra's binary protocol and Cassandra Query Language v3.
-#
-# http://datastax.github.io/python-driver/api/index.html
-#
-# Tested with cassandra-driver 3.25.0
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('cassandra')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-celpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-celpy.py
deleted file mode 100644
index 6d66a0e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-celpy.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# cel-python is Pure Python implementation of Google Common Expression Language,
-# https://opensource.google/projects/cel
-# This implementation has minimal dependencies, runs quickly, and can be embedded into Python-based applications.
-# Specifically, the intent is to be part of Cloud Custodian, C7N, as part of the security policy filter.
-# https://github.com/cloud-custodian/cel-python
-#
-# Tested with cel-python 0.1.5
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect *.lark file(s) from the package
-datas = collect_data_files('celpy')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-certifi.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-certifi.py
deleted file mode 100644
index 22c3d0b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-certifi.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Certifi is a carefully curated collection of Root Certificates for
-# validating the trustworthiness of SSL certificates while verifying
-# the identity of TLS hosts.
-
-# It has been extracted from the Requests project.
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('certifi')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cf_units.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cf_units.py
deleted file mode 100644
index e8c1f3f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cf_units.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Include data files from cf_units/etc sub-directory.
-datas = collect_data_files('cf_units', includes=['etc/**'])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cftime.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cftime.py
deleted file mode 100644
index 20cfc82..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cftime.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# The cftime._cftime is a cython exension with following hidden imports:
-hiddenimports = [
- 're',
- 'time',
- 'datetime',
- 'warnings',
- 'numpy',
- 'cftime._strptime',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-chardet.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-chardet.py
deleted file mode 100644
index f7c9156..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-chardet.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-hiddenimports = []
-datas = []
-
-# Starting with v7.0.0, we need to collect mypy extension, and the data files from chardet/models
-if is_module_satisfies("chardet >= 7.0.0"):
- from PyInstaller.utils.hooks import collect_data_files
- from _pyinstaller_hooks_contrib.utils.mypy import find_mypyc_module_for_dist
-
- hiddenimports += find_mypyc_module_for_dist('chardet')
- datas += collect_data_files('chardet')
-
-# In the Windows PyPI wheel of chardet v7.4.0post2, the extensions in `chardet.pipeline` seem to come with individual
-# `__mypyc` counterparts (for example the `chardet.pipeline.orchestrator` extension references a corresponding
-# `chardet.pipeline.orchestrator__mypyc` extension). Ensure all these are collected by collecting submodules.
-if is_module_satisfies("chardet >= 7.4.0"):
- from PyInstaller.utils.hooks import collect_submodules
- hiddenimports += collect_submodules('chardet.pipeline')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-charset_normalizer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-charset_normalizer.py
deleted file mode 100644
index d429b84..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-charset_normalizer.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-if is_module_satisfies("charset_normalizer >= 3.4.5"):
- from _pyinstaller_hooks_contrib.utils.mypy import find_mypyc_module_for_dist
- hiddenimports = find_mypyc_module_for_dist('charset_normalizer')
-elif is_module_satisfies("charset_normalizer >= 3.0.1"):
- hiddenimports = ["charset_normalizer.md__mypyc"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cloudpickle.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cloudpickle.py
deleted file mode 100644
index bfaff37..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cloudpickle.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# cloudpickle to 3.0.0 keeps `cloudpickle_fast` module around for backward compatibility with existing pickled data,
-# but does not import it directly anymore. Ensure it is collected nevertheless.
-if is_module_satisfies("cloudpickle >= 3.0.0"):
- hiddenimports = ["cloudpickle.cloudpickle_fast"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cloudscraper.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cloudscraper.py
deleted file mode 100644
index 3656f24..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cloudscraper.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('cloudscraper')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-clr.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-clr.py
deleted file mode 100644
index e0afb86..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-clr.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# There is a name clash between pythonnet's clr module/extension (which this hooks is for) and clr package that provides
-# the terminal styling library (https://pypi.org/project/clr/). Therefore, we must first check if pythonnet is actually
-# available...
-from PyInstaller.utils.hooks import is_module_satisfies
-from PyInstaller.compat import is_win
-
-if is_module_satisfies("pythonnet"):
- # pythonnet requires both clr.pyd and Python.Runtime.dll, but the latter isn't found by PyInstaller.
- import ctypes.util
- from PyInstaller.log import logger
- from _pyinstaller_hooks_contrib.compat import importlib_metadata
-
- collected_runtime_files = []
-
- # Try finding Python.Runtime.dll via distribution's file list
- dist_files = importlib_metadata.files('pythonnet') or []
- runtime_dll_files = [f for f in dist_files if f.match('Python.Runtime.dll')]
- if len(runtime_dll_files) == 1:
- runtime_dll_file = runtime_dll_files[0]
- collected_runtime_files = [(runtime_dll_file.locate(), runtime_dll_file.parent.as_posix())]
- logger.debug("hook-clr: Python.Runtime.dll discovered via metadata.")
- elif len(runtime_dll_files) > 1:
- logger.warning("hook-clr: multiple instances of Python.Runtime.dll listed in metadata - cannot resolve.")
-
- # Fall back to the legacy way
- if not collected_runtime_files:
- runtime_dll_file = ctypes.util.find_library('Python.Runtime')
- if runtime_dll_file:
- collected_runtime_files = [(runtime_dll_file, '.')]
- logger.debug('hook-clr: Python.Runtime.dll discovered via legacy method.')
-
- if not collected_runtime_files:
- raise Exception('Python.Runtime.dll not found')
-
- # On Windows, collect runtime DLL file(s) as binaries; on other OSes, collect them as data files, to prevent fatal
- # errors in binary dependency analysis.
- if is_win:
- binaries = collected_runtime_files
- else:
- datas = collected_runtime_files
-
- # These modules are imported inside Python.Runtime.dll
- hiddenimports = ["platform", "warnings"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-clr_loader.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-clr_loader.py
deleted file mode 100644
index e997c41..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-clr_loader.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_win, is_cygwin
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# The clr-loader is used by pythonnet 3.x to load CLR (.NET) runtime.
-# On Windows, the default runtime is the .NET Framework, and its corresponding
-# loader requires DLLs from clr_loader\ffi\dlls to be collected. This runtime
-# is supported only on Windows, so we do not have to worry about it on other
-# OSes (where Mono or .NET Core are supported).
-if is_win or is_cygwin:
- binaries = collect_dynamic_libs("clr_loader")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cmocean.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cmocean.py
deleted file mode 100644
index d7201b5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cmocean.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("cmocean", subdir="rgb")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-compliance_checker.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-compliance_checker.py
deleted file mode 100644
index d8fb4be..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-compliance_checker.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, copy_metadata, collect_data_files
-
-# Collect submodules to ensure that checker plugins are collected. but avoid collecting tests sub-package.
-hiddenimports = collect_submodules('compliance_checker', filter=lambda name: name != 'compliance_checker.tests')
-
-# Copy metadata, because checker plugins are discovered via entry-points
-datas = copy_metadata('compliance_checker')
-
-# Include data files from compliance_checker/data sub-directory.
-datas += collect_data_files('compliance_checker', includes=['data/**'])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-comtypes.client.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-comtypes.client.py
deleted file mode 100644
index a96e16d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-comtypes.client.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# https://github.com/enthought/comtypes/blob/1.4.5/comtypes/client/_generate.py#L271-L280
-hiddenimports = [
- "comtypes.persist",
- "comtypes.typeinfo",
- "comtypes.automation",
- "comtypes.stream",
- "comtypes",
- "ctypes.wintypes",
- "ctypes",
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-countrycode.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-countrycode.py
deleted file mode 100644
index 535105d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-countrycode.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('countrycode')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-countryinfo.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-countryinfo.py
deleted file mode 100644
index aa05a06..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-countryinfo.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, collect_data_files
-
-datas = copy_metadata("countryinfo") + collect_data_files("countryinfo")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cryptography.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cryptography.py
deleted file mode 100644
index 4e55d49..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cryptography.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for cryptography module from the Python Cryptography Authority.
-"""
-
-import os
-import glob
-import pathlib
-
-from PyInstaller import compat
-from PyInstaller import isolated
-from PyInstaller.utils.hooks import (
- collect_submodules,
- copy_metadata,
- get_module_file_attribute,
- is_module_satisfies,
- logger,
-)
-
-# get the package data so we can load the backends
-datas = copy_metadata('cryptography')
-
-# Add the backends as hidden imports
-hiddenimports = collect_submodules('cryptography.hazmat.backends')
-
-# Add the OpenSSL FFI binding modules as hidden imports
-hiddenimports += collect_submodules('cryptography.hazmat.bindings.openssl') + ['_cffi_backend']
-
-
-# Include the cffi extensions as binaries in a subfolder named like the package.
-# The cffi verifier expects to find them inside the package directory for
-# the main module. We cannot use hiddenimports because that would add the modules
-# outside the package.
-# NOTE: this is not true anymore with PyInstaller >= 6.0, but we keep it like this for compatibility with 5.x series.
-binaries = []
-cryptography_dir = os.path.dirname(get_module_file_attribute('cryptography'))
-for ext in compat.EXTENSION_SUFFIXES:
- ffimods = glob.glob(os.path.join(cryptography_dir, '*_cffi_*%s*' % ext))
- for f in ffimods:
- binaries.append((f, 'cryptography'))
-
-
-# Check if `cryptography` is dynamically linked against OpenSSL >= 3.0.0. In that case, we might need to collect
-# external OpenSSL modules, if OpenSSL was built with modules support. It seems the best indication of this is the
-# presence of `ossl-modules` directory next to the OpenSSL shared library.
-#
-# NOTE: PyPI wheels ship with extensions statically linked against OpenSSL, so this is mostly catering alternative
-# installation methods (Anaconda on all OSes, Homebrew on macOS, various linux distributions).
-try:
- @isolated.decorate
- def _check_cryptography_openssl3():
- # Check if OpenSSL 3 is used.
- from cryptography.hazmat.backends.openssl.backend import backend
- openssl_version = backend.openssl_version_number()
- if openssl_version < 0x30000000:
- return False, None
-
- # Obtain path to the bindings module for binary dependency analysis. Under older versions of cryptography,
- # this was a separate `_openssl` module; in contemporary versions, it is `_rust` module.
- try:
- import cryptography.hazmat.bindings._openssl as bindings_module
- except ImportError:
- import cryptography.hazmat.bindings._rust as bindings_module
-
- return True, str(bindings_module.__file__)
-
- uses_openssl3, bindings_module = _check_cryptography_openssl3()
-except Exception:
- logger.warning(
- "hook-cryptography: failed to determine whether cryptography is using OpenSSL >= 3.0.0", exc_info=True
- )
- uses_openssl3, bindings_module = False, None
-
-if uses_openssl3:
- # Determine location of OpenSSL shared library, provided that extension module is dynamically linked against it.
- # This requires the new PyInstaller.bindepend API from PyInstaller >= 6.0.
- openssl_lib = None
- if is_module_satisfies("PyInstaller >= 6.0"):
- from PyInstaller.depend import bindepend
-
- if compat.is_win:
- SSL_LIB_NAME = 'libssl-3-x64.dll' if compat.is_64bits else 'libssl-3.dll'
- elif compat.is_darwin:
- SSL_LIB_NAME = 'libssl.3.dylib'
- else:
- SSL_LIB_NAME = 'libssl.so.3'
-
- linked_libs = bindepend.get_imports(bindings_module)
- openssl_lib = [
- # Compare the basename of lib_name, because lib_fullpath is None if we fail to resolve the library.
- lib_fullpath for lib_name, lib_fullpath in linked_libs if os.path.basename(lib_name) == SSL_LIB_NAME
- ]
- openssl_lib = openssl_lib[0] if openssl_lib else None
- else:
- logger.warning(
- "hook-cryptography: full support for cryptography + OpenSSL >= 3.0.0 requires PyInstaller >= 6.0"
- )
-
- # Check for presence of ossl-modules directory next to the OpenSSL shared library.
- if openssl_lib:
- logger.info("hook-cryptography: cryptography uses dynamically-linked OpenSSL: %r", openssl_lib)
-
- openssl_lib_dir = pathlib.Path(openssl_lib).parent
-
- # Collect whole ossl-modules directory, if it exists.
- ossl_modules_dir = openssl_lib_dir / 'ossl-modules'
-
- # Msys2/MinGW installations on Windows put the shared library into `bin` directory, but the modules are
- # located in `lib` directory. Account for that possibility.
- if not ossl_modules_dir.is_dir() and openssl_lib_dir.name == 'bin':
- ossl_modules_dir = openssl_lib_dir.parent / 'lib' / 'ossl-modules'
-
- # On Alpine linux, the true location of shared library is /lib directory, but the modules' directory is located
- # in /usr/lib instead. Account for that possibility.
- if not ossl_modules_dir.is_dir() and openssl_lib_dir == pathlib.Path('/lib'):
- ossl_modules_dir = pathlib.Path('/usr/lib/ossl-modules')
-
- if ossl_modules_dir.is_dir():
- logger.debug("hook-cryptography: collecting OpenSSL modules directory: %r", str(ossl_modules_dir))
- binaries.append((str(ossl_modules_dir), 'ossl-modules'))
- else:
- logger.info("hook-cryptography: cryptography does not seem to be using dynamically linked OpenSSL.")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cumm.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cumm.py
deleted file mode 100644
index 1193a7f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cumm.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect files from cumm/include directory - at import, the package asserts the existence of this directory.
-datas = collect_data_files('cumm')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-customtkinter.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-customtkinter.py
deleted file mode 100644
index 0247ad6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-customtkinter.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("customtkinter")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cv2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cv2.py
deleted file mode 100644
index d6573c1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cv2.py
+++ /dev/null
@@ -1,168 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import sys
-import os
-import glob
-import pathlib
-
-import PyInstaller.utils.hooks as hookutils
-from PyInstaller import compat
-
-hiddenimports = ['numpy']
-
-# On Windows, make sure that opencv_videoio_ffmpeg*.dll is bundled
-binaries = []
-if compat.is_win:
- # If conda is active, look for the DLL in its library path
- if compat.is_conda:
- libdir = os.path.join(compat.base_prefix, 'Library', 'bin')
- pattern = os.path.join(libdir, 'opencv_videoio_ffmpeg*.dll')
- for f in glob.glob(pattern):
-
- binaries.append((f, '.'))
-
- # Include any DLLs from site-packages/cv2 (opencv_videoio_ffmpeg*.dll
- # can be found there in the PyPI version)
- binaries += hookutils.collect_dynamic_libs('cv2')
-
-# Collect auxiliary sub-packages, such as `cv2.gapi`, `cv2.mat_wrapper`, `cv2.misc`, and `cv2.utils`. This also
-# picks up submodules with valid module names, such as `cv2.config`, `cv2.load_config_py2`, and `cv2.load_config_py3`.
-# Therefore, filter out `cv2.load_config_py2`.
-hiddenimports += hookutils.collect_submodules('cv2', filter=lambda name: name != 'cv2.load_config_py2')
-
-# We also need to explicitly exclude `cv2.load_config_py2` due to it being imported in `cv2.__init__`.
-excludedimports = ['cv2.load_config_py2']
-
-# OpenCV loader from 4.5.4.60 requires extra config files and modules.
-# We need to collect `config.py` and `load_config_py3`; to improve compatibility with PyInstaller < 5.2, where
-# `module_collection_mode` (see below) is not implemented.
-# We also need to collect `config-3.py` or `config-3.X.py`, whichever is available (the former is usually
-# provided by PyPI wheels, while the latter seems to be used when user builds OpenCV from source).
-datas = hookutils.collect_data_files(
- 'cv2',
- include_py_files=True,
- includes=[
- 'config.py',
- f'config-{sys.version_info[0]}.{sys.version_info[1]}.py',
- 'config-3.py',
- 'load_config_py3.py',
- ],
-)
-
-
-# The OpenCV versions that attempt to perform module substitution via sys.path manipulation (== 4.5.4.58, >= 4.6.0.66)
-# do not directly import the cv2.cv2 extension anymore, so in order to ensure it is collected, we would need to add it
-# to hidden imports. However, when OpenCV is built by user from source, the extension is not located in the package's
-# root directory, but in python-3.X sub-directory, which precludes referencing via module name due to sub-directory
-# not being a valid subpackage name. Hence, emulate the OpenCV's loader and execute `config-3.py` or `config-3.X.py`
-# to obtain the search path.
-def find_cv2_extension(config_file):
- # Prepare environment
- PYTHON_EXTENSIONS_PATHS = []
- LOADER_DIR = os.path.dirname(os.path.abspath(os.path.realpath(config_file)))
-
- global_vars = globals().copy()
- local_vars = locals().copy()
-
- # Exec the config file
- with open(config_file) as fp:
- code = compile(fp.read(), os.path.basename(config_file), 'exec')
- exec(code, global_vars, local_vars)
-
- # Read the modified PYTHON_EXTENSIONS_PATHS
- PYTHON_EXTENSIONS_PATHS = local_vars['PYTHON_EXTENSIONS_PATHS']
- if not PYTHON_EXTENSIONS_PATHS:
- return None
-
- # Search for extension file
- for extension_path in PYTHON_EXTENSIONS_PATHS:
- extension_path = pathlib.Path(extension_path)
- if compat.is_win:
- extension_files = list(extension_path.glob('cv2*.pyd'))
- else:
- extension_files = list(extension_path.glob('cv2*.so'))
- if extension_files:
- if len(extension_files) > 1:
- hookutils.logger.warning("Found multiple cv2 extension candidates: %s", extension_files)
- extension_file = extension_files[0] # Take first (or hopefully the only one)
-
- hookutils.logger.debug("Found cv2 extension module: %s", extension_file)
-
- # Compute path relative to parent of config file (which should be the package's root)
- dest_dir = pathlib.Path("cv2") / extension_file.parent.relative_to(LOADER_DIR)
- return str(extension_file), str(dest_dir)
-
- hookutils.logger.warning(
- "Could not find cv2 extension module! Config file: %s, search paths: %s",
- config_file, PYTHON_EXTENSIONS_PATHS)
-
- return None
-
-
-config_file = [
- src_path for src_path, _ in datas
- if os.path.basename(src_path) in (f'config-{sys.version_info[0]}.{sys.version_info[1]}.py', 'config-3.py')
-]
-
-if config_file:
- try:
- extension_info = find_cv2_extension(config_file[0])
- if extension_info:
- ext_src, ext_dst = extension_info
- # Due to bug in PyInstaller's TOC structure implementation (affecting PyInstaller up to latest version at
- # the time of writing, 5.9), we fail to properly resolve `cv2.cv2` EXTENSION entry's destination name if
- # we already have a BINARY entry with the same destination name. This results in verbatim `cv2.cv2` file
- # created in application directory in addition to the proper copy in the `cv2` sub-directoy.
- # Therefoe, if destination directory of the cv2 extension module is the top-level package directory, fall
- # back to using hiddenimports instead.
- if ext_dst == 'cv2':
- # Extension found in top-level package directory; likely a PyPI wheel.
- hiddenimports += ['cv2.cv2']
- else:
- # Extension found in sub-directory; use BINARY entry
- binaries += [extension_info]
- except Exception:
- hookutils.logger.warning("Failed to determine location of cv2 extension module!", exc_info=True)
-
-
-# Mark the cv2 package to be collected in source form, bypassing PyInstaller's PYZ archive and FrozenImporter. This is
-# necessary because recent versions of cv2 package attempt to perform module substritution via sys.path manipulation,
-# which is incompatible with the way that FrozenImporter works. This requires pyinstaller/pyinstaller#6945, i.e.,
-# PyInstaller >= 5.3. On earlier versions, the following statement does nothing, and problematic cv2 versions
-# (== 4.5.4.58, >= 4.6.0.66) will not work.
-#
-# Note that the collect_data_files() above is still necessary, because some of the cv2 loader's config scripts are not
-# valid module names (e.g., config-3.py). So the two collection approaches are complementary, and any overlap in files
-# (e.g., __init__.py) is handled gracefully due to PyInstaller's uniqueness constraints on collected files.
-module_collection_mode = 'py'
-
-# In linux PyPI opencv-python wheels, the cv2 extension is linked against Qt, and the wheel bundles a basic subset of Qt
-# shared libraries, plugins, and font files. This is not the case on other OSes (presumably native UI APIs are used by
-# OpenCV HighGUI module), nor in the headless PyPI wheels (opencv-python-headless).
-# The bundled Qt shared libraries should be picked up automatically due to binary dependency analysis, but we need to
-# collect plugins and font files from the `qt` subdirectory.
-if compat.is_linux:
- pkg_path = pathlib.Path(hookutils.get_module_file_attribute('cv2')).parent
- # Collect .ttf files fron fonts directory.
- # NOTE: since we are using glob, we can skip checks for (sub)directories' existence.
- qt_fonts_dir = pkg_path / 'qt' / 'fonts'
- datas += [
- (str(font_file), str(font_file.parent.relative_to(pkg_path.parent)))
- for font_file in qt_fonts_dir.rglob('*.ttf')
- ]
- # Collect .so files from plugins directory.
- qt_plugins_dir = pkg_path / 'qt' / 'plugins'
- binaries += [
- (str(plugin_file), str(plugin_file.parent.relative_to(pkg_path.parent)))
- for plugin_file in qt_plugins_dir.rglob('*.so')
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cx_Oracle.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cx_Oracle.py
deleted file mode 100644
index ae5daa8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cx_Oracle.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['decimal']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cytoolz.itertoolz.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cytoolz.itertoolz.py
deleted file mode 100644
index fcba975..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-cytoolz.itertoolz.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the cytoolz package: https://pypi.python.org/pypi/cytoolz
-# Tested with cytoolz 0.9.0 and Python 3.5.2, on Ubuntu Linux x64
-
-hiddenimports = ['cytoolz.utils', 'cytoolz._signatures']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash.py
deleted file mode 100644
index 07a3fe8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dash')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_bootstrap_components.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_bootstrap_components.py
deleted file mode 100644
index 8028d14..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_bootstrap_components.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dash_bootstrap_components')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_core_components.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_core_components.py
deleted file mode 100644
index a41fe5a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_core_components.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dash_core_components')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_html_components.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_html_components.py
deleted file mode 100644
index 077d8a5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_html_components.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dash_html_components')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_renderer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_renderer.py
deleted file mode 100644
index 854f87e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_renderer.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dash_renderer')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_table.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_table.py
deleted file mode 100644
index b7bb600..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_table.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dash_table')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_uploader.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_uploader.py
deleted file mode 100644
index f9bf99b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dash_uploader.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dash_uploader')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dask.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dask.py
deleted file mode 100644
index a11f7b7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dask.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect data files:
-# - dask.yaml
-# - dask-schema.yaml
-# - widgets/templates/*.html.j2 (but avoid collecting files from `widgets/tests/templates`!)
-datas = collect_data_files('dask', includes=['*.yml', '*.yaml', 'widgets/templates/*.html.j2'])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-datasets.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-datasets.py
deleted file mode 100644
index 1ff1a61..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-datasets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateparser.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateparser.py
deleted file mode 100644
index ed97292..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateparser.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Ensure that `dateparser/data/dateparser_tz_cache.pkl` data file is collected. Applicable to dateparser >= v1.2.2;
-# earlier releases have no data files, so this call returns empty list.
-datas = collect_data_files('dateparser')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateparser.utils.strptime.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateparser.utils.strptime.py
deleted file mode 100644
index 35e6c92..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateparser.utils.strptime.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for dateparser: https://pypi.org/project/dateparser/
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = ["_strptime"] + collect_submodules('dateparser.data')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateutil.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateutil.py
deleted file mode 100644
index 54abddf..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dateutil.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("dateutil")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dbus_fast.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dbus_fast.py
deleted file mode 100644
index 4e2eb72..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dbus_fast.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# Collect all submodules to handle imports made from cythonized extensions.
-hiddenimports = collect_submodules('dbus_fast')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dclab.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dclab.py
deleted file mode 100644
index 3179a16..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dclab.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for dclab: https://pypi.python.org/pypi/dclab
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('dclab')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ddgs.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ddgs.py
deleted file mode 100644
index 3d41d20..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ddgs.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# The .ddgs module is lazily loaded, and is discovered only because PyInstaller currently analyzes imports under
-# `if TYPE_CHECKING`. See: https://github.com/deedy5/ddgs/blob/v9.10.0/ddgs/__init__.py#L14-L15
-hiddenimports = ['ddgs.ddgs']
-
-# The engines/backends are discovered via `pkgutil.iter_modules()`, so we need to ensure they are collected.
-hiddenimports += collect_submodules('ddgs.engines')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-detectron2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-detectron2.py
deleted file mode 100644
index 1ff1a61..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-detectron2.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-discid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-discid.py
deleted file mode 100644
index 37cba62..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-discid.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-
-from PyInstaller.utils.hooks import get_module_attribute, logger
-from PyInstaller.depend.utils import _resolveCtypesImports
-
-binaries = []
-
-# Use the _LIB_NAME attribute of discid.libdiscid to resolve the shared library name. This saves us from having to
-# duplicate the name guessing logic from discid.libdiscid.
-# On error, PyInstaller >= 5.0 raises exception, earlier versions return an empty string.
-try:
- lib_name = get_module_attribute("discid.libdiscid", "_LIB_NAME")
-except Exception:
- lib_name = None
-
-if lib_name:
- lib_name = os.path.basename(lib_name)
- try:
- resolved_binary = _resolveCtypesImports([lib_name])
- lib_file = resolved_binary[0][1]
- except Exception as e:
- lib_file = None
- logger.warning("Error while trying to resolve %s: %s", lib_name, e)
-
- if lib_file:
- binaries += [(lib_file, '.')]
-else:
- logger.warning("Failed to determine name of libdiscid shared library from _LIB_NAME attribute of discid.libdiscid!")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-distorm3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-distorm3.py
deleted file mode 100644
index b2fb731..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-distorm3.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the diStorm3 module: https://pypi.python.org/pypi/distorm3
-# Tested with distorm3 3.3.0, Python 2.7, Windows
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# distorm3 dynamic library should be in the path with other dynamic libraries.
-binaries = collect_dynamic_libs('distorm3', destdir='.')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-distributed.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-distributed.py
deleted file mode 100644
index d1072d9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-distributed.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2025, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-# Collect submodules of distributed.http, many of which are imported indirectly.
-hiddenimports = collect_submodules("distributed.http")
-
-# Collect data files (distributed.yaml, distributed-schema.yaml, templates).
-datas = collect_data_files("distributed")
-
-# `distributed.dashboard.components.scheduler` attempts to refer to data files relative to its parent directory, but
-# with non-normalized '..' elements in the path (e.g., `_MEIPASS/distributed/dashboard/components/../theme.yaml`). On
-# POSIX systems, such paths are treated as non-existent if a component does not exist, even if the file exists at the
-# normalized location (i.e., if `_MEIPASS/distributed/dashboard/theme.yaml` file exists but
-# `_MEIPASS/distributed/dashboard/components` directory does not). As a work around, collect source .py files from
-# `distributed.dashboard.components` to ensure existence of the `components` directory.
-module_collection_mode = {
- 'distributed.dashboard.components': 'pyz+py',
-}
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dns.rdata.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dns.rdata.py
deleted file mode 100644
index a185ad9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dns.rdata.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This is hook for DNS python package dnspython.
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('dns.rdtypes')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docutils.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docutils.py
deleted file mode 100644
index 9d4ee79..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docutils.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, collect_data_files
-
-hiddenimports = (collect_submodules('docutils.languages') +
- collect_submodules('docutils.writers') +
- collect_submodules('docutils.parsers.rst.languages') +
- collect_submodules('docutils.parsers.rst.directives'))
-datas = collect_data_files('docutils')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docx.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docx.py
deleted file mode 100644
index aefe64e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docx.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("docx")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docx2pdf.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docx2pdf.py
deleted file mode 100644
index c746417..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-docx2pdf.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later.
-# ------------------------------------------------------------------
-
-# Hook for docx2pdf: https://pypi.org/project/docx2pdf/
-
-from PyInstaller.utils.hooks import copy_metadata, collect_data_files
-
-datas = copy_metadata('docx2pdf')
-datas += collect_data_files('docx2pdf')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-duckdb.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-duckdb.py
deleted file mode 100644
index 0d24af0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-duckdb.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, is_module_satisfies
-
-# duckdb requires stdlib `inspect` module. On newer python versions (>= 3.10), it is collected as a dependency of other
-# stdlib modules, while on older python versions this is not the case. Therefore, we add it to hidden imports regardless
-# of python version.
-hiddenimports = ['inspect']
-
-# Starting with v1.4.0, `duckdb` uses `importlib.metadata.version()` to determine its version.
-if is_module_satisfies("duckdb >= 1.4.0"):
- datas = copy_metadata('duckdb')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dynaconf.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dynaconf.py
deleted file mode 100644
index 08c809a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-dynaconf.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['dynaconf.loaders.env_loader',
- 'dynaconf.loaders.redis_loader',
- 'dynaconf.loaders.vault.loader']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-easyocr.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-easyocr.py
deleted file mode 100644
index a868875..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-easyocr.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from PyInstaller.utils.hooks import collect_data_files, get_hook_config
-
-# Recognition backends are imported with `importlib.import_module()`.
-hiddenimports = ['easyocr.model.vgg_model', 'easyocr.model.model']
-
-
-def hook(hook_api):
- lang_codes = get_hook_config(hook_api, 'easyocr', 'lang_codes')
- if not lang_codes:
- lang_codes = ['*']
-
- extra_datas = list()
- extra_datas += collect_data_files('easyocr', include_py_files=False, subdir='character',
- includes=[f'{lang_code}_char.txt' for lang_code in lang_codes])
- extra_datas += collect_data_files('easyocr', include_py_files=False, subdir='dict',
- includes=[f'{lang_code}.txt' for lang_code in lang_codes])
-
- hook_api.add_datas(extra_datas)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eccodeslib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eccodeslib.py
deleted file mode 100644
index b04e500..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eccodeslib.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# Collect bundled dynamic libraries.
-binaries = collect_dynamic_libs('eccodeslib')
-
-# `eccodeslib` depends on `eckitlib` and `fckitlib`, and when libraries are being imported at run-time by
-# `findlibs.find()` user warnings are emitted if these packages cannot be imported.
-hiddenimports = ['eckitlib', 'fckitlib']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eckitlib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eckitlib.py
deleted file mode 100644
index 99a8786..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eckitlib.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# Collect bundled dynamic libraries.
-binaries = collect_dynamic_libs('eckitlib')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eel.py
deleted file mode 100644
index ceeb974..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eel.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('eel')
-hiddenimports = ['bottle_websocket']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-emoji.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-emoji.py
deleted file mode 100644
index ecdf1fd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-emoji.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('emoji')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-enchant.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-enchant.py
deleted file mode 100644
index 39fd990..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-enchant.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Import hook for PyEnchant.
-
-Tested with PyEnchant 1.6.6.
-"""
-
-import os
-
-from PyInstaller import isolated
-from PyInstaller import compat
-from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs, get_installer
-
-# TODO Add Linux support
-# Collect first all files that were installed directly into pyenchant
-# package directory and this includes:
-# - Windows: libenchat-1.dll, libenchat_ispell.dll, libenchant_myspell.dll, other
-# dependent dlls and dictionaries for several languages (de, en, fr)
-# - macOS: usually libenchant.dylib and several dictionaries when installed via pip.
-binaries = collect_dynamic_libs('enchant')
-datas = collect_data_files('enchant')
-excludedimports = ['enchant.tests']
-
-# On macOS try to find files in Homebrew or Macports environments.
-if compat.is_darwin:
- # Note: env. var. ENCHANT_PREFIX_DIR is implemented only in the development version:
- # https://github.com/AbiWord/enchant
- # https://github.com/AbiWord/enchant/pull/2
- # TODO Test this hook with development version of enchant.
- @isolated.decorate
- def _get_enchant_lib():
- from enchant._enchant import e # ctypes.CDLL
- return e._name
-
- libenchant = _get_enchant_lib()
-
- installer = get_installer('enchant')
- if installer != 'pip':
- # Note: Name of detected enchant library is 'libenchant.dylib'. However, it
- # is just symlink to 'libenchant.1.dylib'.
- binaries.append((libenchant, '.'))
-
- # Collect enchant backends from Macports. Using same file structure as on Windows.
- @isolated.decorate
- def _get_enchant_backends():
- from enchant import Broker
- return [str(provider.file) for provider in Broker().describe()]
-
- backends = _get_enchant_backends()
- binaries.extend([(b, 'enchant/lib/enchant') for b in backends])
-
- # Collect all available dictionaries from Macports. Using same file structure as on Windows.
- # In Macports are available mostly hunspell (myspell) and aspell dictionaries.
- libdir = os.path.dirname(libenchant) # e.g. /opt/local/lib
- sharedir = os.path.join(os.path.dirname(libdir), 'share') # e.g. /opt/local/share
- if os.path.exists(os.path.join(sharedir, 'enchant')):
- datas.append((os.path.join(sharedir, 'enchant'), 'enchant/share/enchant'))
- if os.path.exists(os.path.join(sharedir, 'enchant-2')):
- datas.append((os.path.join(sharedir, 'enchant-2'), 'enchant/share/enchant-2'))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eng_to_ipa.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eng_to_ipa.py
deleted file mode 100644
index 5a78114..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eng_to_ipa.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('eng_to_ipa')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ens.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ens.py
deleted file mode 100644
index 89e496e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ens.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("ens")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-enzyme.parsers.ebml.core.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-enzyme.parsers.ebml.core.py
deleted file mode 100644
index 047274c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-enzyme.parsers.ebml.core.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-enzyme:
-https://github.com/Diaoul/enzyme
-"""
-
-import os
-from PyInstaller.utils.hooks import get_package_paths
-
-# get path of enzyme
-ep = get_package_paths('enzyme')
-
-# add the data
-data = os.path.join(ep[1], 'parsers', 'ebml', 'specs', 'matroska.xml')
-datas = [(data, "enzyme/parsers/ebml/specs")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_abi.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_abi.py
deleted file mode 100644
index 75c26f0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_abi.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata("eth_abi")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_account.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_account.py
deleted file mode 100644
index 1a9c8f5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_account.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata("eth_account")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_hash.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_hash.py
deleted file mode 100644
index 0c9d50e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_hash.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, copy_metadata, is_module_satisfies
-
-# The ``eth_hash.utils.load_backend`` function does a dynamic import.
-hiddenimports = collect_submodules('eth_hash.backends')
-
-# As of eth-hash 0.6.0, it uses importlib.metadata.version() set its __version__ attribute
-if is_module_satisfies("eth-hash >= 0.6.0"):
- datas = copy_metadata("eth-hash")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_keyfile.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_keyfile.py
deleted file mode 100644
index 2d9453a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_keyfile.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata("eth_keyfile")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_keys.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_keys.py
deleted file mode 100644
index d96535e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_keys.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, is_module_satisfies
-
-# As of eth-keys 0.5.0, it uses importlib.metadata.version() set its __version__ attribute
-if is_module_satisfies("eth-keys >= 0.5.0"):
- datas = copy_metadata("eth-keys")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_rlp.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_rlp.py
deleted file mode 100644
index 01943a6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_rlp.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, copy_metadata
-
-# Starting with v1.0.0, `eth_rlp` queries its version from metadata.
-if is_module_satisfies("eth-rlp >= 1.0.0"):
- datas = copy_metadata('eth-rlp')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_typing.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_typing.py
deleted file mode 100644
index f31e4ca..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_typing.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-# eth-typing queries it's own version using importlib.metadata/pkg_resources.
-datas = copy_metadata("eth-typing")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_utils.network.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_utils.network.py
deleted file mode 100644
index 3bd88f9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_utils.network.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("eth_utils")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_utils.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_utils.py
deleted file mode 100644
index a87ec3c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-eth_utils.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata("eth_utils")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-exchangelib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-exchangelib.py
deleted file mode 100644
index 0c46bcc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-exchangelib.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-hiddenimports = ['tzdata']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fabric.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fabric.py
deleted file mode 100644
index 3367c0c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fabric.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# Fabric is a high level Python (2.7, 3.4+) library designed to execute shell commands remotely over SSH,
-# yielding useful Python objects in return
-#
-# https://docs.fabfile.org/en/latest
-#
-# Tested with fabric 2.6.0
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('fabric')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fairscale.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fairscale.py
deleted file mode 100644
index 8b5d53d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fairscale.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fake_useragent.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fake_useragent.py
deleted file mode 100644
index feab067..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fake_useragent.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("fake_useragent")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-faker.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-faker.py
deleted file mode 100644
index 1d5b039..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-faker.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, collect_data_files
-
-hiddenimports = collect_submodules('faker.providers')
-datas = (
- collect_data_files('text_unidecode') + # noqa: W504
- collect_data_files('faker.providers', include_py_files=True)
-)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-falcon.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-falcon.py
deleted file mode 100644
index 1c1d2b1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-falcon.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_py311
-from PyInstaller.utils.hooks import is_module_satisfies
-
-hiddenimports = [
- 'cgi',
- 'falcon.app_helpers',
- 'falcon.forwarded',
- 'falcon.media',
- 'falcon.request_helpers',
- 'falcon.responders',
- 'falcon.response_helpers',
- 'falcon.routing',
- 'falcon.vendor.mimeparse',
- 'falcon.vendor',
- 'uuid',
- 'xml.etree.ElementTree',
- 'xml.etree'
-]
-
-# falcon v4.0.0 added couple of more cythonized modules that depend on the following stdlib modules.
-if is_module_satisfies('falcon >= 4.0.0'):
- hiddenimports += [
- 'dataclasses',
- 'json',
- ]
-
- # `wsgiref.types` is available (and thus referenced) only under python >= 3.11.
- if is_py311:
- hiddenimports += ['wsgiref.types']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fastai.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fastai.py
deleted file mode 100644
index 1ff1a61..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fastai.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fastparquet.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fastparquet.py
deleted file mode 100644
index b43bbb4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fastparquet.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-import os
-
-from PyInstaller.compat import is_win
-from PyInstaller.utils.hooks import get_package_paths
-
-# In all versions for which fastparquet provides Windows wheels (>= 0.7.0), delvewheel is used,
-# so we need to collect the external site-packages/fastparquet.libs directory.
-if is_win:
- pkg_base, pkg_dir = get_package_paths("fastparquet")
- lib_dir = os.path.join(pkg_base, "fastparquet.libs")
- if os.path.isdir(lib_dir):
- # We collect DLLs as data files instead of binaries to suppress binary
- # analysis, which would result in duplicates (because it collects a copy
- # into the top-level directory instead of preserving the original layout).
- # In addition to DLls, this also collects .load-order* file (required on
- # python < 3.8), and ensures that fastparquet.libs directory exists (required
- # on python >= 3.8 due to os.add_dll_directory call).
- datas = [
- (os.path.join(lib_dir, lib_file), 'fastparquet.libs')
- for lib_file in os.listdir(lib_dir)
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fckitlib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fckitlib.py
deleted file mode 100644
index 22fe17f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fckitlib.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# Collect bundled dynamic libraries.
-binaries = collect_dynamic_libs('fckitlib')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ffpyplayer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ffpyplayer.py
deleted file mode 100644
index 1a96414..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ffpyplayer.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller import isolated
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("ffpyplayer")
-binaries = []
-
-
-# ffpyplayer has an internal variable that list locations of libraries it is using.
-@isolated.decorate
-def _get_ffpyplayer_binary_dirs():
- import ffpyplayer
- return ffpyplayer.dep_bins
-
-
-for binary_dir in _get_ffpyplayer_binary_dirs():
- binaries += [(binary_dir, '.')] # Copy DLLs from these locations into top-level application directory.
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fiona.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fiona.py
deleted file mode 100644
index 1e6d3fa..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fiona.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies
-
-hiddenimports = [
- "fiona._shim",
- "fiona.schema",
- "json",
-]
-
-# As of fiona 1.9.0, `fiona.enums` is also a hidden import, made in cythonized `fiona.crs`.
-if is_module_satisfies("fiona >= 1.9.0"):
- hiddenimports.append("fiona.enums")
-
-# Collect data files that are part of the package (e.g., projections database)
-datas = collect_data_files("fiona")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flask_compress.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flask_compress.py
deleted file mode 100644
index 9e04195..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flask_compress.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('flask_compress')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flask_restx.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flask_restx.py
deleted file mode 100644
index c83b5b3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flask_restx.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2005-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# -----------------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('flask_restx')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flex.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flex.py
deleted file mode 100644
index 3faaa82..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flex.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# hook for https://github.com/pipermerriam/flex
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('flex')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flirpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flirpy.py
deleted file mode 100644
index 4c51397..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-flirpy.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for flirpy, a library to interact with FLIR thermal imaging cameras and images.
-https://github.com/LJMUAstroEcology/flirpy
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('flirpy')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fmpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fmpy.py
deleted file mode 100644
index daeb3c6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fmpy.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for FMPy, a library to simulate Functional Mockup Units (FMUs)
-https://github.com/CATIA-Systems/FMPy
-
-Adds the data files that are required at runtime:
-
-- XSD schema files
-- dynamic libraries for the CVode solver
-- source and header files for the compilation of c-code FMUs
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('fmpy')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-folium.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-folium.py
deleted file mode 100644
index a6af178..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-folium.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect data files (templates)
-datas = collect_data_files("folium")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-freetype.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-freetype.py
deleted file mode 100644
index 0ae5c04..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-freetype.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# Collect the bundled freetype shared library, if available.
-binaries = collect_dynamic_libs('freetype')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-frictionless.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-frictionless.py
deleted file mode 100644
index fc0ff20..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-frictionless.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-# Collect data files in frictionless/assets
-datas = collect_data_files('frictionless')
-
-# Collect modules from `frictionless.plugins` (programmatic imports).
-hiddenimports = collect_submodules('frictionless.plugins')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fsspec.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fsspec.py
deleted file mode 100644
index e57a32d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fsspec.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('fsspec')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fvcore.nn.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fvcore.nn.py
deleted file mode 100644
index 1ff1a61..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-fvcore.nn.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gadfly.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gadfly.py
deleted file mode 100644
index 1bf2314..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gadfly.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ["sql_mar"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gbulb.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gbulb.py
deleted file mode 100644
index 68116a1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gbulb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Prevent this package from pulling `setuptools_scm` into frozen application, as it makes no sense in that context.
-excludedimports = ["setuptools_scm"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gcloud.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gcloud.py
deleted file mode 100644
index 051d61c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gcloud.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-# This hook was written for `gcloud` - https://pypi.org/project/gcloud
-# Suppress package-not-found errors when the hook is triggered by `gcloud` namespace package from `gcloud-aio-*` and
-# `gcloud-rest-*` dists (https://github.com/talkiq/gcloud-aio).
-try:
- datas = copy_metadata('gcloud')
-except Exception:
- pass
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-geopandas.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-geopandas.py
deleted file mode 100644
index 44d9001..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-geopandas.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("geopandas", subdir="datasets")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gitlab.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gitlab.py
deleted file mode 100644
index 8adf54b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gitlab.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# python-gitlab is a Python package providing access to the GitLab server API.
-# It supports the v4 API of GitLab, and provides a CLI tool (gitlab).
-#
-# https://python-gitlab.readthedocs.io
-#
-# Tested with gitlab 3.2.0
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('gitlab')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-globus_sdk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-globus_sdk.py
deleted file mode 100644
index 49fb06f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-globus_sdk.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules, copy_metadata
-
-datas = copy_metadata("globus_sdk")
-datas += collect_data_files("globus_sdk")
-hiddenimports = collect_submodules("globus_sdk")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gmplot.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gmplot.py
deleted file mode 100644
index ce2d5ce..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gmplot.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2005-2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('gmplot')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gmsh.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gmsh.py
deleted file mode 100644
index d9755d0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gmsh.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-
-from PyInstaller.utils.hooks import logger, get_module_attribute
-
-# Query the `libpath` attribute of the `gmsh` module to obtain the path to shared library. This way, we do not need to
-# duplicate the discovery logic.
-try:
- lib_file = get_module_attribute('gmsh', 'libpath')
-except Exception:
- logger.warning("Failed to query gmsh.libpath!", exc_info=True)
- lib_file = None
-
-if lib_file and os.path.isfile(lib_file):
- binaries = [(lib_file, '.')]
-else:
- logger.warning("Could not find gmsh shared library - gmsh will likely fail to load at run-time!")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gooey.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gooey.py
deleted file mode 100644
index 8861b47..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gooey.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Gooey GUI carries some language and images for it's UI to function.
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('gooey')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.api_core.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.api_core.py
deleted file mode 100644
index 641bdf0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.api_core.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('google-api-core')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.bigquery.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.bigquery.py
deleted file mode 100644
index 1bbfa4a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.bigquery.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-datas = (copy_metadata('google-cloud-bigquery') +
- # the pakcage queries meta-data about ``request``
- copy_metadata('requests'))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.core.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.core.py
deleted file mode 100644
index db7c20e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.core.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('google-cloud-core')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.kms_v1.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.kms_v1.py
deleted file mode 100644
index 116d7f4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.kms_v1.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Client library URL: https://googleapis.dev/python/cloudkms/latest/
-# Import Example for client library:
-# https://cloud.google.com/kms/docs/reference/libraries#client-libraries-install-python
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('google-cloud-kms')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.pubsub_v1.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.pubsub_v1.py
deleted file mode 100644
index d022668..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.pubsub_v1.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('google-cloud-pubsub')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.speech.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.speech.py
deleted file mode 100644
index 7fed599..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.speech.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('google-cloud-speech')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.storage.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.storage.py
deleted file mode 100644
index 29866bc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.storage.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('google-cloud-storage')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.translate.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.translate.py
deleted file mode 100644
index 465b8e9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-google.cloud.translate.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('google-cloud-translate')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-googleapiclient.model.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-googleapiclient.model.py
deleted file mode 100644
index d1a2293..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-googleapiclient.model.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-from PyInstaller.utils.hooks import collect_data_files
-
-# googleapiclient.model queries the library version via
-# pkg_resources.get_distribution("google-api-python-client").version,
-# so we need to collect that package's metadata
-datas = copy_metadata('google_api_python_client')
-datas += collect_data_files('googleapiclient.discovery_cache', excludes=['*.txt', '**/__pycache__'])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-grapheme.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-grapheme.py
deleted file mode 100644
index fbe2a4b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-grapheme.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('grapheme')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-graphql_query.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-graphql_query.py
deleted file mode 100644
index f5a0f80..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-graphql_query.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2023, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-"""
-PyInstaller hook file for graphql_query. Tested with version 1.0.3.
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('graphql_query')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-great_expectations.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-great_expectations.py
deleted file mode 100644
index a19b7c4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-great_expectations.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('great_expectations')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gribapi.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gribapi.py
deleted file mode 100644
index 984a989..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gribapi.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-import pathlib
-
-from PyInstaller import isolated
-from PyInstaller.utils.hooks import collect_data_files, logger
-
-# Collect the headers (eccodes.h, gribapi.h) that are bundled with the package.
-datas = collect_data_files('gribapi')
-
-# Collect the eccodes shared library. Starting with eccodes 2.37.0, binary wheels with bundled shared library are
-# provided for linux and macOS, and since 2.39.0, also for Windows.
-
-
-# NOTE: custom isolated function is used here instead of `get_module_attribute('gribapi.bindings', 'library_path')`
-# hook utility function because with eccodes 2.37.0, `eccodes` needs to be imported before `gribapi` to avoid circular
-# imports... Also, this way, we can obtain the root directory of eccodes package at the same time.
-@isolated.decorate
-def get_eccodes_library_path():
- import eccodes
- import gribapi.bindings
-
- return (
- # Path to eccodes shared library used by the gribapi bindings.
- str(gribapi.bindings.library_path),
- # Path to eccodes package (implicitly assumed to be next to the gribapi package, since they are part of the
- # same eccodes dist).
- str(eccodes.__path__[0]),
- )
-
-
-binaries = []
-hiddenimports = []
-
-try:
- library_path, package_path = get_eccodes_library_path()
-except Exception:
- logger.warning("hook-gribapi: failed to query gribapi.bindings.library_path!", exc_info=True)
- library_path = None
-
-if library_path:
- if not os.path.isabs(library_path):
- from PyInstaller.depend.utils import _resolveCtypesImports
- resolved_binary = _resolveCtypesImports([os.path.basename(library_path)])
- if resolved_binary:
- library_path = resolved_binary[0][1]
- else:
- logger.warning("hook-gribapi: failed to resolve shared library name %r!", library_path)
- library_path = None
-else:
- logger.warning("hook-gribapi: could not determine path to eccodes shared library!")
-
-if library_path:
- # If we are collecting eccodes shared library that is bundled with eccodes >= 2.37.0 binary wheel, attempt to
- # preserve its parent directory layout. This ensures that the library is found at run-time, but implicitly requires
- # PyInstaller 6.x, whose binary dependency analysis (that might also pick up this shared library) also preserves the
- # parent directory layout of discovered shared libraries. With PyInstaller 5.x, this will result in duplication
- # because binary dependency analysis collects into top-level application directory, but that copy will not be
- # discovered at run-time, so duplication is unavoidable.
- library_parent_path = pathlib.PurePath(library_path).parent
- package_parent_path = pathlib.PurePath(package_path).parent
-
- if package_parent_path in library_parent_path.parents:
- # Should end up being `eccodes.libs` on Linux, `eccodes/.dylib` on macOS, and `eccodes` on Windows.
- dest_dir = str(library_parent_path.relative_to(package_parent_path))
- else:
- # External copy; collect into top-level application directory.
- dest_dir = '.'
-
- logger.info(
- "hook-gribapi: collecting eccodes shared library %r to destination directory %r", library_path, dest_dir
- )
- binaries.append((library_path, dest_dir))
-
- # If the shared library is available in the stand-alone `eccodeslib` package, add this package to to hidden imports,
- # so that `findlibs.find()` can import it and query its `__file__` attribute.
- if 'eccodeslib' in library_parent_path.parts:
- hiddenimports += ['eccodeslib']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-grpc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-grpc.py
deleted file mode 100644
index a592be2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-grpc.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('grpc')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gtk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gtk.py
deleted file mode 100644
index 64b3a4b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-gtk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['gtkglext', 'gdkgl', 'gdkglext', 'gdk', 'gtk.gdk', 'gtk.gtkgl',
- 'gtk.gtkgl._gtkgl', 'gtkgl', 'pangocairo', 'pango', 'atk',
- 'gobject', 'gtk.glade', 'cairo', 'gio',
- 'gtk.keysyms']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-h3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-h3.py
deleted file mode 100644
index 89f112b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-h3.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, copy_metadata
-
-# Starting with v4.0.0, h3 determines its version from its metadata.
-if is_module_satisfies("h3 >= 4.0.0"):
- datas = copy_metadata("h3")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-h5py.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-h5py.py
deleted file mode 100644
index fcc002f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-h5py.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for http://pypi.python.org/pypi/h5py/
-"""
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("h5py", lambda x: "tests" not in x)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hdf5plugin.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hdf5plugin.py
deleted file mode 100644
index b3ef44d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hdf5plugin.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for hdf5plugin: https://pypi.org/project/hdf5plugin/
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-datas = collect_dynamic_libs("hdf5plugin")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hexbytes.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hexbytes.py
deleted file mode 100644
index 8e29e8c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hexbytes.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, copy_metadata
-
-# Starting with v1.1.0, `hexbytes` queries its version from metadata.
-if is_module_satisfies("hexbytes >= 1.1.0"):
- datas = copy_metadata('hexbytes')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-httplib2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-httplib2.py
deleted file mode 100644
index 7789c1f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-httplib2.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This is needed to bundle cacerts.txt that comes with httplib2 module
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('httplib2')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-humanize.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-humanize.py
deleted file mode 100644
index 598dac7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-humanize.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-This modest package contains various common humanization utilities, like turning a number into a fuzzy human
-readable duration ("3 minutes ago") or into a human readable size or throughput.
-
-https://pypi.org/project/humanize
-
-This hook was tested against humanize 3.5.0.
-"""
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('humanize')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hydra.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hydra.py
deleted file mode 100644
index 0c61977..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-hydra.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_py310
-from PyInstaller.utils.hooks import collect_submodules, collect_data_files, is_module_satisfies
-
-# Collect core plugins.
-hiddenimports = collect_submodules('hydra._internal.core_plugins')
-
-# Hydra's plugin manager (`hydra.core.plugins.Plugins`) uses PEP-302 `find_module` / `load_module`, which has been
-# deprecated since python 3.4, and has been removed from PyInstaller's frozen importer in PyInstaller 5.8. For python
-# 3.10 and newer, they implemented new codepath that uses `find_spec`, but for earlier python versions, they opted to
-# keep using the old codepath.
-#
-# See: https://github.com/facebookresearch/hydra/pull/2531
-#
-# To work around the incompatibility with PyInstaller >= 5.8 when using python < 3.10, force collection of plugins as
-# source .py files. This way, they end up handled by python's built-in finder/importer instead of PyInstaller's
-# frozen importer.
-if not is_py310 and is_module_satisfies("PyInstaller >= 5.8"):
- module_collection_mode = {
- 'hydra._internal.core_plugins': 'py',
- 'hydra_plugins': 'py',
- }
-
-# Collect package's data files, such as default configuration files.
-datas = collect_data_files('hydra')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ijson.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ijson.py
deleted file mode 100644
index 60fa40c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ijson.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("ijson.backends")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imageio.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imageio.py
deleted file mode 100644
index 1cf0e6e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imageio.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for imageio: http://imageio.github.io/
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-datas = collect_data_files('imageio', subdir="resources")
-
-# imageio plugins are imported lazily since ImageIO version 2.11.0.
-# They are very light-weight, so we can safely include all of them.
-hiddenimports = collect_submodules('imageio.plugins')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imageio_ffmpeg.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imageio_ffmpeg.py
deleted file mode 100644
index 4fd469b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imageio_ffmpeg.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for imageio: http://imageio.github.io/
-
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies
-
-datas = collect_data_files('imageio_ffmpeg', subdir="binaries")
-
-# Starting with imageio_ffmpeg 0.5.0, `imageio_ffmpeg.binaries` is a package accessed via `importlib.resources`. Since
-# it is not directly imported anywhere, we need to add it to hidden imports.
-if is_module_satisfies('imageio_ffmpeg >= 0.5.0'):
- hiddenimports = ['imageio_ffmpeg.binaries']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imagingcontrol4.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imagingcontrol4.py
deleted file mode 100644
index 12cc0a8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-imagingcontrol4.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs("imagingcontrol4")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-iminuit.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-iminuit.py
deleted file mode 100644
index 4cbb6cb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-iminuit.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# add hooks for iminuit: https://github.com/scikit-hep/iminuit
-
-# iminuit imports subpackages through a cython module which aren't
-# found by default
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = []
-
-# the iminuit package contains tests which aren't needed when distributing
-for mod in collect_submodules('iminuit'):
- if not mod.startswith('iminuit.tests'):
- hiddenimports.append(mod)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-intake.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-intake.py
deleted file mode 100644
index 84a52a8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-intake.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_entry_point
-
-datas, hiddenimports = collect_entry_point('intake.drivers')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-iso639.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-iso639.py
deleted file mode 100644
index 974e73e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-iso639.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect data files for iso639
-datas = collect_data_files("iso639")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-itk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-itk.py
deleted file mode 100644
index 54bf624..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-itk.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("itk.Configuration")
-
-# `itk` requires `itk/Configuration` directory to exist on filesystem; collect source .py files from `itk.Configuration`
-# as a work-around that ensures the existence of this directory.
-module_collection_mode = {
- "itk.Configuration": "pyz+py",
-}
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jaraco.text.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jaraco.text.py
deleted file mode 100644
index 7126079..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jaraco.text.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for jaraco: https://pypi.python.org/pypi/jaraco.text/3.2.0
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('jaraco.text')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jedi.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jedi.py
deleted file mode 100644
index 9601dbe..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jedi.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for Jedi, a static analysis tool https://pypi.org/project/jedi/
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('jedi')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jieba.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jieba.py
deleted file mode 100644
index cc53edf..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jieba.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('jieba')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jinja2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jinja2.py
deleted file mode 100644
index f017894..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jinja2.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['jinja2.ext']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jinxed.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jinxed.py
deleted file mode 100644
index 28e7f36..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jinxed.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = [
- 'jinxed.terminfo.ansicon', 'jinxed.terminfo.vtwin10'
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jira.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jira.py
deleted file mode 100644
index dd64b1e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jira.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for https://pypi.python.org/pypi/jira/
-"""
-
-from PyInstaller.utils.hooks import copy_metadata, collect_submodules
-
-datas = copy_metadata('jira')
-hiddenimports = collect_submodules('jira')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonpath_rw_ext.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonpath_rw_ext.py
deleted file mode 100644
index 1914af4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonpath_rw_ext.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('jsonpath_rw_ext')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonrpcserver.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonrpcserver.py
deleted file mode 100644
index 71947a1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonrpcserver.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This is needed to bundle request-schema.json file needed by
-# jsonrpcserver package
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('jsonrpcserver')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonschema.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonschema.py
deleted file mode 100644
index ca1289c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonschema.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This is needed to bundle draft3.json and draft4.json files that come with jsonschema module.
-# NOTE: with jsonschema >= 4.18.0, the specification files are part of jsonschema_specifications package, and are
-# handled by the corresponding hook-jsonschema.
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata
-
-datas = collect_data_files('jsonschema')
-datas += copy_metadata('jsonschema')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonschema_specifications.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonschema_specifications.py
deleted file mode 100644
index bbbdafb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jsonschema_specifications.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-datas = collect_data_files('jsonschema_specifications')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jupyterlab.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jupyterlab.py
deleted file mode 100644
index ba77523..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-jupyterlab.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('jupyterlab')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-kaleido.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-kaleido.py
deleted file mode 100644
index e21c5eb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-kaleido.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('kaleido')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-khmernltk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-khmernltk.py
deleted file mode 100644
index 021d23c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-khmernltk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('khmernltk')
-hiddenimports = ['sklearn_crfsuite']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-kinterbasdb.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-kinterbasdb.py
deleted file mode 100644
index dff9f4b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-kinterbasdb.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# kinterbasdb
-hiddenimports = ['k_exceptions', 'services', 'typeconv_naked',
- 'typeconv_backcompat', 'typeconv_23plus',
- 'typeconv_datetime_stdlib', 'typeconv_datetime_mx',
- 'typeconv_datetime_naked', 'typeconv_fixed_fixedpoint',
- 'typeconv_fixed_stdlib', 'typeconv_text_unicode',
- 'typeconv_util_isinstance', '_kinterbasdb', '_kiservices']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langchain.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langchain.py
deleted file mode 100644
index 6362f10..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langchain.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies
-
-# This was required with langchain < 1.0.0; in contemporary versions, the package does not contain any data files,
-# so this should be effectively a no-op.
-datas = collect_data_files('langchain')
-
-# In langchain 1.2.1 the import logic for optional add-on packages was refactored, and direct imports in conditional
-# blocks were replaced with dictionary-based look-up; see https://github.com/langchain-ai/langchain/pull/32813
-# So now we need to use that same dictionary to explicitly collect the optional packages that happen to be installed
-# in the build environment.
-if is_module_satisfies('langchain >= 1.2.1'):
- from PyInstaller import isolated
-
- @isolated.decorate
- def get_optional_packages(var_name):
- packages = set()
-
- try:
- import langchain.chat_models.base
- providers = getattr(langchain.chat_models.base, var_name)
- packages.update(package_name for package_name, *_ in providers.values())
- except Exception:
- pass
-
- try:
- import langchain.embeddings.base
- providers = getattr(langchain.embeddings.base, var_name)
- packages.update(package_name for package_name, *_ in providers.values())
- except Exception:
- pass
-
- return sorted(packages)
-
- # langchain 1.2.10 renamed the `_SUPPORTED_PROVIDERS` into `_BUILTIN_PROVIDERS`.
- if is_module_satisfies('langchain >= 1.2.10'):
- var_name = '_BUILTIN_PROVIDERS'
- else:
- var_name = '_SUPPORTED_PROVIDERS'
-
- hiddenimports = get_optional_packages(var_name)
- warn_on_missing_hiddenimports = False
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langchain_classic.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langchain_classic.py
deleted file mode 100644
index 0a7d5bc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langchain_classic.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('langchain_classic')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langcodes.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langcodes.py
deleted file mode 100644
index 65c4723..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langcodes.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('langcodes')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langdetect.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langdetect.py
deleted file mode 100644
index 2bfe9ac..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-langdetect.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("langdetect")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-laonlp.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-laonlp.py
deleted file mode 100644
index 2c8b577..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-laonlp.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('laonlp')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lark.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lark.py
deleted file mode 100644
index 653f810..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lark.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("lark")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ldfparser.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ldfparser.py
deleted file mode 100644
index 42e9033..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ldfparser.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('ldfparser')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lensfunpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lensfunpy.py
deleted file mode 100644
index a44d5e4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lensfunpy.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-# bundle xml DB files, skip other files (like DLL files on Windows)
-datas = list(filter(lambda p: p[0].endswith('.xml'), collect_data_files('lensfunpy')))
-hiddenimports = ['numpy', 'enum']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-libaudioverse.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-libaudioverse.py
deleted file mode 100644
index 9d28d60..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-libaudioverse.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Libaudioverse: https://github.com/libaudioverse/libaudioverse
-"""
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs('libaudioverse')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-librosa.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-librosa.py
deleted file mode 100644
index 2767038..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-librosa.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-# Collect all data files from the package. These include:
-# - package's and subpackages' .pyi files for `lazy_loader`
-# - example data in librosa/util, required by `librosa.util.files`
-# - librosa/core/intervals.msgpack, required by `librosa.core.intervals`
-#
-# We explicitly exclude `__pycache__` because it might contain .nbi and .nbc files from `numba` cache, which are not
-# re-used by `numba` codepaths in the frozen application and are instead re-compiled in user-global cache directory.
-datas = collect_data_files("librosa", excludes=['**/__pycache__'])
-
-# And because modules are lazily loaded, we need to collect them all.
-hiddenimports = collect_submodules("librosa")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lightgbm.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lightgbm.py
deleted file mode 100644
index 3718cc4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lightgbm.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# A fast, distributed, high performance gradient boosting
-# (GBT, GBDT, GBRT, GBM or MART) framework based on decision
-# tree algorithms, used for ranking, classification and
-# many other machine learning tasks.
-#
-# https://github.com/microsoft/LightGBM
-#
-# Tested with:
-# Tested on Windows 10 & macOS 10.14 with Python 3.7.5
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs('lightgbm')
-binaries += collect_dynamic_libs('sklearn')
-binaries += collect_dynamic_libs('scipy')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lightning.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lightning.py
deleted file mode 100644
index 840bdb9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lightning.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect version.info (which is read during package import at run-time). Avoid collecting data from `lightning.app`,
-# which likely does not work with PyInstaller without additional tricks (if we need to collect that data, it should
-# be done in separate `lightning.app` hook).
-datas = collect_data_files(
- 'lightning',
- includes=['version.info'],
-)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-limits.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-limits.py
deleted file mode 100644
index 3bd9810..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-limits.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("limits")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-linear_operator.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-linear_operator.py
deleted file mode 100644
index 73c8621..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-linear_operator.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ---------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lingua.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lingua.py
deleted file mode 100644
index 2d6fbb5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lingua.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('lingua')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-litestar.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-litestar.py
deleted file mode 100644
index ca35e5a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-litestar.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-hiddenimports = collect_submodules('litestar.logging')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-llvmlite.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-llvmlite.py
deleted file mode 100644
index 108f521..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-llvmlite.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# A lightweight LLVM python binding for writing JIT compilers
-# https://github.com/numba/llvmlite
-#
-# Tested with:
-# llvmlite 0.11 (Anaconda 4.1.1, Windows), llvmlite 0.13 (Linux)
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs("llvmlite")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-logilab.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-logilab.py
deleted file mode 100644
index 074fc40..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-logilab.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# ***************************************************
-# hook-logilab.py - PyInstaller hook file for logilab
-# ***************************************************
-# The following was written about logilab, version 1.1.0, based on executing
-# ``pip show logilab-common``.
-#
-# In logilab.common, line 33::
-#
-# __version__ = pkg_resources.get_distribution('logilab-common').version
-#
-# Therefore, we need metadata for logilab.
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('logilab-common')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.etree.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.etree.py
deleted file mode 100644
index b53e89e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.etree.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['lxml._elementpath', 'gzip', 'contextlib']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.isoschematron.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.isoschematron.py
deleted file mode 100644
index 8ed7659..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.isoschematron.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-import os
-
-# Auxiliary data for isoschematron
-datas = collect_data_files('lxml', subdir=os.path.join('isoschematron', 'resources'))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.objectify.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.objectify.py
deleted file mode 100644
index e8cb2bf..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.objectify.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['lxml.etree']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.py
deleted file mode 100644
index 4a70af6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lxml.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# lxml is not fully embedded when using standard hiddenimports
-# see https://github.com/pyinstaller/pyinstaller/issues/5306
-#
-# Tested with lxml 4.6.1
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('lxml')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lz4.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lz4.py
deleted file mode 100644
index 1b01cd4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-lz4.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-# hook for https://github.com/python-lz4/python-lz4
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('lz4')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-magic.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-magic.py
deleted file mode 100644
index e5efe63..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-magic.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# hook for https://pypi.org/project/python-magic-bin
-
-from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
-
-datas = collect_data_files('magic')
-binaries = collect_dynamic_libs('magic')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mako.codegen.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mako.codegen.py
deleted file mode 100644
index dcaefa3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mako.codegen.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-codegen generates Python code that is then executed through exec().
-This Python code imports the following modules.
-"""
-
-hiddenimports = ['mako.cache', 'mako.runtime', 'mako.filters']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mariadb.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mariadb.py
deleted file mode 100644
index 6466ba1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mariadb.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_submodules
-
-# The MariaDB uses a .pyd file that imports ``decimal`` module within its
-# module initialization function. On recent python versions (> 3.8), the decimal
-# module seems to be picked up nevertheless (presumably due to import in some
-# other module), but it is better not to rely on that, and ensure it is always
-# collected as a hidden import.
-hiddenimports = ['decimal']
-
-# mariadb >= 1.1.0 requires several hidden imports from mariadb.constants.
-# Collect them all, just to be on the safe side...
-if is_module_satisfies("mariadb >= 1.1.0"):
- hiddenimports += collect_submodules("mariadb.constants")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-markdown.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-markdown.py
deleted file mode 100644
index 9918feb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-markdown.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import (
- collect_submodules,
- copy_metadata,
- is_module_satisfies,
-)
-
-hiddenimports = collect_submodules('markdown.extensions')
-
-# Markdown 3.3 introduced markdown.htmlparser submodule with hidden
-# dependency on html.parser
-if is_module_satisfies("markdown >= 3.3"):
- hiddenimports += ['html.parser']
-
-# Extensions can be referenced by short names, e.g. "extra", through a mechanism
-# using entry-points. Thus we need to collect the package metadata as well.
-datas = copy_metadata("markdown")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mecab.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mecab.py
deleted file mode 100644
index 2b30f86..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mecab.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('mecab')
-datas += collect_data_files('mecab_ko_dic')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-metpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-metpy.py
deleted file mode 100644
index be84bb9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-metpy.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, collect_data_files
-
-# MetPy requires metadata, because it queries its version via
-# pkg_resources.get_distribution(__package__).version or, in newer
-# versions, importlib.metadata.version(__package__)
-datas = copy_metadata('metpy')
-
-# Collect data files
-datas += collect_data_files('metpy')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-migrate.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-migrate.py
deleted file mode 100644
index b1ec0c9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-migrate.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-# hook for https://github.com/openstack/sqlalchemy-migrate
-# Since v0.12.0 importing migrate requires metadata to resolve __version__
-# attribute
-
-from PyInstaller.utils.hooks import copy_metadata, is_module_satisfies
-
-if is_module_satisfies('sqlalchemy-migrate >= 0.12.0'):
- datas = copy_metadata('sqlalchemy-migrate')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mimesis.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mimesis.py
deleted file mode 100644
index 5accde1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mimesis.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# The bundled 'data/' directory containing locale .json files needs to be collected (as data file).
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('mimesis')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-minecraft_launcher_lib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-minecraft_launcher_lib.py
deleted file mode 100644
index e06a0a9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-minecraft_launcher_lib.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("minecraft_launcher_lib")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mistune.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mistune.py
deleted file mode 100644
index ea9a804..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mistune.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for nanite: https://pypi.python.org/pypi/nanite
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_submodules
-
-# As of version 3.0.0, mistune loads its plugins indirectly (but does so during package import nevertheless).
-if is_module_satisfies("mistune >= 3.0.0"):
- hiddenimports = collect_submodules("mistune.plugins")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mnemonic.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mnemonic.py
deleted file mode 100644
index 68c56e5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mnemonic.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('mnemonic')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-monai.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-monai.py
deleted file mode 100644
index 82676db..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-monai.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = "pyz+py"
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-moviepy.audio.fx.all.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-moviepy.audio.fx.all.py
deleted file mode 100644
index 4bb9c78..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-moviepy.audio.fx.all.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# `moviepy.audio.fx.all` programmatically imports and forwards all submodules of `moviepy.audio.fx`, so we need to
-# collect those as hidden imports.
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('moviepy.audio.fx')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-moviepy.video.fx.all.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-moviepy.video.fx.all.py
deleted file mode 100644
index cc0b924..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-moviepy.video.fx.all.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# `moviepy.video.fx.all` programmatically imports and forwards all submodules of `moviepy.video.fx`, so we need to
-# collect those as hidden imports.
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('moviepy.video.fx')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mpl_toolkits.basemap.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mpl_toolkits.basemap.py
deleted file mode 100644
index 839b072..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-mpl_toolkits.basemap.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-from PyInstaller.compat import is_win, base_prefix
-
-import os
-
-# mpl_toolkits.basemap (tested with v.1.0.7) is shipped with auxiliary data,
-# usually stored in mpl_toolkits\basemap\data and used to plot maps
-datas = collect_data_files('mpl_toolkits.basemap', subdir='data')
-
-# check if the data has been effectively found
-if len(datas) == 0:
-
- # - conda-specific
-
- if is_win:
- tgt_basemap_data = os.path.join('Library', 'share', 'basemap')
- src_basemap_data = os.path.join(base_prefix, 'Library', 'share', 'basemap')
-
- else: # both linux and darwin
- tgt_basemap_data = os.path.join('share', 'basemap')
- src_basemap_data = os.path.join(base_prefix, 'share', 'basemap')
-
- if os.path.exists(src_basemap_data):
- datas.append((src_basemap_data, tgt_basemap_data))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-msoffcrypto.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-msoffcrypto.py
deleted file mode 100644
index 74f75e0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-msoffcrypto.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-msoffcrypto contains hidden metadata as of v4.12.0
-"""
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('msoffcrypto-tool')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nacl.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nacl.py
deleted file mode 100644
index 9694133..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nacl.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Tested with PyNaCl 0.3.0 on Mac OS X.
-
-import os.path
-import glob
-
-from PyInstaller.compat import EXTENSION_SUFFIXES
-from PyInstaller.utils.hooks import collect_data_files, get_module_file_attribute
-
-datas = collect_data_files('nacl')
-
-# Include the cffi extensions as binaries in a subfolder named like the package.
-binaries = []
-nacl_dir = os.path.dirname(get_module_file_attribute('nacl'))
-for ext in EXTENSION_SUFFIXES:
- ffimods = glob.glob(os.path.join(nacl_dir, '_lib', '*_cffi_*%s*' % ext))
- dest_dir = os.path.join('nacl', '_lib')
- for f in ffimods:
- binaries.append((f, dest_dir))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-names.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-names.py
deleted file mode 100644
index ff33b59..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-names.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# names: generate random names
-# Module PyPI Homepage: https://pypi.python.org/pypi/names/0.3.0
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('names')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nanite.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nanite.py
deleted file mode 100644
index 9d37ecc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nanite.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for nanite: https://pypi.python.org/pypi/nanite
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('nanite')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-narwhals.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-narwhals.py
deleted file mode 100644
index 0c8109f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-narwhals.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import sys
-from PyInstaller.utils.hooks import can_import_module, copy_metadata, is_module_satisfies
-
-# Starting with narwhals 1.35.0, we need to collect metadata for `typing_extensions` if the module is available.
-# The codepath that checks metadata for `typing_extensions` is not executed under python >= 3.13, so we can avoid
-# collection there.
-datas = []
-if sys.version_info < (3, 13): # PyInstaller.compat.is_py313 is available only in PyInstaller >= 6.10.0.
- if is_module_satisfies("narwhals >= 1.35.0") and can_import_module("typing_extensions"):
- datas += copy_metadata("typing_extensions")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbconvert.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbconvert.py
deleted file mode 100644
index fefb5ae..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbconvert.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata
-
-datas = collect_data_files('nbconvert')
-
-# nbconvert uses entrypoints to read nbconvert.exporters from metadata file entry_points.txt.
-datas += copy_metadata('nbconvert')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbdime.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbdime.py
deleted file mode 100644
index 38452ca..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbdime.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('nbdime')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbformat.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbformat.py
deleted file mode 100644
index d193864..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbformat.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('nbformat')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbt.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbt.py
deleted file mode 100644
index 676ee32..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nbt.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-hiddenimports = ["nbt.nbt", "nbt.world", "nbt.region", "nbt.chunk"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ncclient.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ncclient.py
deleted file mode 100644
index d41c061..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ncclient.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for ncclient. ncclient is a Python library that facilitates client-side
-scripting and application development around the NETCONF protocol.
-https://pypi.python.org/pypi/ncclient
-
-This hook was tested with ncclient 0.4.3.
-"""
-from PyInstaller.utils.hooks import collect_submodules
-
-# Modules 'ncclient.devices.*' are dynamically loaded and PyInstaller
-# is not able to find them.
-hiddenimports = collect_submodules('ncclient.devices')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-netCDF4.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-netCDF4.py
deleted file mode 100644
index 259d71c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-netCDF4.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_win
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# netCDF4 (tested with v.1.1.9) has some hidden imports
-hiddenimports = ['netCDF4.utils']
-
-# Around netCDF4 1.4.0, netcdftime changed name to cftime
-if is_module_satisfies("netCDF4 < 1.4.0"):
- hiddenimports += ['netcdftime']
-else:
- hiddenimports += ['cftime']
-
-# Starting with netCDF 1.6.4, certifi is a hidden import made in
-# netCDF4/_netCDF4.pyx.
-if is_module_satisfies("netCDF4 >= 1.6.4"):
- hiddenimports += ['certifi']
-
-# netCDF 1.6.2 is the first version that uses `delvewheel` for bundling DLLs in Windows PyPI wheels. While contemporary
-# PyInstaller versions automatically pick up DLLs from external `netCDF4.libs` directory, this does not work on Anaconda
-# python 3.8 and 3.9 due to defunct `os.add_dll_directory`, which forces `delvewheel` to use the old load-order file
-# approach. So we need to explicitly ensure that load-order file as well as DLLs are collected.
-if is_win and is_module_satisfies("netCDF4 >= 1.6.2"):
- if is_module_satisfies("PyInstaller >= 5.6"):
- from PyInstaller.utils.hooks import collect_delvewheel_libs_directory
- datas, binaries = collect_delvewheel_libs_directory("netCDF4")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nicegui.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nicegui.py
deleted file mode 100644
index 539dfe0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nicegui.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('nicegui')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-niquests.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-niquests.py
deleted file mode 100644
index b9ec1d0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-niquests.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("niquests")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nltk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nltk.py
deleted file mode 100644
index fa1cf2b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nltk.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# hook for nltk
-import nltk
-import os
-from PyInstaller.utils.hooks import collect_data_files
-
-# add datas for nltk
-datas = collect_data_files('nltk', False)
-
-# loop through the data directories and add them
-for p in nltk.data.path:
- if os.path.exists(p):
- datas.append((p, "nltk_data"))
-
-# nltk.chunk.named_entity should be included
-hiddenimports = ["nltk.chunk.named_entity"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nnpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nnpy.py
deleted file mode 100644
index e4d3951..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nnpy.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for https://pypi.org/project/nnpy/
-"""
-
-hiddenimports = ['_cffi_backend']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-notebook.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-notebook.py
deleted file mode 100644
index ea91dec..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-notebook.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-from jupyter_core.paths import jupyter_config_path, jupyter_path
-
-# collect modules for handlers
-hiddenimports = collect_submodules('notebook', filter=lambda name: name.endswith('.handles'))
-hiddenimports.append('notebook.services.shutdown')
-
-datas = collect_data_files('notebook')
-
-# Collect share and etc folder for pre-installed extensions
-datas += [(path, 'share/jupyter')
- for path in jupyter_path() if os.path.exists(path)]
-datas += [(path, 'etc/jupyter')
- for path in jupyter_config_path() if os.path.exists(path)]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numba.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numba.py
deleted file mode 100644
index 9f69d34..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numba.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# NumPy aware dynamic Python compiler using LLVM
-# https://github.com/numba/numba
-#
-# Tested with:
-# numba 0.26 (Anaconda 4.1.1, Windows), numba 0.28 (Linux)
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-excludedimports = ["IPython", "scipy"]
-hiddenimports = ["llvmlite"]
-
-# numba 0.59.0 updated its vendored version of cloudpickle to 3.0.0; this version keeps `cloudpickle_fast` module
-# around for backward compatibility with existing pickled data, but does not import it directly anymore.
-if is_module_satisfies("numba >= 0.59.0"):
- hiddenimports += ["numba.cloudpickle.cloudpickle_fast"]
-
-# numba 0.61 introduced new type system with several dynamic redirects using `numba.core.utils._RedirectSubpackage`;
-# depending on the run-time value of `numba.config.USE_LEGACY_TYPE_SYSTEM`, either "old" or "new" module variant is
-# loaded. All of these seem to be loaded when `numba` is imported, so there is no need for finer granularity. Also,
-# as the config value might be manipulated at run-time (e.g., via environment variable), we need to collect both old
-# and new module variants.
-# numba 0.62 reverted the change, removing the new type system.
-if is_module_satisfies("numba >= 0.61.0rc1, < 0.62.0rc1"):
- # NOTE: `numba.core.typing` is also referenced indirectly via `_RedirectSubpackage`, but we do not need a
- # hidden import entry for it, because we have entries for its submodules.
- modules_old = [
- 'numba.core.datamodel.old_models',
- 'numba.core.old_boxing',
- 'numba.core.types.old_scalars',
- 'numba.core.typing.old_builtins',
- 'numba.core.typing.old_cmathdecl',
- 'numba.core.typing.old_mathdecl',
- 'numba.cpython.old_builtins',
- 'numba.cpython.old_hashing',
- 'numba.cpython.old_mathimpl',
- 'numba.cpython.old_numbers',
- 'numba.cpython.old_tupleobj',
- 'numba.np.old_arraymath',
- 'numba.np.random.old_distributions',
- 'numba.np.random.old_random_methods',
- ]
- modules_new = [name.replace('.old_', '.new_') for name in modules_old]
- hiddenimports += modules_old + modules_new
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numbers_parser.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numbers_parser.py
deleted file mode 100644
index d6fd535..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numbers_parser.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Ensure that `numbers_parser/data/empty.numbers` is collected.
-datas = collect_data_files('numbers_parser')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numcodecs.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numcodecs.py
deleted file mode 100644
index 7a6f6fd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-numcodecs.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# compat_ext is only imported from pyx files, so it is missed
-hiddenimports = ['numcodecs.compat_ext']
-
-# numcodecs v0.15.0 added an import of `deprecated` (from `Deprecated` dist) in one of its cythonized extension.
-if is_module_satisfies('numcodecs >= 0.15.0'):
- hiddenimports += ['deprecated']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cublas.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cublas.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cublas.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_cupti.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_cupti.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_cupti.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_nvcc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_nvcc.py
deleted file mode 100644
index 13172ae..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_nvcc.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-# Ensures that versioned .so files are collected
-binaries = collect_nvidia_cuda_binaries(__file__)
-
-# Prevent binary dependency analysis from creating symlinks to top-level application directory for shared libraries
-# from this package. Requires PyInstaller >= 6.11.0; no-op in earlier versions.
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
-
-# Collect additional resources:
-# - ptxas executable (which strictly speaking, should be collected as a binary)
-# - nvvm/libdevice/libdevice.10.bc file
-# - C headers; assuming ptxas requires them - if that is not the case, we could filter them out.
-datas = collect_data_files('nvidia.cuda_nvcc')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_nvrtc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_nvrtc.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_nvrtc.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_runtime.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_runtime.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cuda_runtime.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cudnn.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cudnn.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cudnn.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cufft.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cufft.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cufft.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.curand.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.curand.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.curand.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cusolver.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cusolver.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cusolver.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cusparse.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cusparse.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.cusparse.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nccl.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nccl.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nccl.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nvjitlink.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nvjitlink.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nvjitlink.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nvtx.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nvtx.py
deleted file mode 100644
index 3404162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-nvidia.nvtx.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.nvidia_cuda import (
- collect_nvidia_cuda_binaries,
- create_symlink_suppression_patterns,
-)
-
-binaries = collect_nvidia_cuda_binaries(__file__)
-bindepend_symlink_suppression = create_symlink_suppression_patterns(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-office365.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-office365.py
deleted file mode 100644
index 37a007f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-office365.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Office365-REST-Python-Client contains xml templates that are needed by some methods
-This hook ensures that all of the data used by the package is bundled
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("office365")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-onnxruntime.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-onnxruntime.py
deleted file mode 100644
index 9c7e807..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-onnxruntime.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-# Collect provider plugins from onnxruntime/capi.
-binaries = collect_dynamic_libs("onnxruntime")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-opencc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-opencc.py
deleted file mode 100644
index 9204053..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-opencc.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('opencc')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-openpyxl.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-openpyxl.py
deleted file mode 100644
index 299a1be..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-openpyxl.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the openpyxl module: https://pypi.python.org/pypi/openpyxl
-# Tested with openpyxl 2.3.4, Python 2.7, Windows
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('openpyxl')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-opentelemetry.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-opentelemetry.py
deleted file mode 100644
index d8e3e9e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-opentelemetry.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_entry_point
-
-# All known `opentelementry_` entry-point groups
-ENTRY_POINT_GROUPS = (
- 'opentelemetry_context',
- 'opentelemetry_environment_variables',
- 'opentelemetry_id_generator',
- 'opentelemetry_logger_provider',
- 'opentelemetry_logs_exporter',
- 'opentelemetry_meter_provider',
- 'opentelemetry_metrics_exporter',
- 'opentelemetry_propagator',
- 'opentelemetry_resource_detector',
- 'opentelemetry_tracer_provider',
- 'opentelemetry_traces_exporter',
- 'opentelemetry_traces_sampler',
-)
-
-# Collect entry points
-datas = set()
-hiddenimports = set()
-
-for entry_point_group in ENTRY_POINT_GROUPS:
- ep_datas, ep_hiddenimports = collect_entry_point(entry_point_group)
- datas.update(ep_datas)
- hiddenimports.update(ep_hiddenimports)
-
-datas = list(datas)
-hiddenimports = list(hiddenimports)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-orjson.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-orjson.py
deleted file mode 100644
index 04092dc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-orjson.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Forced import of these modules happens on first orjson import
-# and orjson is a compiled extension module.
-hiddenimports = [
- 'uuid',
- 'zoneinfo',
- 'enum',
- 'json',
- 'dataclasses',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-osgeo.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-osgeo.py
deleted file mode 100644
index dbc0b4a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-osgeo.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-from PyInstaller.compat import is_win, is_darwin
-
-import os
-import sys
-
-# The osgeo libraries require auxiliary data and may have hidden dependencies.
-# There are several possible configurations on how these libraries can be
-# deployed.
-# This hook evaluates the cases when:
-# - the `data` folder is present "in-source" (sharing the same namespace folder
-# as the code libraries)
-# - the `data` folder is present "out-source" (for instance, on Anaconda for
-# Windows, in PYTHONHOME/Library/data)
-# In this latter case, the hook also checks for the presence of `proj` library
-# (e.g., on Windows in PYTHONHOME) for being added to the bundle.
-#
-# This hook has been tested with gdal (v.1.11.2 and 1.11.3) on:
-# - Win 7 and 10 64bit
-# - Ubuntu 15.04 64bit
-# - Mac OS X Yosemite 10.10
-#
-# TODO: Fix for gdal>=2.0.0, <2.0.3: 'NameError: global name 'help' is not defined'
-
-# flag used to identify an Anaconda environment
-is_conda = False
-
-# Auxiliary data:
-#
-# - general case (data in 'osgeo/data'):
-datas = collect_data_files('osgeo', subdir='data')
-
-# check if the data has been effectively found in 'osgeo/data/gdal'
-if len(datas) == 0:
-
- if hasattr(sys, 'real_prefix'): # check if in a virtual environment
- root_path = sys.real_prefix
- else:
- root_path = sys.prefix
-
- # - conda-specific
- if is_win:
- tgt_gdal_data = os.path.join('Library', 'share', 'gdal')
- src_gdal_data = os.path.join(root_path, 'Library', 'share', 'gdal')
- if not os.path.exists(src_gdal_data):
- tgt_gdal_data = os.path.join('Library', 'data')
- src_gdal_data = os.path.join(root_path, 'Library', 'data')
-
- else: # both linux and darwin
- tgt_gdal_data = os.path.join('share', 'gdal')
- src_gdal_data = os.path.join(root_path, 'share', 'gdal')
-
- if os.path.exists(src_gdal_data):
- is_conda = True
- datas.append((src_gdal_data, tgt_gdal_data))
- # a real-time hook takes case to define the path for `GDAL_DATA`
-
-# Hidden dependencies
-if is_conda:
- # if `proj.4` is present, it provides additional functionalities
- if is_win:
- proj4_lib = os.path.join(root_path, 'proj.dll')
- elif is_darwin:
- proj4_lib = os.path.join(root_path, 'lib', 'libproj.dylib')
- else: # assumed linux-like settings
- proj4_lib = os.path.join(root_path, 'lib', 'libproj.so')
-
- if os.path.exists(proj4_lib):
- binaries = [(proj4_lib, ".")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pandas_flavor.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pandas_flavor.py
deleted file mode 100644
index a41c36a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pandas_flavor.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# As of version 0.3.0, pandas_flavor uses lazy loader to import `register` and `xarray` sub-modules. In earlier
-# versions, these used to be imported directly. This was removed in 0.7.0.
-if is_module_satisfies("pandas_flavor >= 0.3.0, < 0.7.0"):
- hiddenimports = ['pandas_flavor.register', 'pandas_flavor.xarray']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-panel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-panel.py
deleted file mode 100644
index 51c411f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-panel.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-datas = collect_data_files("panel")
-
-# Some models are lazy-loaded on runtime, so we need to collect them
-hiddenimports = collect_submodules("panel.models")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-parsedatetime.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-parsedatetime.py
deleted file mode 100644
index 5392a72..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-parsedatetime.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2005-2020, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-"""
-Fixes https://github.com/pyinstaller/pyinstaller/issues/4995
-
-Modules under parsedatetime.pdt_locales.* are lazily loaded using __import__.
-But they are conviniently listed in parsedatetime.pdt_locales.locales.
-
-Tested on versions:
-
-- 1.1.1
-- 1.5
-- 2.0
-- 2.6 (latest)
-
-"""
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("parsedatetime.pdt_locales")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-parso.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-parso.py
deleted file mode 100644
index c00caf1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-parso.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -----------------------------------------------------------------------------
-# Copyright (c) 2013-2018, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# -----------------------------------------------------------------------------
-
-# Hook for Parso, a static analysis tool https://pypi.org/project/jedi/ (IPython dependency)
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('parso')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-passlib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-passlib.py
deleted file mode 100644
index 9189b8e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-passlib.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Handlers are imported by a lazy-load proxy, based on a
-# name-to-package mapping. Collect all handlers to ease packaging.
-# If you want to reduce the size of your application, used
-# `--exclude-module` to remove unused ones.
-hiddenimports = [
- "passlib.handlers",
- "passlib.handlers.digests",
- "configparser",
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-paste.exceptions.reporter.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-paste.exceptions.reporter.py
deleted file mode 100644
index 9b80044..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-paste.exceptions.reporter.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Some modules use the old-style import: explicitly include
-the new module when the old one is referenced.
-"""
-
-hiddenimports = ["email.mime.text", "email.mime.multipart"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-patoolib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-patoolib.py
deleted file mode 100644
index 57d1aa6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-patoolib.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2017-2024, PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-#-----------------------------------------------------------------------------
-
-
-"""
-patoolib uses importlib and pyinstaller doesn't find it and add it to the list of needed modules
-"""
-
-from PyInstaller.utils.hooks import collect_submodules
-hiddenimports = collect_submodules('patoolib.programs')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-patsy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-patsy.py
deleted file mode 100644
index 39dbf7b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-patsy.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['patsy.builtins']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pdfminer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pdfminer.py
deleted file mode 100644
index e4da9a7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pdfminer.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pdfminer')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pendulum.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pendulum.py
deleted file mode 100644
index 5649b4a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pendulum.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-# Pendulum checks for locale modules via os.path.exists before import.
-# If the include_py_files option is turned off, this check fails, pendulum
-# will raise a ValueError.
-datas = collect_data_files("pendulum.locales", include_py_files=True)
-hiddenimports = collect_submodules("pendulum.locales")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-phonenumbers.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-phonenumbers.py
deleted file mode 100644
index 1494a21..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-phonenumbers.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# Hook for the phonenumbers package: https://pypi.org/project/phonenumbers/
-#
-# Tested with phonenumbers 8.9.7 and Python 3.6.1, on Ubuntu 16.04 64bit.
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('phonenumbers')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pingouin.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pingouin.py
deleted file mode 100644
index dd9989b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pingouin.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pingouin')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pint.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pint.py
deleted file mode 100644
index 49d2dee..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pint.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata
-
-datas = collect_data_files('pint')
-datas += copy_metadata('pint')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pinyin.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pinyin.py
deleted file mode 100644
index ad8c547..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pinyin.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the pinyin package: https://pypi.python.org/pypi/pinyin
-# Tested with pinyin 0.4.0 and Python 3.6.2, on Windows 10 x64.
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# pinyin relies on 'Mandarin.dat' and 'cedict.txt.gz'
-# for character and word translation.
-datas = collect_data_files('pinyin')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-platformdirs.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-platformdirs.py
deleted file mode 100644
index 4d6b250..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-platformdirs.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_darwin, is_win
-
-modules = ["platformdirs"]
-
-# platfromdirs contains dynamically loaded per-platform submodules.
-if is_darwin:
- modules.append("platformdirs.macos")
-elif is_win:
- modules.append("platformdirs.windows")
-else:
- # default to unix for all other platforms
- # this includes unix, cygwin, and msys2
- modules.append("platformdirs.unix")
-
-hiddenimports = modules
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-plotly.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-plotly.py
deleted file mode 100644
index be8714e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-plotly.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-from PyInstaller.utils.hooks import collect_submodules
-
-datas = collect_data_files('plotly', includes=['package_data/**/*.*', 'validators/**/*.*'])
-hiddenimports = collect_submodules('plotly.validators') + ['pandas', 'cmath']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pointcept.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pointcept.py
deleted file mode 100644
index 5d36ef1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pointcept.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pptx.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pptx.py
deleted file mode 100644
index fae9505..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pptx.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pptx.templates')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-prettytable.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-prettytable.py
deleted file mode 100644
index d049b3a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-prettytable.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, is_module_satisfies
-
-# Starting with v3.12.0, `prettytable` does not query its version from metadata.
-if is_module_satisfies('prettytable < 3.12.0'):
- datas = copy_metadata('prettytable')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psutil.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psutil.py
deleted file mode 100644
index 9976cad..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psutil.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-import os
-import sys
-
-# see https://github.com/giampaolo/psutil/blob/release-5.9.5/psutil/_common.py#L82
-WINDOWS = os.name == "nt"
-LINUX = sys.platform.startswith(("linux", "android"))
-MACOS = sys.platform.startswith("darwin")
-FREEBSD = sys.platform.startswith(("freebsd", "midnightbsd"))
-OPENBSD = sys.platform.startswith("openbsd")
-NETBSD = sys.platform.startswith("netbsd")
-BSD = FREEBSD or OPENBSD or NETBSD
-SUNOS = sys.platform.startswith(("sunos", "solaris"))
-AIX = sys.platform.startswith("aix")
-
-excludedimports = [
- "psutil._pslinux",
- "psutil._pswindows",
- "psutil._psosx",
- "psutil._psbsd",
- "psutil._pssunos",
- "psutil._psaix",
-]
-
-# see https://github.com/giampaolo/psutil/blob/release-5.9.5/psutil/__init__.py#L97
-if LINUX:
- excludedimports.remove("psutil._pslinux")
-elif WINDOWS:
- excludedimports.remove("psutil._pswindows")
- # see https://github.com/giampaolo/psutil/blob/release-5.9.5/psutil/_common.py#L856
- # This will exclude `curses` for windows
- excludedimports.append("curses")
-elif MACOS:
- excludedimports.remove("psutil._psosx")
-elif BSD:
- excludedimports.remove("psutil._psbsd")
-elif SUNOS:
- excludedimports.remove("psutil._pssunos")
-elif AIX:
- excludedimports.remove("psutil._psaix")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psychopy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psychopy.py
deleted file mode 100644
index 4bee8d6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psychopy.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Tested on Windows 7 64bit with python 2.7.6 and PsychoPy 1.81.03
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('psychopy')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psycopg2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psycopg2.py
deleted file mode 100644
index 7698bbb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psycopg2.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['mx.DateTime']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psycopg_binary.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psycopg_binary.py
deleted file mode 100644
index 77494c3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-psycopg_binary.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# The `pyscopg_binary._uuid` module is imported from the `psycopg_binary._psycopg` binary extension when working with
-# data of UUID data type.
-hiddenimports = ['psycopg_binary._uuid']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-publicsuffix2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-publicsuffix2.py
deleted file mode 100644
index 01a5ec2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-publicsuffix2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('publicsuffix2')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pubsub.core.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pubsub.core.py
deleted file mode 100644
index dea0737..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pubsub.core.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pubsub.core', include_py_files=True, excludes=['*.txt', '**/__pycache__'])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-puremagic.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-puremagic.py
deleted file mode 100644
index 8aa599f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-puremagic.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("puremagic")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-py.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-py.py
deleted file mode 100644
index b3bd685..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-py.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("py._path")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyarrow.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyarrow.py
deleted file mode 100644
index ef98062..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyarrow.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for https://pypi.org/project/pyarrow/
-
-from PyInstaller.utils.hooks import collect_submodules, collect_data_files, collect_dynamic_libs
-
-hiddenimports = collect_submodules('pyarrow', filter=lambda x: "tests" not in x)
-datas = collect_data_files('pyarrow')
-binaries = collect_dynamic_libs('pyarrow')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycountry.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycountry.py
deleted file mode 100644
index 9dd4f9a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycountry.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata
-
-# pycountry requires the ISO databases for country data.
-# Tested v1.15 on Linux/Ubuntu.
-# https://pypi.python.org/pypi/pycountry
-datas = copy_metadata('pycountry') + collect_data_files('pycountry')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycparser.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycparser.py
deleted file mode 100644
index 1f2e968..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycparser.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# pycparser needs two modules -- lextab.py and yacctab.py -- which it
-# generates at runtime if they cannot be imported.
-#
-# Those modules are written to the current working directory for which
-# the running process may not have write permissions, leading to a runtime
-# exception.
-#
-# This hook tells pyinstaller about those hidden imports, avoiding the
-# possibility of such runtime failures.
-
-hiddenimports = ['pycparser.lextab', 'pycparser.yacctab']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycrfsuite.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycrfsuite.py
deleted file mode 100644
index 8b64162..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pycrfsuite.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['pycrfsuite._dumpparser', 'pycrfsuite._logparser', 'tempfile']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydantic.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydantic.py
deleted file mode 100644
index 2e2d288..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydantic.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import get_module_attribute, collect_submodules
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# By default, PyPi wheels for pydantic < 2.0.0 come with all modules compiled as cython extensions, which prevents
-# PyInstaller from automatically picking up the submodules.
-if is_module_satisfies('pydantic >= 2.0.0'):
- # The `pydantic.compiled` attribute was removed in v2.
- is_compiled = False
-else:
- # NOTE: in PyInstaller 4.x and earlier, get_module_attribute() returns the string representation of the value
- # ('True'), while in PyInstaller 5.x and later, the actual value is returned (True).
- is_compiled = get_module_attribute('pydantic', 'compiled') in {'True', True}
-
-# Collect submodules from pydantic; even if the package is not compiled, contemporary versions (2.11.1 at the time
-# of writing) contain redirections and programmatic imports.
-hiddenimports = collect_submodules('pydantic')
-
-if is_compiled:
- # In compiled version, we need to collect the following modules from the standard library.
- hiddenimports += [
- 'colorsys',
- 'dataclasses',
- 'decimal',
- 'json',
- 'ipaddress',
- 'pathlib',
- 'uuid',
- # Optional dependencies.
- 'dotenv',
- 'email_validator'
- ]
- # Older releases (prior 1.4) also import distutils.version
- if not is_module_satisfies('pydantic >= 1.4'):
- hiddenimports += ['distutils.version']
- # Version 1.8.0 introduced additional dependency on typing_extensions
- if is_module_satisfies('pydantic >= 1.8'):
- hiddenimports += ['typing_extensions']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydicom.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydicom.py
deleted file mode 100644
index 8b3d497..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydicom.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files
-
-hiddenimports = []
-datas = []
-
-# In pydicom 3.0.0, the `pydicom.encoders` plugins were renamed to `pydicom.pixels.encoders`, and
-# `pydicom.pixels.decoders` were also added. We need to collect them all, because they are loaded during
-# `pydicom` module initialization. We intentionally avoid using `collect_submodules` here, because that causes
-# import of `pydicom` with logging framework initialized, which results in error tracebacks being logged for all plugins
-# with missing libraries (see https://github.com/pydicom/pydicom/issues/2128).
-if is_module_satisfies('pydicom >= 3.0.0'):
- hiddenimports += [
- "pydicom.pixels.decoders.gdcm",
- "pydicom.pixels.decoders.pylibjpeg",
- "pydicom.pixels.decoders.pillow",
- "pydicom.pixels.decoders.pyjpegls",
- "pydicom.pixels.decoders.rle",
- "pydicom.pixels.encoders.gdcm",
- "pydicom.pixels.encoders.pylibjpeg",
- "pydicom.pixels.encoders.native",
- "pydicom.pixels.encoders.pyjpegls",
- ]
-
- # With pydicom 3.0.0, initialization of `pydicom` (unnecessarily) imports `pydicom.examples`, which attempts to set
- # up several test datasets: https://github.com/pydicom/pydicom/blob/v3.0.0/src/pydicom/examples/__init__.py#L10-L24
- # Some of those are bundled with the package itself, some are downloaded (into `.pydicom/data` directory in user's
- # home directory) on he first `pydicom.examples` import.
- #
- # The download code requires `pydicom/data/urls.json` and `pydicom/data/hashes.json`; the lack of former results in
- # run-time error, while the lack of latter results in warnings about dataset download failure.
- #
- # The test data files that are bundled with the package are not listed in `urls.json`, so if they are missing, there
- # is not attempt to download them. Therefore, try to get away without collecting them here - if anyone actually
- # requires them in the frozen application, let them explicitly collect them.
- additional_data_patterns = [
- 'urls.json',
- 'hashes.json',
- ]
-else:
- hiddenimports += [
- "pydicom.encoders.gdcm",
- "pydicom.encoders.pylibjpeg",
- "pydicom.encoders.native",
- ]
- additional_data_patterns = []
-
-# Collect data files from `pydicom.data`; charset files and palettes might be needed during processing, so always
-# collect them. Some other data files became required in v3.0.0 - the corresponding patterns are set accordingly in
-# `additional_data_patterns` in the above if/else block.
-datas += collect_data_files(
- 'pydicom.data',
- includes=[
- 'charset_files/*',
- 'palettes/*',
- *additional_data_patterns,
- ],
-)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydivert.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydivert.py
deleted file mode 100644
index dab32b8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pydivert.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pydivert.windivert_dll')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyecharts.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyecharts.py
deleted file mode 100644
index 69f2e40..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyecharts.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pyecharts')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-io.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-io.py
deleted file mode 100644
index 55fd56a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-io.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-io 0.5.18:
-# https://github.com/pyexcel/pyexcel-io
-
-hiddenimports = ['pyexcel_io']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-ods.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-ods.py
deleted file mode 100644
index 160e1b2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-ods.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-ods 0.5.6:
-# https://github.com/pyexcel/pyexcel-ods
-
-hiddenimports = ['pyexcel_ods']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-ods3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-ods3.py
deleted file mode 100644
index a01beed..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-ods3.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-ods3 0.5.3:
-# https://github.com/pyexcel/pyexcel-ods3
-
-hiddenimports = ['pyexcel_ods3']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-odsr.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-odsr.py
deleted file mode 100644
index 0d10d71..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-odsr.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-io 0.5.2:
-# https://github.com/pyexcel/pyexcel-io
-
-hiddenimports = ['pyexcel_odsr']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xls.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xls.py
deleted file mode 100644
index 60acc3f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xls.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-xls 0.5.8:
-# https://github.com/pyexcel/pyexcel-xls
-
-hiddenimports = ['pyexcel_xls']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xlsx.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xlsx.py
deleted file mode 100644
index 1f12497..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xlsx.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-xlsx 0.4.2:
-# https://github.com/pyexcel/pyexcel-xlsx
-
-hiddenimports = ['pyexcel_xlsx']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xlsxw.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xlsxw.py
deleted file mode 100644
index c0b6778..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel-xlsxw.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-xlsxw 0.4.2:
-# https://github.com/pyexcel/pyexcel-xlsxw
-
-hiddenimports = ['pyexcel_xlsxw']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel.py
deleted file mode 100644
index f000b2d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel 0.5.13:
-# https://github.com/pyexcel/pyexcel
-
-hiddenimports = [
- 'pyexcel.plugins.renderers.sqlalchemy', 'pyexcel.plugins.renderers.django',
- 'pyexcel.plugins.renderers.excel', 'pyexcel.plugins.renderers._texttable',
- 'pyexcel.plugins.parsers.excel', 'pyexcel.plugins.parsers.sqlalchemy',
- 'pyexcel.plugins.sources.http', 'pyexcel.plugins.sources.file_input',
- 'pyexcel.plugins.sources.memory_input',
- 'pyexcel.plugins.sources.file_output',
- 'pyexcel.plugins.sources.output_to_memory',
- 'pyexcel.plugins.sources.pydata.bookdict',
- 'pyexcel.plugins.sources.pydata.dictsource',
- 'pyexcel.plugins.sources.pydata.arraysource',
- 'pyexcel.plugins.sources.pydata.records', 'pyexcel.plugins.sources.django',
- 'pyexcel.plugins.sources.sqlalchemy', 'pyexcel.plugins.sources.querysets'
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_io.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_io.py
deleted file mode 100644
index 2096a74..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_io.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-io 0.5.18:
-# https://github.com/pyexcel/pyexcel-io
-
-hiddenimports = [
- 'pyexcel_io.readers.csvr', 'pyexcel_io.readers.csvz',
- 'pyexcel_io.readers.tsv', 'pyexcel_io.readers.tsvz',
- 'pyexcel_io.writers.csvw', 'pyexcel_io.writers.csvz',
- 'pyexcel_io.writers.tsv', 'pyexcel_io.writers.tsvz',
- 'pyexcel_io.readers.csvz', 'pyexcel_io.readers.tsv',
- 'pyexcel_io.readers.tsvz', 'pyexcel_io.database.importers.django',
- 'pyexcel_io.database.importers.sqlalchemy',
- 'pyexcel_io.database.exporters.django',
- 'pyexcel_io.database.exporters.sqlalchemy'
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_ods.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_ods.py
deleted file mode 100644
index f856a0e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_ods.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-ods 0.5.6:
-# https://github.com/pyexcel/pyexcel-ods
-
-hiddenimports = ['pyexcel_ods', 'pyexcel_ods.odsr', 'pyexcel_ods.odsw', "pyexcel_io.writers"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_ods3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_ods3.py
deleted file mode 100644
index c4f54eb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_ods3.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-ods3 0.5.3:
-# https://github.com/pyexcel/pyexcel-ods3
-
-hiddenimports = ['pyexcel_ods3', 'pyexcel_ods3.odsr', 'pyexcel_ods3.odsw']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_odsr.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_odsr.py
deleted file mode 100644
index d895ed1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_odsr.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-io 0.5.2:
-# https://github.com/pyexcel/pyexcel-io
-
-hiddenimports = ['pyexcel_odsr', 'pyexcel_odsr.odsr']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xls.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xls.py
deleted file mode 100644
index 4875412..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xls.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-xls 0.5.8:
-# https://github.com/pyexcel/pyexcel-xls
-
-hiddenimports = ['pyexcel_xls', 'pyexcel_xls.xlsr', 'pyexcel_xls.xlsw']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xlsx.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xlsx.py
deleted file mode 100644
index 438aab6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xlsx.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-xlsx 0.4.2:
-# https://github.com/pyexcel/pyexcel-xlsx
-
-hiddenimports = ['pyexcel_xlsx', 'pyexcel_xlsx.xlsxr', 'pyexcel_xlsx.xlsxw']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xlsxw.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xlsxw.py
deleted file mode 100644
index 72f7593..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcel_xlsxw.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with pyexcel-xlsxw 0.4.2:
-# https://github.com/pyexcel/pyexcel-xlsxw
-
-hiddenimports = ['pyexcel_xlsxw', 'pyexcel_xlsxw.xlsxw']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcelerate.Writer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcelerate.Writer.py
deleted file mode 100644
index ff9dbc8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyexcelerate.Writer.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pyexcelerate')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pygraphviz.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pygraphviz.py
deleted file mode 100644
index 7a6028f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pygraphviz.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-import os
-import pathlib
-import shutil
-
-from PyInstaller import compat
-from PyInstaller.depend import bindepend
-from PyInstaller.utils.hooks import logger
-
-
-def _collect_graphviz_files():
- binaries = []
- datas = []
-
- # A working `pygraphviz` installation requires graphviz programs in PATH. Attempt to resolve the `dot` executable to
- # see if this is the case.
- dot_binary = shutil.which('dot')
- if not dot_binary:
- logger.warning(
- "hook-pygraphviz: 'dot' program not found in PATH!"
- )
- return binaries, datas
- logger.info("hook-pygraphviz: found 'dot' program: %r", dot_binary)
- bin_dir = pathlib.Path(dot_binary).parent
-
- # Collect graphviz programs that might be called from `pygaphviz.agraph.AGraph`:
- # https://github.com/pygraphviz/pygraphviz/blob/pygraphviz-1.14/pygraphviz/agraph.py#L1330-L1348
- # On macOS and on Linux, several of these are symbolic links to a single executable.
- progs = (
- "neato",
- "dot",
- "twopi",
- "circo",
- "fdp",
- "nop",
- "osage",
- "patchwork",
- "gc",
- "acyclic",
- "gvpr",
- "gvcolor",
- "ccomps",
- "sccmap",
- "tred",
- "sfdp",
- "unflatten",
- )
-
- logger.debug("hook-pygraphviz: collecting graphviz program executables...")
- for program_name in progs:
- program_binary = shutil.which(program_name)
- if not program_binary:
- logger.debug("hook-pygaphviz: graphviz program %r not found!", program_name)
- continue
-
- # Ensure that the program executable was found in the same directory as the `dot` executable. This should
- # prevent us from falling back to other graphviz installations that happen to be in PATH.
- if pathlib.Path(program_binary).parent != bin_dir:
- logger.debug(
- "hook-pygraphviz: found program %r (%r) outside of directory %r - ignoring!",
- program_name, program_binary, str(bin_dir)
- )
- continue
-
- logger.debug("hook-pygraphviz: collecting graphviz program %r: %r", program_name, program_binary)
- binaries += [(program_binary, '.')]
-
- # Graphviz shared libraries should be automatically collected when PyInstaller performs binary dependency
- # analysis of the collected program executables as part of the main build process. However, we need to manually
- # collect plugins and their accompanying config file.
- logger.debug("hook-pygraphviz: looking for graphviz plugin directory...")
- if compat.is_win:
- # Under Windows, we have several installation variants:
- # - official installers and builds from https://gitlab.com/graphviz/graphviz/-/releases
- # - chocolatey
- # - msys2
- # - Anaconda
- # In all variants, the plugins and the config file are located in the `bin` directory, next to the program
- # executables.
- plugin_dir = bin_dir
- plugin_dest_dir = '.' # Collect into top-level application directory.
- # Official builds and Anaconda use unversioned `gvplugin-{name}.dll` plugin names, while msys2 uses
- # versioned `libgvplugin-{name}-{version}.dll` plugin names (with "lib" prefix).
- plugin_pattern = '*gvplugin*.dll'
- else:
- # Perform binary dependency analysis on the `dot` executable to obtain the path to graphiz shared libraries.
- # These need to be in the library search path for the programs to work, or discoverable via run-paths
- # (e.g., Anaconda on Linux and macOS, Homebrew on macOS).
- graphviz_lib_candidates = ['cdt', 'gvc', 'cgraph']
-
- if hasattr(bindepend, 'get_imports'):
- # PyInstaller >= 6.0
- dot_imports = [path for name, path in bindepend.get_imports(dot_binary) if path is not None]
- else:
- # PyInstaller < 6.0
- dot_imports = bindepend.getImports(dot_binary)
-
- graphviz_lib_paths = [
- path for path in dot_imports
- if any(candidate in os.path.basename(path) for candidate in graphviz_lib_candidates)
- ]
-
- if not graphviz_lib_paths:
- logger.warning("hook-pygraphviz: could not determine location of graphviz shared libraries!")
- return binaries, datas
-
- graphviz_lib_dir = pathlib.Path(graphviz_lib_paths[0]).parent
- logger.debug("hook-pygraphviz: location of graphviz shared libraries: %r", str(graphviz_lib_dir))
-
- # Plugins should be located in `graphviz` directory next to shared libraries.
- plugin_dir = graphviz_lib_dir / 'graphviz'
- plugin_dest_dir = 'graphviz' # Collect into graphviz sub-directory.
-
- if compat.is_darwin:
- plugin_pattern = '*gvplugin*.dylib'
- else:
- # Collect only versioned .so library files (for example, `/lib64/graphviz/libgvplugin_core.so.6` and
- # `/lib64/graphviz/libgvplugin_core.so.6.0.0`; the former usually being a symbolic link to the latter).
- # The unversioned .so library files (such as `lib64/graphviz/libgvplugin_core.so`), if available, are
- # meant for linking (and are usually installed as part of development package).
- plugin_pattern = '*gvplugin*.so.*'
-
- if not plugin_dir.is_dir():
- logger.warning("hook-pygraphviz: could not determine location of graphviz plugins!")
- return binaries, datas
-
- logger.info("hook-pygraphviz: collecting graphviz plugins from directory: %r", str(plugin_dir))
-
- binaries += [(str(file), plugin_dest_dir) for file in plugin_dir.glob(plugin_pattern)]
- datas += [(str(file), plugin_dest_dir) for file in plugin_dir.glob("config*")] # e.g., `config6`
-
- return binaries, datas
-
-
-binaries, datas = _collect_graphviz_files()
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pygwalker.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pygwalker.py
deleted file mode 100644
index 9e78db1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pygwalker.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pygwalker')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylibmagic.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylibmagic.py
deleted file mode 100644
index 5fb8024..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylibmagic.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Pylibmagic contains data files (libmagic compiled and configurations) required to use the python-magic package.
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("pylibmagic")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylint.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylint.py
deleted file mode 100644
index 3e2e804..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylint.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# *************************************************
-# hook-pylint.py - PyInstaller hook file for pylint
-# *************************************************
-# The pylint package, in __pkginfo__.py, is version 1.4.3. Looking at its
-# source:
-#
-# From checkers/__init__.py, starting at line 122::
-#
-# def initialize(linter):
-# """initialize linter with checkers in this package """
-# register_plugins(linter, __path__[0])
-#
-# From reporters/__init__.py, starting at line 131::
-#
-# def initialize(linter):
-# """initialize linter with reporters in this package """
-# utils.register_plugins(linter, __path__[0])
-#
-# From utils.py, starting at line 881::
-#
-# def register_plugins(linter, directory):
-# """load all module and package in the given directory, looking for a
-# 'register' function in each one, used to register pylint checkers
-# """
-# imported = {}
-# for filename in os.listdir(directory):
-# base, extension = splitext(filename)
-# if base in imported or base == '__pycache__':
-# continue
-# if extension in PY_EXTS and base != '__init__' or (
-# not extension and isdir(join(directory, base))):
-# try:
-# module = load_module_from_file(join(directory, filename))
-#
-#
-# So, we need all the Python source in the ``checkers/`` and ``reporters/``
-# subdirectories, since these are run-time discovered and loaded. Therefore,
-# these files are all data files. In addition, since this is a module, the
-# pylint/__init__.py file must be included, since submodules must be children of
-# a module.
-
-from PyInstaller.utils.hooks import (
- collect_data_files, collect_submodules, is_module_or_submodule, get_module_file_attribute
-)
-
-datas = (
- [(get_module_file_attribute('pylint.__init__'), 'pylint')] +
- collect_data_files('pylint.checkers', True) +
- collect_data_files('pylint.reporters', True)
-)
-
-
-# Add imports from dynamically loaded modules, excluding pylint.test
-# subpackage (pylint <= 2.3) and pylint.testutils submodule (pylint < 2.7)
-# or subpackage (pylint >= 2.7)
-def _filter_func(name):
- return (
- not is_module_or_submodule(name, 'pylint.test') and
- not is_module_or_submodule(name, 'pylint.testutils')
- )
-
-
-hiddenimports = collect_submodules('pylint', _filter_func)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylsl.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylsl.py
deleted file mode 100644
index f3c7960..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pylsl.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-from PyInstaller.utils.hooks import logger, isolated
-
-
-def find_library():
- # Try importing pylsl - this will fail if the shared library is unavailable.
- try:
- import pylsl # noqa: F401
- except Exception:
- return None
-
- # Return the path to shared library that is used by pylsl.
- try:
- from pylsl.lib import lib as cdll # pylsl >= 0.17.0
- except ImportError:
- from pylsl.pylsl import lib as cdll # older versions
-
- return cdll._name
-
-
-# whenever a hook needs to load a 3rd party library, it needs to be done in an isolated subprocess
-libfile = isolated.call(find_library)
-
-if libfile:
- # add the liblsl library to the binaries
- # it gets packaged in pylsl/lib, which is where pylsl will look first
- binaries = [(libfile, os.path.join('pylsl', 'lib'))]
-else:
- logger.warning("liblsl shared library not found - pylsl will likely fail to work!")
- binaries = []
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymediainfo.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymediainfo.py
deleted file mode 100644
index 6b39abc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymediainfo.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_win, is_darwin
-from PyInstaller.utils.hooks import collect_dynamic_libs, logger
-
-# Collect bundled mediainfo shared library (available in Windows and macOS wheels on PyPI).
-binaries = collect_dynamic_libs("pymediainfo")
-
-# On linux, no wheels are available, and pymediainfo uses system shared library.
-if not binaries and not (is_win or is_darwin):
-
- def _find_system_mediainfo_library():
- import os
- import ctypes.util
- from PyInstaller.depend.utils import _resolveCtypesImports
-
- libname = ctypes.util.find_library("mediainfo")
- if libname is not None:
- resolved_binary = _resolveCtypesImports([os.path.basename(libname)])
- if resolved_binary:
- return resolved_binary[0][1]
-
- try:
- mediainfo_lib = _find_system_mediainfo_library()
- except Exception as e:
- logger.warning("Error while trying to find system-installed MediaInfo library: %s", e)
- mediainfo_lib = None
-
- if mediainfo_lib:
- # Put the library into pymediainfo sub-directory, to keep layout consistent with that of wheels.
- binaries += [(mediainfo_lib, 'pymediainfo')]
-
-if not binaries:
- logger.warning("MediaInfo shared library not found - pymediainfo will likely fail to work!")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymeshlab.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymeshlab.py
deleted file mode 100644
index daf9a2a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymeshlab.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks import collect_dynamic_libs, collect_data_files
-
-if compat.is_win:
- # On Windows, pymeshlab wheel seems to include Qt libraries and plugins (and their dependencies, as well as meshlab
- # plugins), as well as some of data files (such as translation files); all in the top-level package directory.
- binaries = collect_dynamic_libs('pymeshlab')
- datas = collect_data_files('pymeshlab')
-elif compat.is_linux:
- # On linux, only Qt libraries and plugins (and their dependencies, as well as meshlab plugins) seem to be included;
- # all in lib subdir.
- # NOTE: collect_dynamic_libs() does not collect versioned .so files; those are picked up by collect_data_files().
- binaries = collect_dynamic_libs('pymeshlab.lib') + collect_data_files('pymeshlab.lib')
-elif compat.is_darwin:
- # On macOS, Frameworks sub-directory contains Qt .framework bundles and other shared libraries, all of which seem
- # to be picked up by binary dependency analysis. Avoid explicitly collecting anything from there to avoid
- # interfering with PyInstaller's attempts to fix-up .framework bundle structure (see pyinstaller/pyinstaller#9335).
- # The plugins for both meshlab and Qt are in PlugIns directory, and we need to collect those.
- binaries = collect_dynamic_libs('pymeshlab.PlugIns')
-
-# On linux, prevent binary dependency analysis from generating symbolic links for bundles shared libraries to the
-# top-level application directory. For some god-forsaken reason, the wheel includes a copy of python shared library,
-# which might actually be ABI incompatible with version of python that frozen application is built with (for example,
-# libpython3.13.so.1.0 shipped with pymeshlab 2025.7 causes `undefined symbol: _Py_GetExecutor` in `_opcode` extension
-# collected from Fedora-provided python 3.13.11).
-if compat.is_linux:
- bindepend_symlink_suppression = [
- '**/pymeshlab/lib/*',
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymorphy3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymorphy3.py
deleted file mode 100644
index 7282272..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymorphy3.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import can_import_module, copy_metadata, collect_data_files
-
-datas = copy_metadata('pymorphy3_dicts_ru')
-datas += collect_data_files('pymorphy3_dicts_ru')
-
-hiddenimports = ['pymorphy3_dicts_ru']
-
-# Check if the Ukrainian model is installed
-if can_import_module('pymorphy3_dicts_uk'):
- datas += copy_metadata('pymorphy3_dicts_uk')
- datas += collect_data_files('pymorphy3_dicts_uk')
-
- hiddenimports += ['pymorphy3_dicts_uk']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymssql.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymssql.py
deleted file mode 100644
index f3a3c96..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pymssql.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020-2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-hiddenimports = ["decimal"]
-# In newer versions of pymssql, the _mssql was under pymssql
-if is_module_satisfies("pymssql > 2.1.5"):
- hiddenimports += ["pymssql._mssql", "uuid"]
-else:
- hiddenimports += ["_mssql"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pynng.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pynng.py
deleted file mode 100644
index f3b7499..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pynng.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for https://pypi.org/project/pynng/
-"""
-
-hiddenimports = ['_cffi_backend']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pynput.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pynput.py
deleted file mode 100644
index 0776e1d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pynput.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("pynput")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyodbc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyodbc.py
deleted file mode 100644
index bfa2f42..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyodbc.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import get_pyextension_imports
-
-# It's hard to detect imports of binary Python module without importing it.
-# Let's try importing that module in a subprocess.
-# TODO function get_pyextension_imports() is experimental and we need
-# to evaluate its usage here and its suitability for other hooks.
-hiddenimports = get_pyextension_imports('pyodbc')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyopencl.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyopencl.py
deleted file mode 100644
index 9646426..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyopencl.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the pyopencl module: https://github.com/pyopencl/pyopencl
-
-from PyInstaller.utils.hooks import copy_metadata, collect_data_files
-
-datas = copy_metadata('pyopencl')
-datas += collect_data_files('pyopencl')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypdfium2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypdfium2.py
deleted file mode 100644
index 1005a8b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypdfium2.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect `version.json`.
-datas = collect_data_files("pypdfium2")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypdfium2_raw.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypdfium2_raw.py
deleted file mode 100644
index 01a349d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypdfium2_raw.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs, collect_data_files
-
-# Collect the bundled pdfium shared library.
-binaries = collect_dynamic_libs('pypdfium2_raw')
-
-# Collect `version.json`.
-datas = collect_data_files("pypdfium2_raw")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypemicro.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypemicro.py
deleted file mode 100644
index 7a6e873..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypemicro.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the pypemicro module: https://github.com/nxpmicro/pypemicro
-
-import os
-from PyInstaller.utils.hooks import get_package_paths, is_module_satisfies
-from PyInstaller.log import logger
-from PyInstaller.compat import is_darwin
-
-binaries = list()
-if is_module_satisfies('pyinstaller >= 5.0'):
- from PyInstaller import isolated
-
- @isolated.decorate
- def get_safe_libs():
- from pypemicro import PyPemicro
- libs = PyPemicro.get_pemicro_lib_list()
- return libs
-
- pkg_base, pkg_dir = get_package_paths("pypemicro")
- for lib in get_safe_libs():
- source_path = lib['path']
- source_name = lib['name']
- dest = os.path.relpath(source_path, pkg_base)
- binaries.append((os.path.join(source_path, source_name), dest))
- if is_darwin:
- libusb = os.path.join(source_path, 'libusb.dylib')
- if os.path.exists(libusb):
- binaries.append((libusb, dest))
- else:
- logger.warning("libusb.dylib was not found for Mac OS, ignored")
-else:
- logger.warning("hook-pypemicro requires pyinstaller >= 5.0")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyphen.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyphen.py
deleted file mode 100644
index 9f0be6f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyphen.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pyphen')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyppeteer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyppeteer.py
deleted file mode 100644
index 8c15c18..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyppeteer.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-# pyppeteer uses importlib.metadata to query its own version.
-datas = copy_metadata("pyppeteer")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyproj.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyproj.py
deleted file mode 100644
index 83390ef..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyproj.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-import sys
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies, copy_metadata
-from PyInstaller.compat import is_win
-
-hiddenimports = [
- "pyproj.datadir"
-]
-
-binaries = []
-
-# Versions prior to 2.3.0 also require pyproj._datadir
-if not is_module_satisfies("pyproj >= 2.3.0"):
- hiddenimports += ["pyproj._datadir"]
-
-# Starting with version 3.0.0, pyproj._compat is needed
-if is_module_satisfies("pyproj >= 3.0.0"):
- hiddenimports += ["pyproj._compat"]
- # Linux and macOS also require distutils.
- if not is_win:
- hiddenimports += ["distutils.util"]
-
-# Data collection
-datas = collect_data_files('pyproj')
-
-# Repackagers may de-vendor the proj data directory (Conda, Debian)
-if not any(dest.startswith("pyproj/proj_dir") for (_, dest) in datas):
- if hasattr(sys, 'real_prefix'): # check if in a virtual environment
- root_path = sys.real_prefix
- else:
- root_path = sys.prefix
-
- if is_win:
- tgt_proj_data = os.path.join('Library', 'share', 'proj')
- src_proj_data = os.path.join(root_path, 'Library', 'share', 'proj')
-
- else: # both linux and darwin
- tgt_proj_data = os.path.join('share', 'proj')
- src_proj_data = os.path.join(root_path, 'share', 'proj')
-
- if os.path.exists(src_proj_data):
- datas.append((src_proj_data, tgt_proj_data))
- # A runtime hook defines the path for `PROJ_LIB`
- else:
- from PyInstaller.utils.hooks import logger
- logger.warning("Datas for pyproj not found at:\n{}".format(src_proj_data))
-
-# With pyproj 3.4.0, we need to collect package's metadata due to `importlib.metadata.version(__package__)` call in
-# `__init__.py`. This change was reverted in subsequent releases of pyproj, so we collect metadata only for 3.4.0.
-if is_module_satisfies("pyproj == 3.4.0"):
- datas += copy_metadata("pyproj")
-
-# pyproj 3.4.0 was also the first release that used `delvewheel` for its Windows PyPI wheels. While contemporary
-# PyInstaller versions automatically pick up DLLs from external `pyproj.libs` directory, this does not work on Anaconda
-# python 3.8 and 3.9 due to defunct `os.add_dll_directory`, which forces `delvewheel` to use the old load-order file
-# approach. So we need to explicitly ensure that load-order file as well as DLLs are collected.
-if is_win and is_module_satisfies("pyproj >= 3.4.0"):
- if is_module_satisfies("PyInstaller >= 5.6"):
- from PyInstaller.utils.hooks import collect_delvewheel_libs_directory
- datas, binaries = collect_delvewheel_libs_directory("pyproj", datas=datas, binaries=binaries)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypsexec.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypsexec.py
deleted file mode 100644
index c96a56e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypsexec.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# The bundled paexec.exe file needs to be collected (as data file; on any platform)
-# because it is deployed to the remote side during execution.
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pypsexec')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypylon.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypylon.py
deleted file mode 100644
index 395aaf9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pypylon.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# PyPylon is a tricky library to bundle. It encapsulates the pylon C++ SDK inside
-# it with modified library references to make the module relocatable.
-# PyInstaller is able to find those libraries and preserve the linkage for almost
-# all of them. However - there is an additional linking step happening at runtime,
-# when the library is creating the transport layer for the camera. This linking
-# will fail with the library files modified by pyinstaller.
-# As the module is already relocatable, we circumvent this issue by bundling
-# pypylon as-is - for pyinstaller we treat the shared library files as just data.
-
-import os
-
-from PyInstaller.utils.hooks import (
- collect_data_files,
- collect_dynamic_libs,
- is_module_satisfies
-)
-
-# Collect dynamic libs as data (to prevent pyinstaller from modifying them).
-# NOTE: under PyInstaller 6.x, these files end up re-classified as binaries anyway.
-datas = collect_dynamic_libs('pypylon')
-
-# Collect data files, looking for pypylon/pylonCXP/bin/ProducerCXP.cti, but other files may also be needed
-datas += collect_data_files('pypylon')
-
-# NOTE: the part below is incompatible with PyInstaller 6.x, because `collect_data_files(..., include_py_files=True)`
-# does not include binary extensions anymore. In addition, `pyinstaller/pyinstaller@ecc218c` in PyInstaller 6.2 fixed
-# the module exclusion for relative imports, so the modules listed below actually end up excluded. Presumably this
-# part was necessary with older PyInstaller versions, so we keep it around, but disable it for PyInstaller >= 6.0.
-if is_module_satisfies('PyInstaller < 6.0'):
- # Exclude the C++-extensions from automatic search, add them manually as data files
- # their dependencies were already handled with collect_dynamic_libs
- excludedimports = ['pypylon._pylon', 'pypylon._genicam']
- for filename, module in collect_data_files('pypylon', include_py_files=True):
- if (os.path.basename(filename).startswith('_pylon.')
- or os.path.basename(filename).startswith('_genicam.')):
- datas += [(filename, module)]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyqtgraph.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyqtgraph.py
deleted file mode 100644
index 0d8bf9c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyqtgraph.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-# Collect all data files, excluding the examples' data
-datas = collect_data_files('pyqtgraph', excludes=['**/examples/*'])
-
-# pyqtgraph uses Qt-version-specific templates for the UI elements.
-# There are templates for different versions of PySide and PyQt, e.g.
-#
-# - pyqtgraph.graphicsItems.ViewBox.axisCtrlTemplate_pyqt5
-# - pyqtgraph.graphicsItems.ViewBox.axisCtrlTemplate_pyqt6
-# - pyqtgraph.graphicsItems.ViewBox.axisCtrlTemplate_pyside2
-# - pyqtgraph.graphicsItems.ViewBox.axisCtrlTemplate_pyside6
-# - pyqtgraph.graphicsItems.PlotItem.plotConfigTemplate_pyqt5
-# - pyqtgraph.graphicsItems.PlotItem.plotConfigTemplate_pyqt6
-# - pyqtgraph.graphicsItems.PlotItem.plotConfigTemplate_pyside2
-# - pyqtgraph.graphicsItems.PlotItem.plotConfigTemplate_pyside6
-#
-# To be future-proof, we collect all modules by
-# using collect-submodules, and filtering the modules
-# which appear to be templates.
-# We need to avoid recursing into `pyqtgraph.examples`, because that
-# triggers instantiation of `QApplication` (which requires X/Wayland
-# session on linux).
-# Tested with pyqtgraph master branch (commit c1900aa).
-all_imports = collect_submodules("pyqtgraph", filter=lambda name: name != "pyqtgraph.examples")
-hiddenimports = [name for name in all_imports if "Template" in name]
-
-# Collect the pyqtgraph/multiprocess/bootstrap.py as a module; this is required by our pyqtgraph.multiprocess runtime
-# hook to handle the pyqtgraph's multiprocessing implementation. The pyqtgraph.multiprocess seems to be imported
-# automatically on the import of pyqtgraph itself, so there is no point in creating a separate hook for this.
-hiddenimports += ['pyqtgraph.multiprocess.bootstrap']
-
-# Attempt to auto-select applicable Qt bindings and exclude extraneous Qt bindings.
-# Available in PyInstaller >= 6.5, which has `PyInstaller.utils.hooks.qt.exclude_extraneous_qt_bindings` helper.
-try:
- from PyInstaller.utils.hooks.qt import exclude_extraneous_qt_bindings
-except ImportError:
- pass
-else:
- # Use the helper's default preference order, to keep it consistent across multiple hooks that use the same helper.
- excludedimports = exclude_extraneous_qt_bindings(
- hook_name="hook-pyqtgraph",
- qt_bindings_order=None,
- )
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyshark.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyshark.py
deleted file mode 100644
index 46aae20..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyshark.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Python wrapper for pyshark(https://pypi.org/project/pyshark/)
-# Tested with version 0.4.5
-
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies
-
-hiddenimports = ['pyshark.config']
-
-if is_module_satisfies("pyshark < 0.6"):
- hiddenimports += ['py._path.local', 'py._vendored_packages.iniconfig']
- if is_module_satisfies("pyshark >= 0.5"):
- hiddenimports += ["py._io.terminalwriter", "py._builtin"]
-
-datas = collect_data_files('pyshark')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pysnmp.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pysnmp.py
deleted file mode 100644
index 5824b58..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pysnmp.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, collect_data_files
-
-hiddenimports = collect_submodules('pysnmp.smi.mibs')
-datas = collect_data_files('pysnmp.smi.mibs', include_py_files=True)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pystray.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pystray.py
deleted file mode 100644
index 835b0be..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pystray.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-# https://github.com/moses-palmer/pystray/tree/feature-explicit-backends
-# if this get merged then we don't need this hook
-hiddenimports = collect_submodules("pystray")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pytest.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pytest.py
deleted file mode 100644
index 080d2e7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pytest.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for http://pypi.python.org/pypi/pytest/
-"""
-
-import pytest
-
-hiddenimports = pytest.freeze_includes()
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pythainlp.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pythainlp.py
deleted file mode 100644
index d5bdcc5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pythainlp.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('pythainlp')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pythoncom.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pythoncom.py
deleted file mode 100644
index 05b0c1d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pythoncom.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# pywin32 supports frozen mode; in that mode, it is looking at sys.path for pythoncomXY.dll. However, as of
-# PyInstaller 5.4, we may collect that DLL into its original pywin32_system32 sub-directory as part of the
-# binary dependency analysis (and add it to sys.path by means of a runtime hook).
-
-import pathlib
-
-from PyInstaller.utils.hooks import is_module_satisfies, get_pywin32_module_file_attribute
-
-dll_filename = get_pywin32_module_file_attribute('pythoncom')
-dst_dir = '.' # Top-level application directory
-
-if is_module_satisfies('PyInstaller >= 5.4'):
- # Try preserving the original pywin32_system directory, if applicable (it is not applicable in Anaconda,
- # where the DLL is located in Library/bin).
- dll_path = pathlib.Path(dll_filename)
- if dll_path.parent.name == 'pywin32_system32':
- dst_dir = 'pywin32_system32'
-
-binaries = [(dll_filename, dst_dir)]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pytokens.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pytokens.py
deleted file mode 100644
index 4810bf7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pytokens.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from _pyinstaller_hooks_contrib.utils.mypy import find_mypyc_module_for_dist
-
-# pytokens >= 0.4.0 uses `mypy`, and includes a top-level module with dynamically-generated name prefix;
-# for example, `fd7dcdb10166ebd4db98__mypyc`.
-hiddenimports = find_mypyc_module_for_dist('pytokens')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyttsx.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyttsx.py
deleted file mode 100644
index 36fceb2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyttsx.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-pyttsx imports drivers module based on specific platform.
-Found at http://mrmekon.tumblr.com/post/5272210442/pyinstaller-and-pyttsx
-"""
-
-hiddenimports = [
- 'drivers',
- 'drivers.dummy',
- 'drivers.espeak',
- 'drivers.nsss',
- 'drivers.sapi5',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyttsx3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyttsx3.py
deleted file mode 100644
index ac3edf8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyttsx3.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# pyttsx3 conditionally imports drivers module based on specific platform.
-# https://github.com/nateshmbhat/pyttsx3/blob/5a19376a94fdef6bfaef8795539e755b1f363fbf/pyttsx3/driver.py#L40-L50
-
-import sys
-
-hiddenimports = ["pyttsx3.drivers", "pyttsx3.drivers.dummy"]
-
-# Take directly from the link above.
-if sys.platform == 'darwin':
- driverName = 'nsss'
-elif sys.platform == 'win32':
- driverName = 'sapi5'
-else:
- driverName = 'espeak'
-# import driver module
-name = 'pyttsx3.drivers.%s' % driverName
-
-hiddenimports.append(name)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyviz_comms.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyviz_comms.py
deleted file mode 100644
index 5a882c9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyviz_comms.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("pyviz_comms")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyvjoy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyvjoy.py
deleted file mode 100644
index d72e13e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pyvjoy.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs("pyvjoy")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pywintypes.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pywintypes.py
deleted file mode 100644
index b452e93..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pywintypes.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# pywin32 supports frozen mode; in that mode, it is looking at sys.path for pywintypesXY.dll. However, as of
-# PyInstaller 5.4, we may collect that DLL into its original pywin32_system32 sub-directory as part of the
-# binary dependency analysis (and add it to sys.path by means of a runtime hook).
-
-import pathlib
-
-from PyInstaller.utils.hooks import is_module_satisfies, get_pywin32_module_file_attribute
-
-dll_filename = get_pywin32_module_file_attribute('pywintypes')
-dst_dir = '.' # Top-level application directory
-
-if is_module_satisfies('PyInstaller >= 5.4'):
- # Try preserving the original pywin32_system directory, if applicable (it is not applicable in Anaconda,
- # where the DLL is located in Library/bin).
- dll_path = pathlib.Path(dll_filename)
- if dll_path.parent.name == 'pywin32_system32':
- dst_dir = 'pywin32_system32'
-
-binaries = [(dll_filename, dst_dir)]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pywt.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pywt.py
deleted file mode 100644
index e1b5f36..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-pywt.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for https://github.com/PyWavelets/pywt
-
-hiddenimports = ['pywt._extensions._cwt']
-
-# NOTE: There is another project `https://github.com/Knapstad/pywt installing
-# a packagre `pywt`, too. This name clash is not much of a problem, even if
-# this hook is picked up for the other package, since PyInstaller will simply
-# skip any module added by this hook but acutally missing. If the other project
-# requires a hook, too, simply add it to this file.
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-qtmodern.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-qtmodern.py
deleted file mode 100644
index 2adb2b7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-qtmodern.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("qtmodern", includes=["**/*.qss"])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-radicale.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-radicale.py
deleted file mode 100644
index 56b487a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-radicale.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, collect_data_files
-
-datas = copy_metadata('radicale')
-datas += collect_data_files('radicale')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-raven.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-raven.py
deleted file mode 100644
index fe6f8e6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-raven.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['raven.events', 'raven.processors']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rawpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rawpy.py
deleted file mode 100644
index 7daf325..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rawpy.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Python wrapper for LibRaw (https://pypi.python.org/pypi/rawpy)
-# Tested with version 0.3.5
-
-hiddenimports = ['numpy', 'enum']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rdflib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rdflib.py
deleted file mode 100644
index 7fc6631..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rdflib.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('rdflib.plugins')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-redmine.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-redmine.py
deleted file mode 100644
index 1291095..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-redmine.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['redmine.resources']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-regex.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-regex.py
deleted file mode 100644
index e55764e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-regex.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['warnings']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-reportlab.lib.utils.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-reportlab.lib.utils.py
deleted file mode 100644
index eb3ce68..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-reportlab.lib.utils.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Needed for ReportLab 3
-hiddenimports = [
- 'reportlab.rl_settings',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-reportlab.pdfbase._fontdata.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-reportlab.pdfbase._fontdata.py
deleted file mode 100644
index e4e8e9a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-reportlab.pdfbase._fontdata.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# Tested on Windows 7 x64 with Python 2.7.6 x32 using ReportLab 3.0
-# This has been observed to *not* work on ReportLab 2.7
-hiddenimports = collect_submodules('reportlab.pdfbase',
- lambda name: name.startswith('reportlab.pdfbase._fontdata_'))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-resampy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-resampy.py
deleted file mode 100644
index 8b45d2c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-resampy.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for resampy
-from PyInstaller.utils.hooks import collect_data_files
-
-# resampy has two data files that need to be included.
-datas = collect_data_files('resampy', False)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rich.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rich.py
deleted file mode 100644
index 239056a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rich.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, is_module_satisfies
-
-# Starting with v14.3.0, we need to collect modules from `rich._unicode_data`.
-if is_module_satisfies('rich >= 14.3.0'):
- hiddenimports = collect_submodules('rich._unicode_data')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rlp.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rlp.py
deleted file mode 100644
index c59c1b6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rlp.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, copy_metadata
-
-# Starting with v4.0.0, `rlp` queries its version from metadata.
-if is_module_satisfies("rlp >= 4.0.0"):
- datas = copy_metadata('rlp')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rpy2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rpy2.py
deleted file mode 100644
index f37c2b6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rpy2.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = [
- "rpy2",
- "rpy2.robjects",
- "rpy2.robjects.packages",
- "rpy2.situation",
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rtree.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rtree.py
deleted file mode 100644
index 67899d3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rtree.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import pathlib
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks import collect_dynamic_libs, get_installer, get_package_paths
-
-
-# Query the installer of the `rtree` package; in PyInstaller prior to 6.0, this might raise an exception, whereas in
-# later versions, None is returned.
-try:
- package_installer = get_installer('rtree')
-except Exception:
- package_installer = None
-
-if package_installer == 'conda':
- from PyInstaller.utils.hooks import conda
-
- # In Anaconda-packaged `rtree`, `libspatialindex` and `libspatialindex_c` shared libs are packaged in a separate
- # `libspatialindex` package. Collect the libraries into `rtree/lib` sub-directory to simulate PyPI wheel layout.
- binaries = conda.collect_dynamic_libs('libspatialindex', dest='rtree/lib', dependencies=False)
-else:
- # pip-installed package. The shared libs are usually placed in `rtree/lib` directory.
- binaries = collect_dynamic_libs('rtree')
-
- # With rtree >= 1.1.0, Linux PyPI wheels place the shared library in a `Rtree.libs` top-level directory.
- # In rtree 1.4.0, the directory was renamed to `rtree.libs`
- if compat.is_linux:
- _, rtree_dir = get_package_paths('rtree')
- for candidate_dir_name in ('rtree.libs', 'Rtree.libs'):
- rtree_libs_dir = pathlib.Path(rtree_dir).parent / candidate_dir_name
- if not rtree_libs_dir.is_dir():
- continue
- binaries += [
- (str(lib_file), candidate_dir_name) for lib_file in rtree_libs_dir.glob("libspatialindex*.so*")
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ruamel.yaml.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ruamel.yaml.py
deleted file mode 100644
index 23339e9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ruamel.yaml.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# `ruamel.yaml` offers several optional plugins that can be installed via additional packages
-# (e.g., `runamel.yaml.string`). Unfortunately, the discovery of these plugins is predicated on their `__plug_in__.py`
-# files being visible on filesystem.
-# See: https://sourceforge.net/p/ruamel-yaml/code/ci/0bef9fa8b3c43637cd90ce3f2e299e81c2122128/tree/main.py#l757
-
-import pathlib
-
-from PyInstaller.utils.hooks import get_module_file_attribute, logger
-
-ruamel_path = pathlib.Path(get_module_file_attribute('ruamel.yaml')).parent
-
-plugin_files = ruamel_path.glob('*/__plug_in__.py')
-plugin_names = [plugin_file.parent.name for plugin_file in plugin_files]
-logger.debug("hook-ruamel.yaml: found plugins: %r", plugin_names)
-
-# Add `__plug_in__` modules to hiddenimports to ensure they are collected and scanned for imports. This also implicitly
-# collects the plugin's `__init__` module.
-plugin_modules = [f"ruamel.yaml.{plugin_name}.__plug_in__" for plugin_name in plugin_names]
-
-hiddenimports = plugin_modules
-
-# Collect the plugins' `__plug_in__` modules both as byte-compiled .pyc in PYZ archive (to be actually loaded) and
-# source .py file (which allows plugin to be discovered).
-module_collection_mode = {
- plugin_module: "pyz+py"
- for plugin_module in plugin_modules
-}
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rubicon.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rubicon.py
deleted file mode 100644
index 68116a1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-rubicon.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Prevent this package from pulling `setuptools_scm` into frozen application, as it makes no sense in that context.
-excludedimports = ["setuptools_scm"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sacremoses.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sacremoses.py
deleted file mode 100644
index 23b00db..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sacremoses.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('sacremoses')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sam2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sam2.py
deleted file mode 100644
index 321da39..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sam2.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for Segment Anything Model 2 (SAM 2): https://pypi.org/project/sam2
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-# Collect config .yaml files.
-datas = collect_data_files('sam2')
-
-# Ensure that all indirectly-imported modules are collected (e.g., `sam2.modeling.backbones`).
-hiddenimports = collect_submodules('sam2')
-
-# Due to use of `torch.script`, we need to collect source .py files for `sam2`. The `sam2/__init__.py` also seems to be
-# required by `hydra`. Furthermore, the source-based introspection attempts to load the source of stdlib `enum` module.
-# The module collection mode support and run-time discovery of source .py files for modules that are collected into
-# `base_library.zip` archive was added in pyinstaller/pyinstaller#8971 (i.e., PyInstaller > 6.11.1).
-module_collection_mode = {
- 'sam2': 'pyz+py',
- 'enum': 'pyz+py', # requires PyInstaller > 6.11.1; no-op in earlier versions
-}
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-saml2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-saml2.py
deleted file mode 100644
index 244944a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-saml2.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for https://github.com/IdentityPython/pysaml2
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata, collect_submodules
-
-datas = copy_metadata("pysaml2")
-
-# The library contains a bunch of XSD schemas that are loaded by the code:
-# https://github.com/IdentityPython/pysaml2/blob/7cb4f09dce87a7e8098b9c7552ebab8bc77bc896/src/saml2/xml/schema/__init__.py#L23
-# On the other hand, runtime tools are not needed.
-datas += collect_data_files("saml2", excludes=["**/tools"])
-
-# Submodules are loaded dynamically by:
-# https://github.com/IdentityPython/pysaml2/blob/7cb4f09dce87a7e8098b9c7552ebab8bc77bc896/src/saml2/attribute_converter.py#L52
-hiddenimports = collect_submodules("saml2.attributemaps")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-schwifty.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-schwifty.py
deleted file mode 100644
index a8b30ca..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-schwifty.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, collect_data_files
-
-datas = copy_metadata('schwifty')
-datas += collect_data_files('schwifty')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-seedir.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-seedir.py
deleted file mode 100644
index 28ed6b5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-seedir.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('seedir')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-selectolax.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-selectolax.py
deleted file mode 100644
index 53b3086..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-selectolax.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("selectolax")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-selenium.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-selenium.py
deleted file mode 100644
index 13a312a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-selenium.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('selenium')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sentry_sdk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sentry_sdk.py
deleted file mode 100644
index 02afaf3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sentry_sdk.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller import isolated
-
-hiddenimports = [
- "sentry_sdk.integrations.stdlib",
- "sentry_sdk.integrations.excepthook",
- "sentry_sdk.integrations.dedupe",
- "sentry_sdk.integrations.atexit",
- "sentry_sdk.integrations.modules",
- "sentry_sdk.integrations.argv",
- "sentry_sdk.integrations.logging",
- "sentry_sdk.integrations.threading",
-]
-
-
-@isolated.decorate
-def _get_integration_modules():
- import sentry_sdk.integrations as si
-
- # _AUTO_ENABLING_INTEGRATIONS is a list of strings with default enabled integrations
- # https://github.com/getsentry/sentry-python/blob/c6b6f2086b58ffc674df5c25a600b8a615079fb5/sentry_sdk/integrations/__init__.py#L54-L66
- integrations = getattr(si, '_AUTO_ENABLING_INTEGRATIONS', [])
-
- # The list contains fully-qualified class names; turn them into module names by removing the last component.
- return [integration_name.rsplit('.', maxsplit=1)[0] for integration_name in integrations]
-
-
-hiddenimports += _get_integration_modules()
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-setuptools_scm.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-setuptools_scm.py
deleted file mode 100644
index 8e22d91..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-setuptools_scm.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-# Ensure `metadata of setuptools` dist is collected, to avoid run-time warning about unknown/incompatible `setuptools`
-# version.
-datas = copy_metadata('setuptools')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-shapely.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-shapely.py
deleted file mode 100644
index 6899367..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-shapely.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-from ctypes.util import find_library
-
-from PyInstaller.utils.hooks import get_package_paths
-from PyInstaller.utils.hooks import is_module_satisfies
-from PyInstaller import compat
-
-# Necessary when using the vectorized subpackage
-hiddenimports = ['shapely.prepared']
-
-if is_module_satisfies('shapely >= 2.0.0'):
- # An import made in the `shapely.geometry_helpers` extension; both `shapely.geometry_helpers` and `shapely._geos`
- # extensions were introduced in v2.0.0.
- hiddenimports += ['shapely._geos']
-
-pkg_base, pkg_dir = get_package_paths('shapely')
-
-binaries = []
-datas = []
-if compat.is_win:
- geos_c_dll_found = False
-
- # Search conda directory if conda is active, then search standard
- # directory. This is the same order of precidence used in shapely.
- standard_path = os.path.join(pkg_dir, 'DLLs')
- lib_paths = [standard_path, os.environ['PATH']]
- if compat.is_conda:
- conda_path = os.path.join(compat.base_prefix, 'Library', 'bin')
- lib_paths.insert(0, conda_path)
- original_path = os.environ['PATH']
- try:
- os.environ['PATH'] = os.pathsep.join(lib_paths)
- dll_path = find_library('geos_c') or find_library('libgeos_c')
- finally:
- os.environ['PATH'] = original_path
- if dll_path is not None:
- binaries += [(dll_path, '.')]
- geos_c_dll_found = True
-
- # Starting with shapely 1.8.1, the DLLs shipped with PyPI wheels are stored in
- # site-packages/Shapely.libs instead of sub-directory in site-packages/shapely.
- if is_module_satisfies("shapely >= 1.8.1"):
- lib_dir = os.path.join(pkg_base, "Shapely.libs")
- if os.path.isdir(lib_dir):
- # We collect DLLs as data files instead of binaries to suppress binary
- # analysis, which would result in duplicates (because it collects a copy
- # into the top-level directory instead of preserving the original layout).
- # In addition to DLls, this also collects .load-order* file (required on
- # python < 3.8), and ensures that Shapely.libs directory exists (required
- # on python >= 3.8 due to os.add_dll_directory call).
- datas += [
- (os.path.join(lib_dir, lib_file), 'Shapely.libs')
- for lib_file in os.listdir(lib_dir)
- ]
-
- geos_c_dll_found |= any([
- os.path.basename(lib_file).startswith("geos_c")
- for lib_file, _ in datas
- ])
-
- if not geos_c_dll_found:
- raise SystemExit(
- "Error: geos_c.dll not found, required by hook-shapely.py.\n"
- "Please check your installation or provide a pull request to "
- "PyInstaller to update hook-shapely.py.")
-elif compat.is_linux and is_module_satisfies('shapely < 1.7'):
- # This duplicates the libgeos*.so* files in the build. PyInstaller will
- # copy them into the root of the build by default, but shapely cannot load
- # them from there in linux IF shapely was installed via a whl file. The
- # whl bundles its own libgeos with a different name, something like
- # libgeos_c-*.so.* but shapely tries to load libgeos_c.so if there isn't a
- # ./libs directory under its package.
- #
- # The fix for this (https://github.com/Toblerity/Shapely/pull/485) has
- # been available in shapely since version 1.7.
- lib_dir = os.path.join(pkg_dir, '.libs')
- dest_dir = os.path.join('shapely', '.libs')
-
- binaries += [(os.path.join(lib_dir, f), dest_dir) for f in os.listdir(lib_dir)]
-elif compat.is_darwin and is_module_satisfies('shapely >= 1.8.1'):
- # In shapely 1.8.1, the libgeos_c library bundled in macOS PyPI wheels is not
- # called libgeos.1.dylib anymore, but rather has a fullly-versioned name
- # (e.g., libgeos_c.1.16.0.dylib).
- # Shapely fails to find such a library unless it is located in the .dylibs
- # directory. So we need to ensure that the libraries are collected into
- # .dylibs directory; however, this will result in duplication due to binary
- # analysis of the python extensions that are linked against these libraries
- # as well (as that will copy the libraries to top-level directory).
- lib_dir = os.path.join(pkg_dir, '.dylibs')
- dest_dir = os.path.join('shapely', '.dylibs')
-
- if os.path.isdir(lib_dir):
- binaries += [(os.path.join(lib_dir, f), dest_dir) for f in os.listdir(lib_dir)]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-shotgun_api3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-shotgun_api3.py
deleted file mode 100644
index 3ccf68a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-shotgun_api3.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Shotgun is using "six" to import these and
-# PyInstaller does not seem to catch them correctly.
-hiddenimports = ["xmlrpc", "xmlrpc.client"]
-
-# Collect the following files:
-# /shotgun_api3/lib/httplib2/python2/cacerts.txt
-# /shotgun_api3/lib/httplib2/python3/cacerts.txt
-# /shotgun_api3/lib/certifi/cacert.pem
-datas = collect_data_files("shotgun_api3")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-simplemma.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-simplemma.py
deleted file mode 100644
index a233c66..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-simplemma.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('simplemma')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.color.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.color.py
deleted file mode 100644
index d79f3fd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.color.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.21.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.21.0"):
- datas = collect_data_files("skimage.color", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.color', filter=lambda name: name != 'skimage.color.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.data.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.data.py
deleted file mode 100644
index 8f59def..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.data.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.20.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies('scikit-image >= 0.20.0'):
- datas = collect_data_files("skimage.data", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.data', filter=lambda name: name != 'skimage.data.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.draw.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.draw.py
deleted file mode 100644
index e52d351..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.draw.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.21.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.21.0"):
- datas = collect_data_files("skimage.draw", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.draw', filter=lambda name: name != 'skimage.draw.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.exposure.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.exposure.py
deleted file mode 100644
index e737efb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.exposure.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.21.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.21.0"):
- datas = collect_data_files("skimage.exposure", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.exposure', filter=lambda name: name != 'skimage.exposure.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.feature.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.feature.py
deleted file mode 100644
index 29d376d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.feature.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# The following missing module prevents import of skimage.feature with skimage 0.17.x.
-hiddenimports = ['skimage.feature._orb_descriptor_positions', ]
-
-# Collect the data file with ORB descriptor positions. In earlier versions of scikit-image, this file was in
-# `skimage/data` directory, and it was moved to `skimage/feature` in v0.17.0. Collect if from wherever it is.
-datas = collect_data_files('skimage', includes=['**/orb_descriptor_positions.txt'])
-
-# As of scikit-image 0.22.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.22.0"):
- datas += collect_data_files("skimage.feature", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.feature', filter=lambda name: name != 'skimage.feature.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.filters.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.filters.py
deleted file mode 100644
index e88726c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.filters.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-if is_module_satisfies("scikit-image >= 0.19.0"):
- # In scikit-image 0.19.x, `skimage.filters` switched to lazy module loading, so we need to collect all submodules.
- hiddenimports = collect_submodules('skimage.filters', filter=lambda name: name != 'skimage.filters.tests')
-
- # In scikit-image 0.20.0, `lazy_loader` is used, so we need to collect `__init__.pyi` file.
- if is_module_satisfies("scikit-image >= 0.20.0"):
- datas = collect_data_files("skimage.filters", includes=["*.pyi"])
-elif is_module_satisfies("scikit-image >= 0.18.0"):
- # The following missing module prevents import of skimage.feature with skimage 0.18.x.
- hiddenimports = ['skimage.filters.rank.core_cy_3d', ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.future.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.future.py
deleted file mode 100644
index 41905d4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.future.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.21.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.21.0"):
- datas = collect_data_files("skimage.future", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.future', filter=lambda name: name != 'skimage.future.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.graph.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.graph.py
deleted file mode 100644
index 2caffd4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.graph.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# The following missing module prevents import of skimage.graph with skimage 0.17.x.
-hiddenimports = ['skimage.graph.heap', ]
-
-# As of scikit-image 0.22.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.22.0"):
- datas = collect_data_files("skimage.graph", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.graph', filter=lambda name: name != 'skimage.graph.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.io.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.io.py
deleted file mode 100644
index 45d6663..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.io.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# This hook was tested with scikit-image (skimage) 0.14.1:
-# https://scikit-image.org
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-datas = collect_data_files("skimage.io._plugins")
-hiddenimports = collect_submodules('skimage.io._plugins')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.measure.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.measure.py
deleted file mode 100644
index 1cdaa2c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.measure.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.22.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.22.0"):
- datas = collect_data_files("skimage.measure", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.measure', filter=lambda name: name != 'skimage.measure.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.metrics.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.metrics.py
deleted file mode 100644
index 7d575f5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.metrics.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.23.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.23.0"):
- datas = collect_data_files("skimage.metrics", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.metrics', filter=lambda name: name != 'skimage.metrics.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.morphology.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.morphology.py
deleted file mode 100644
index dc5c6c2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.morphology.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies
-
-# As of scikit-image 0.20.0, we need to collect .npy data files for `skimage.morphology`
-if is_module_satisfies('scikit-image >= 0.20'):
- datas = collect_data_files("skimage.morphology", includes=["*.npy"])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.py
deleted file mode 100644
index 03e3ec0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies
-
-# As of scikit-image 0.20.0, we need to collect the __init__.pyi file for `lazy_loader`.
-if is_module_satisfies('scikit-image >= 0.20.0'):
- datas = collect_data_files("skimage", includes=["*.pyi"])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.registration.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.registration.py
deleted file mode 100644
index 0ffeee8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.registration.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.22.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.22.0"):
- datas = collect_data_files("skimage.registration", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.registration', filter=lambda name: name != 'skimage.registration.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.restoration.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.restoration.py
deleted file mode 100644
index a048738..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.restoration.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.22.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.22.0"):
- datas = collect_data_files("skimage.restoration", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.restoration', filter=lambda name: name != 'skimage.restoration.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.segmentation.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.segmentation.py
deleted file mode 100644
index 48a3821..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.segmentation.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# As of scikit-image 0.26.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.26.0"):
- datas = collect_data_files("skimage.segmentation", includes=["*.pyi"])
- hiddenimports = collect_submodules('skimage.segmentation', filter=lambda name: name != 'skimage.segmentation.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.transform.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.transform.py
deleted file mode 100644
index 3841a4e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skimage.transform.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import is_module_satisfies, collect_data_files, collect_submodules
-
-# Hook tested with scikit-image (skimage) 0.9.3 on Mac OS 10.9 and Windows 7 64-bit
-hiddenimports = ['skimage.draw.draw',
- 'skimage._shared.geometry',
- 'skimage._shared.transform',
- 'skimage.filters.rank.core_cy']
-
-# As of scikit-image 0.22.0, we need to collect the __init__.pyi file for `lazy_loader`, as well as collect submodules
-# due to lazy loading.
-if is_module_satisfies("scikit-image >= 0.22.0"):
- datas = collect_data_files("skimage.transform", includes=["*.pyi"])
- hiddenimports += collect_submodules('skimage.transform', filter=lambda name: name != 'skimage.transform.tests')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.cluster.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.cluster.py
deleted file mode 100644
index a855309..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.cluster.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# sklearn.cluster in scikit-learn 0.23.x has a hidden import of
-# threadpoolctl
-if is_module_satisfies("scikit_learn >= 0.23"):
- hiddenimports = ['threadpoolctl', ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.cupy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.cupy.py
deleted file mode 100644
index 4c2275a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.cupy.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# These hidden imports are required due to the following statements found in the package's `__init__.py`:
-# ```
-# __import__(__package__ + '.linalg')
-# __import__(__package__ + '.fft')
-# ```
-hiddenimports = [
- 'sklearn.externals.array_api_compat.cupy.fft',
- 'sklearn.externals.array_api_compat.cupy.linalg',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.dask.array.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.dask.array.py
deleted file mode 100644
index 7779374..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.dask.array.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# These hidden imports are required due to the following statements found in the package's `__init__.py`:
-# ```
-# __import__(__package__ + '.linalg')
-# __import__(__package__ + '.fft')
-# ```
-hiddenimports = [
- 'sklearn.externals.array_api_compat.dask.array.fft',
- 'sklearn.externals.array_api_compat.dask.array.linalg',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.numpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.numpy.py
deleted file mode 100644
index 042a73a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.numpy.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# These hidden imports are required due to the following statements found in the package's `__init__.py`:
-# ```
-# __import__(__package__ + '.linalg')
-# __import__(__package__ + '.fft')
-# ```
-hiddenimports = [
- 'sklearn.externals.array_api_compat.numpy.fft',
- 'sklearn.externals.array_api_compat.numpy.linalg',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.torch.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.torch.py
deleted file mode 100644
index 207bb3d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.externals.array_api_compat.torch.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# These hidden imports are required due to the following statements found in the package's `__init__.py`:
-# ```
-# __import__(__package__ + '.linalg')
-# __import__(__package__ + '.fft')
-# ```
-hiddenimports = [
- 'sklearn.externals.array_api_compat.torch.fft',
- 'sklearn.externals.array_api_compat.torch.linalg',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.linear_model.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.linear_model.py
deleted file mode 100644
index ce5a884..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.linear_model.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-# sklearn.linear_model in scikit-learn 0.24.x has a hidden import of
-# sklearn.utils._weight_vector
-if is_module_satisfies("scikit_learn >= 0.24"):
- hiddenimports = ['sklearn.utils._weight_vector', ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.cluster.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.cluster.py
deleted file mode 100644
index 3cbeb64..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.cluster.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Required by scikit-learn 0.21
-from PyInstaller.utils.hooks import is_module_satisfies
-
-if is_module_satisfies("scikit-learn < 0.22"):
- hiddenimports = [
- 'sklearn.utils.lgamma',
- 'sklearn.utils.weight_vector'
- ]
-else:
- # lgamma was removed and weight_vector privatised in 0.22.
- # https://github.com/scikit-learn/scikit-learn/commit/58be9a671b0b8fcb4b75f4ae99f4469ca33a2158#diff-dbca16040fd2b85a499ba59833b37f1785c58e52d2e89ce5cdfc7fff164bd5f3
- # https://github.com/scikit-learn/scikit-learn/commit/150e82b52bf28c88c5a8b1a10f9777d0452b3ef2
- hiddenimports = [
- 'sklearn.utils._weight_vector'
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.pairwise.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.pairwise.py
deleted file mode 100644
index 188c1af..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.pairwise.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Required by scikit-learn 1.1.0
-from PyInstaller.utils.hooks import is_module_satisfies
-
-if is_module_satisfies("scikit-learn >= 1.1.0"):
- hiddenimports = [
- 'sklearn.utils._heap',
- 'sklearn.utils._sorting',
- 'sklearn.utils._vector_sentinel',
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.py
deleted file mode 100644
index 8bdea5f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.metrics.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, collect_submodules
-
-hiddenimports = []
-
-# Required by scikit-learn 1.0.0
-if is_module_satisfies("scikit-learn >= 1.0.0"):
- hiddenimports += [
- 'sklearn.utils._typedefs',
- ]
-
-# Required by scikit-learn 1.2.0
-if is_module_satisfies("scikit-learn >= 1.2.0"):
- hiddenimports += collect_submodules("sklearn.metrics._pairwise_distances_reduction")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.neighbors.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.neighbors.py
deleted file mode 100644
index 937fe75..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.neighbors.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-hiddenimports = []
-
-if is_module_satisfies("scikit_learn > 1.0.1"):
- # 1.0.2 and later
- hiddenimports += [
- 'sklearn.neighbors._quad_tree',
- ]
-elif is_module_satisfies("scikit_learn < 0.22 "):
- # 0.21 and below
- hiddenimports += [
- 'sklearn.neighbors.typedefs',
- 'sklearn.neighbors.quad_tree',
- ]
-else:
- # between and including 0.22 and 1.0.1
- hiddenimports += [
- 'sklearn.neighbors._typedefs',
- 'sklearn.neighbors._quad_tree',
- ]
-
-# The following hidden import must be added here
-# (as opposed to sklearn.tree)
-hiddenimports += ['sklearn.tree._criterion']
-
-# Additional hidden imports introduced in v1.0.0
-if is_module_satisfies("scikit_learn >= 1.0.0"):
- hiddenimports += ["sklearn.neighbors._partition_nodes"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.py
deleted file mode 100644
index 25724f3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Tested on Windows 10 64bit with python 3.7.1
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('sklearn')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.tree.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.tree.py
deleted file mode 100644
index 7a222e2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.tree.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-hiddenimports = ['sklearn.tree._utils']
-
-if is_module_satisfies('scikit-learn >= 1.6.0'):
- hiddenimports += ['sklearn.tree._partitioner']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.utils.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.utils.py
deleted file mode 100644
index 10f44d7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sklearn.utils.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies
-
-hiddenimports = ['sklearn.utils._cython_blas']
-
-# As of scikit-learn 1.7.1, the `sklearn.utils._isfinite` extension started to depend on newly-introduced
-# `sklearn._cyutility`.
-if is_module_satisfies('scikit-learn >= 1.7.1'):
- hiddenimports += ['sklearn._cyutility']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skyfield.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skyfield.py
deleted file mode 100644
index 8394b34..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-skyfield.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-datas = collect_data_files('skyfield')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-slixmpp.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-slixmpp.py
deleted file mode 100644
index 93bd8a1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-slixmpp.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules("slixmpp.features")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sound_lib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sound_lib.py
deleted file mode 100644
index ed290ea..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sound_lib.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-sound_lib: http://hg.q-continuum.net/sound_lib
-"""
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs('sound_lib')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sounddevice.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sounddevice.py
deleted file mode 100644
index 6316b03..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sounddevice.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-sounddevice:
-https://github.com/spatialaudio/python-sounddevice/
-"""
-
-import pathlib
-
-from PyInstaller.utils.hooks import get_module_file_attribute, logger
-
-binaries = []
-datas = []
-
-# PyPI wheels for Windows and macOS ship the sndfile shared library in _sounddevice_data directory,
-# located next to the sounddevice.py module file (i.e., in the site-packages directory).
-module_dir = pathlib.Path(get_module_file_attribute('sounddevice')).parent
-data_dir = module_dir / '_sounddevice_data' / 'portaudio-binaries'
-if data_dir.is_dir():
- destdir = str(data_dir.relative_to(module_dir))
-
- # Collect the shared library (known variants: libportaudio64bit.dll, libportaudio32bit.dll, libportaudio.dylib)
- for lib_file in data_dir.glob("libportaudio*.*"):
- binaries += [(str(lib_file), destdir)]
-
- # Collect the README.md file
- readme_file = data_dir / "README.md"
- if readme_file.is_file():
- datas += [(str(readme_file), destdir)]
-else:
- # On linux and in Anaconda in all OSes, the system-installed portaudio library needs to be collected.
- def _find_system_portaudio_library():
- import os
- import ctypes.util
- from PyInstaller.depend.utils import _resolveCtypesImports
-
- libname = ctypes.util.find_library("portaudio")
- if libname is not None:
- resolved_binary = _resolveCtypesImports([os.path.basename(libname)])
- if resolved_binary:
- return resolved_binary[0][1]
-
- try:
- lib_file = _find_system_portaudio_library()
- except Exception as e:
- logger.warning("Error while trying to find system-installed portaudio library: %s", e)
- lib_file = None
-
- if lib_file:
- binaries += [(lib_file, '.')]
-
-if not binaries:
- logger.warning("portaudio shared library not found - sounddevice will likely fail to work!")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-soundfile.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-soundfile.py
deleted file mode 100644
index f788c38..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-soundfile.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-pysoundfile:
-https://github.com/bastibe/SoundFile
-"""
-
-import pathlib
-
-from PyInstaller.utils.hooks import get_module_file_attribute, logger
-
-binaries = []
-datas = []
-
-# PyPI wheels for Windows and macOS ship the sndfile shared library in _soundfile_data directory,
-# located next to the soundfile.py module file (i.e., in the site-packages directory).
-module_dir = pathlib.Path(get_module_file_attribute('soundfile')).parent
-data_dir = module_dir / '_soundfile_data'
-if data_dir.is_dir():
- destdir = str(data_dir.relative_to(module_dir))
-
- # Collect the shared library (known variants: libsndfile64bit.dll, libsndfile32bit.dll, libsndfile.dylib)
- for lib_file in data_dir.glob("libsndfile*.*"):
- binaries += [(str(lib_file), destdir)]
-
- # Collect the COPYING file
- copying_file = data_dir / "COPYING"
- if copying_file.is_file():
- datas += [(str(copying_file), destdir)]
-else:
- # On linux and in Anaconda in all OSes, the system-installed sndfile library needs to be collected.
- def _find_system_sndfile_library():
- import os
- import ctypes.util
- from PyInstaller.depend.utils import _resolveCtypesImports
-
- libname = ctypes.util.find_library("sndfile")
- if libname is not None:
- resolved_binary = _resolveCtypesImports([os.path.basename(libname)])
- if resolved_binary:
- return resolved_binary[0][1]
-
- try:
- lib_file = _find_system_sndfile_library()
- except Exception as e:
- logger.warning("Error while trying to find system-installed sndfile library: %s", e)
- lib_file = None
-
- if lib_file:
- binaries += [(lib_file, '.')]
-
-if not binaries:
- logger.warning("sndfile shared library not found - soundfile will likely fail to work!")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spacy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spacy.py
deleted file mode 100644
index 25ee44e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spacy.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Spacy contains hidden imports and data files which are needed to import it
-"""
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-datas = collect_data_files("spacy")
-hiddenimports = collect_submodules("spacy")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-speech_recognition.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-speech_recognition.py
deleted file mode 100644
index fb7d179..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-speech_recognition.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for speech_recognition: https://pypi.python.org/pypi/SpeechRecognition/
-# Tested on Windows 8.1 x64 with SpeechRecognition 1.5
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("speech_recognition")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spiceypy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spiceypy.py
deleted file mode 100644
index 3444d93..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spiceypy.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for spiceypy: https://pypi.org/project/spiceypy/
-# Tested on Ubuntu 20.04 with spiceypy 5.1.1
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs("spiceypy")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spnego.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spnego.py
deleted file mode 100644
index b038573..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-spnego.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('spnego')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-srsly.msgpack._packer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-srsly.msgpack._packer.py
deleted file mode 100644
index 519cd0b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-srsly.msgpack._packer.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-srsly.msgpack._packer contains hidden imports which are needed to import it
-This hook was created to make spacy work correctly.
-"""
-
-hiddenimports = ['srsly.msgpack.util']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sspilib.raw.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sspilib.raw.py
deleted file mode 100644
index 7fbd239..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sspilib.raw.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# This seems to be required in python <= 3.9; in later versions, the `dataclasses` module ends up included via a
-# different import chain. But for the sake of consistency, keep the hiddenimport for all python versions.
-hiddenimports = ['dataclasses']
-
-# Collect submodules of `sspilib.raw` - most of which are cythonized extensions.
-hiddenimports += collect_submodules('sspilib.raw')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-statsmodels.tsa.statespace.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-statsmodels.tsa.statespace.py
deleted file mode 100644
index 547d706..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-statsmodels.tsa.statespace.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('statsmodels.tsa.statespace._filters') \
- + collect_submodules('statsmodels.tsa.statespace._smoothers')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-stdnum.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-stdnum.py
deleted file mode 100644
index 068e960..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-stdnum.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2022 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect data files that are required by some of the stdnum's sub-modules
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("stdnum")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-storm.database.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-storm.database.py
deleted file mode 100644
index 1cde580..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-storm.database.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for storm ORM.
-"""
-
-hiddenimports = [
- 'storm.databases.sqlite',
- 'storm.databases.postgres',
- 'storm.databases.mysql'
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sudachipy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sudachipy.py
deleted file mode 100644
index 1abb48e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sudachipy.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import can_import_module, collect_data_files, is_module_satisfies
-
-datas = collect_data_files('sudachipy')
-hiddenimports = []
-
-# In v0.6.8, `sudachipy.config` and `sudachipy.errors` modules were added, and are referenced from binary extension.
-if is_module_satisfies('sudachipy >= 0.6.8'):
- hiddenimports += [
- 'sudachipy.config',
- 'sudachipy.errors',
- ]
-
-# Check which types of dictionary are installed
-for sudachi_dict in ['sudachidict_small', 'sudachidict_core', 'sudachidict_full']:
- if can_import_module(sudachi_dict):
- datas += collect_data_files(sudachi_dict)
-
- hiddenimports += [sudachi_dict]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sunpy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sunpy.py
deleted file mode 100644
index 4a069e4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sunpy.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules, copy_metadata
-
-hiddenimports = collect_submodules("sunpy", filter=lambda x: "tests" not in x.split("."))
-datas = collect_data_files("sunpy", excludes=['**/tests/', '**/test/'])
-datas += collect_data_files("drms")
-datas += copy_metadata("sunpy")
-
-# Note : sunpy > 3.1.0 comes with it's own hook for running tests.
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sv_ttk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sv_ttk.py
deleted file mode 100644
index 0f37e32..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-sv_ttk.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect all files in the sv_ttk package
-datas = collect_data_files(package="sv_ttk")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-swagger_spec_validator.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-swagger_spec_validator.py
deleted file mode 100644
index bb4b4d1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-swagger_spec_validator.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("swagger_spec_validator")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tableauhyperapi.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tableauhyperapi.py
deleted file mode 100644
index 210daef..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tableauhyperapi.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs("tableauhyperapi")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tables.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tables.py
deleted file mode 100644
index 440c6a1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tables.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_win
-from PyInstaller.utils.hooks import collect_dynamic_libs, is_module_satisfies
-
-# PyTables is a package for managing hierarchical datasets
-hiddenimports = ["tables._comp_lzo", "tables._comp_bzip2"]
-
-# Collect the bundled copy of blosc2 shared library.
-binaries = collect_dynamic_libs('tables')
-datas = []
-
-# tables 3.7.0 started using `delvewheel` for its Windows PyPI wheels. While contemporary PyInstaller versions
-# automatically pick up DLLs from external `pyproj.libs` directory, this does not work on Anaconda python 3.8 and 3.9
-# due to defunct `os.add_dll_directory`, which forces `delvewheel` to use the old load-order file approach. So we need
-# to explicitly ensure that load-order file as well as DLLs are collected.
-if is_win and is_module_satisfies("tables >= 3.7.0"):
- if is_module_satisfies("PyInstaller >= 5.6"):
- from PyInstaller.utils.hooks import collect_delvewheel_libs_directory
- datas, binaries = collect_delvewheel_libs_directory("tables", datas=datas, binaries=binaries)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tcod.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tcod.py
deleted file mode 100644
index d5b076e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tcod.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for https://github.com/libtcod/python-tcod
-"""
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-hiddenimports = ['_cffi_backend']
-
-# Install shared libraries to the working directory.
-binaries = collect_dynamic_libs('tcod', destdir='.')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tensorflow.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tensorflow.py
deleted file mode 100644
index 6a7a50a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tensorflow.py
+++ /dev/null
@@ -1,188 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.compat import importlib_metadata
-from packaging.version import Version
-
-from PyInstaller.compat import is_linux
-from PyInstaller.utils.hooks import (
- collect_data_files,
- collect_dynamic_libs,
- collect_submodules,
- get_module_attribute,
- is_module_satisfies,
- logger,
-)
-
-# Determine the name of `tensorflow` dist; this is available under different names (releases vs. nightly, plus build
-# variants). We need to determine the dist that we are dealing with, so we can query its version and metadata.
-_CANDIDATE_DIST_NAMES = (
- "tensorflow",
- "tensorflow-cpu",
- "tensorflow-gpu",
- "tensorflow-intel",
- "tensorflow-rocm",
- "tensorflow-macos",
- "tensorflow-aarch64",
- "tensorflow-cpu-aws",
- "tf-nightly",
- "tf-nightly-cpu",
- "tf-nightly-gpu",
- "tf-nightly-rocm",
- "intel-tensorflow",
- "intel-tensorflow-avx512",
-)
-dist = None
-for candidate_dist_name in _CANDIDATE_DIST_NAMES:
- try:
- dist = importlib_metadata.distribution(candidate_dist_name)
- break
- except importlib_metadata.PackageNotFoundError:
- continue
-
-version = None
-if dist is None:
- logger.warning(
- "hook-tensorflow: failed to determine tensorflow dist name! Reading version from tensorflow.__version__!"
- )
- try:
- version = get_module_attribute("tensorflow", "__version__")
- except Exception as e:
- raise Exception("Failed to read tensorflow.__version__") from e
-else:
- logger.info("hook-tensorflow: tensorflow dist name: %s", dist.name)
- version = dist.version
-
-# Parse version
-logger.info("hook-tensorflow: tensorflow version: %s", version)
-try:
- version = Version(version)
-except Exception as e:
- raise Exception("Failed to parse tensorflow version!") from e
-
-# Exclude from data collection:
-# - development headers in include subdirectory
-# - XLA AOT runtime sources
-# - libtensorflow_framework and libtensorflow_cc (since TF 2.12) shared libraries (to avoid duplication)
-# - import library (.lib) files (Windows-only)
-data_excludes = [
- "include",
- "xla_aot_runtime_src",
- "libtensorflow_framework.*",
- "libtensorflow_cc.*",
- "**/*.lib",
-]
-
-# Under tensorflow 2.3.0 (the most recent version at the time of writing), _pywrap_tensorflow_internal extension module
-# ends up duplicated; once as an extension, and once as a shared library. In addition to increasing program size, this
-# also causes problems on macOS, so we try to prevent the extension module "variant" from being picked up.
-#
-# See pyinstaller/pyinstaller-hooks-contrib#49 for details.
-#
-# With PyInstaller >= 6.0, this issue is alleviated, because the binary dependency analysis (which picks up the
-# extension in question as a shared library that other extensions are linked against) now preserves the parent directory
-# layout, and creates a symbolic link to the top-level application directory.
-if is_module_satisfies('PyInstaller >= 6.0'):
- excluded_submodules = []
-else:
- excluded_submodules = ['tensorflow.python._pywrap_tensorflow_internal']
-
-
-def _submodules_filter(x):
- return x not in excluded_submodules
-
-
-if version < Version("1.15.0a0"):
- # 1.14.x and earlier: collect everything from tensorflow
- hiddenimports = collect_submodules('tensorflow', filter=_submodules_filter)
- datas = collect_data_files('tensorflow', excludes=data_excludes)
-elif version >= Version("1.15.0a0") and version < Version("2.2.0a0"):
- # 1.15.x - 2.1.x: collect everything from tensorflow_core
- hiddenimports = collect_submodules('tensorflow_core', filter=_submodules_filter)
- datas = collect_data_files('tensorflow_core', excludes=data_excludes)
-
- # Under 1.15.x, we seem to fail collecting a specific submodule, and need to add it manually...
- if version < Version("2.0.0a0"):
- hiddenimports += ['tensorflow_core._api.v1.compat.v2.summary.experimental']
-else:
- # 2.2.0 and newer: collect everything from tensorflow again
- hiddenimports = collect_submodules('tensorflow', filter=_submodules_filter)
- datas = collect_data_files('tensorflow', excludes=data_excludes)
-
- # From 2.6.0 on, we also need to explicitly collect keras (due to lazy mapping of tensorflow.keras.xyz -> keras.xyz)
- if version >= Version("2.6.0a0"):
- hiddenimports += collect_submodules('keras')
-
- # Starting with 2.14.0, we need `ml_dtypes` among hidden imports.
- if version >= Version("2.14.0"):
- hiddenimports += ['ml_dtypes']
-
-binaries = []
-excludedimports = excluded_submodules
-
-# Suppress warnings for missing hidden imports generated by this hook.
-# Requires PyInstaller > 5.1 (with pyinstaller/pyinstaller#6914 merged); no-op otherwise.
-warn_on_missing_hiddenimports = False
-
-# Collect the AutoGraph part of `tensorflow` code, to avoid a run-time warning about AutoGraph being unavailable:
-# `WARNING:tensorflow:AutoGraph is not available in this environment: functions lack code information. ...`
-# The warning is emitted if source for `log` function from `tensorflow.python.autograph.utils.ag_logging` cannot be
-# looked up. Not sure if we need sources for other parts of `tesnorflow`, though.
-# Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = {
- 'tensorflow.python.autograph': 'py+pyz',
-}
-
-# Linux builds of tensorflow can optionally use CUDA from nvidia-* packages. If we managed to obtain dist, query the
-# requirements from metadata (the `and-cuda` extra marker), and convert them to module names.
-#
-# NOTE: while the installation of nvidia-* packages via `and-cuda` extra marker is not gated by the OS version check,
-# it is effectively available only on Linux (last Windows-native build that supported GPU is v2.10.0, and assumed that
-# CUDA is externally available).
-if is_linux and dist is not None:
- def _infer_nvidia_hiddenimports():
- import packaging.requirements
- from _pyinstaller_hooks_contrib.utils import nvidia_cuda as cudautils
-
- requirements = [packaging.requirements.Requirement(req) for req in dist.requires or []]
- env = {'extra': 'and-cuda'}
- requirements = [req.name for req in requirements if req.marker is None or req.marker.evaluate(env)]
-
- return cudautils.infer_hiddenimports_from_requirements(requirements)
-
- try:
- nvidia_hiddenimports = _infer_nvidia_hiddenimports()
- except Exception:
- # Log the exception, but make it non-fatal
- logger.warning("hook-tensorflow: failed to infer NVIDIA CUDA hidden imports!", exc_info=True)
- nvidia_hiddenimports = []
- logger.info("hook-tensorflow: inferred hidden imports for CUDA libraries: %r", nvidia_hiddenimports)
- hiddenimports += nvidia_hiddenimports
-
-
-# Collect the tensorflow-plugins (pluggable device plugins)
-hiddenimports += ['tensorflow-plugins']
-binaries += collect_dynamic_libs('tensorflow-plugins')
-
-# On Linux, prevent binary dependency analysis from generating symbolic links for libtensorflow_cc.so.2,
-# libtensorflow_framework.so.2, and _pywrap_tensorflow_internal.so to the top-level application directory. These
-# symbolic links seem to confuse tensorflow about its location (likely because code in one of the libraries looks up the
-# library file's location, but does not fully resolve it), which in turn prevents it from finding the collected CUDA
-# libraries in the nvidia/cu* package directories.
-#
-# The `bindepend_symlink_suppression` hook attribute requires PyInstaller >= 6.11, and is no-op in earlier versions.
-if is_linux:
- bindepend_symlink_suppression = [
- '**/libtensorflow_cc.so*',
- '**/libtensorflow_framework.so*',
- '**/_pywrap_tensorflow_internal.so',
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-text_unidecode.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-text_unidecode.py
deleted file mode 100644
index 68902ca..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-text_unidecode.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-# -----------------------------------------------------------------------------
-"""
-text-unidecode:
-https://github.com/kmike/text-unidecode/
-"""
-
-import os
-from PyInstaller.utils.hooks import get_package_paths
-
-package_path = get_package_paths("text_unidecode")
-data_bin_path = os.path.join(package_path[1], "data.bin")
-
-if os.path.exists(data_bin_path):
- datas = [(data_bin_path, 'text_unidecode')]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-textdistance.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-textdistance.py
deleted file mode 100644
index 4859014..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-textdistance.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for textdistance: https://pypi.org/project/textdistance/4.1.3/
-
-from PyInstaller.utils.hooks import collect_all
-
-datas, binaries, hiddenimports = collect_all('textdistance')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-thinc.backends.numpy_ops.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-thinc.backends.numpy_ops.py
deleted file mode 100644
index fcb3e88..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-thinc.backends.numpy_ops.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-thinc.banckends.numpy_ops contains hidden imports which are needed to import it
-This hook was created to make spacy work correctly.
-"""
-
-hiddenimports = ['cymem.cymem', 'preshed.maps', 'blis.py']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-thinc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-thinc.py
deleted file mode 100644
index 7623253..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-thinc.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Thinc contains data files and hidden imports. This hook was created to make spacy work correctly.
-"""
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-datas = collect_data_files("thinc")
-hiddenimports = collect_submodules("thinc")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-timezonefinder.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-timezonefinder.py
deleted file mode 100644
index e5cd309..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-timezonefinder.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('timezonefinder')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-timm.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-timm.py
deleted file mode 100644
index 1ff1a61..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-timm.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tinycss2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tinycss2.py
deleted file mode 100644
index d06ab79..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tinycss2.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for tinycss2. tinycss2 is a low-level CSS parser and generator.
-https://github.com/Kozea/tinycss2
-"""
-from PyInstaller.utils.hooks import collect_data_files
-
-
-# Hook no longer required for tinycss2 >= 1.0.0
-def hook(hook_api):
- hook_api.add_datas(collect_data_files(hook_api.__name__))
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterdnd2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterdnd2.py
deleted file mode 100644
index 4b07d33..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterdnd2.py
+++ /dev/null
@@ -1,90 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-import pathlib
-import platform
-
-from PyInstaller.utils.hooks import get_package_paths, logger
-
-
-# tkinterdnd2 contains a tkdnd sub-directory which contains platform-specific directories with shared library and .tcl
-# files. Collect only the relevant directory, by matching the decision logic from:
-# https://github.com/Eliav2/tkinterdnd2/blob/9a55907e430234bf8ab72ea614f84af9cc89598c/tkinterdnd2/TkinterDnD.py#L33-L51
-def _collect_platform_subdir(system, machine):
- datas = []
- binaries = []
-
- # Under Windows, `platform.machine()` returns the identifier of the *host* architecture, which does not necessarily
- # match the architecture of the running process (for example, when running x86 process under x64 Windows, or when
- # running either x86 or x64 process under arm64 Windows). The architecture of the running process can be obtained
- # from the `PROCESSOR_ARCHITECTURE` environment variable, which is automatically set by Windows / WOW64 subsystem.
- #
- # NOTE: at the time of writing (tkinterdnd2 v0.4.2), tkinterdnd2 does not account for this, and attempts to load
- # the shared library from incorrect directory; as this fails due to architecture mismatch, there is no point in
- # us trying to collect that (incorrect) directory.
- if system == "Windows":
- machine = os.environ.get("PROCESSOR_ARCHITECTURE", machine)
-
- # Resolve the platform-specific sub-directory name and shared library suffix.
- DIR_NAMES = {
- "Darwin": {
- "arm64": "osx-arm64",
- "x86_64": "osx-x64",
- },
- "Linux": {
- "aarch64": "linux-arm64",
- "x86_64": "linux-x64",
- },
- "Windows": {
- "ARM64": "win-arm64",
- "AMD64": "win-x64",
- "x86": "win-x86",
- }
- }
- dir_name = DIR_NAMES.get(system, {}).get(machine, None)
-
- LIB_SUFFICES = {
- "Darwin": "*.dylib",
- "Linux": "*.so",
- "Windows": "*.dll",
- }
- lib_suffix = LIB_SUFFICES.get(system, None)
-
- if dir_name is None or lib_suffix is None:
- logger.warning(
- "hook-tkinterdnd2: unsupported platform (%s, %s)! Platform-specific directory will not be collected!",
- system, machine
- )
- return datas, binaries
-
- pkg_base, pkg_dir = get_package_paths("tkinterdnd2")
-
- dest_dir = os.path.join("tkinterdnd2", "tkdnd", dir_name)
- src_path = pathlib.Path(pkg_dir) / "tkdnd" / dir_name
-
- if not src_path.is_dir():
- logger.warning("hook-tkinterdnd2: platform-specific sub-directory %r does not exist!", str(src_path))
- return datas, binaries
-
- # Collect the shared library.
- for entry in src_path.glob(lib_suffix):
- binaries.append((str(entry), dest_dir))
-
- # Collect the .tcl files.
- for entry in src_path.glob("*.tcl"):
- datas.append((str(entry), dest_dir))
-
- return datas, binaries
-
-
-datas, binaries = _collect_platform_subdir(platform.system(), platform.machine())
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb.py
deleted file mode 100644
index bb02c6c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect files from 'resources'
-datas = collect_data_files('tkinterweb')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb_tkhtml.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb_tkhtml.py
deleted file mode 100644
index 33c6374..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb_tkhtml.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
-
-# Collect files from 'tkhtml'
-datas = collect_data_files('tkinterweb_tkhtml')
-
-# Collect binaries from 'tkhtml'
-binaries = collect_dynamic_libs('tkinterweb_tkhtml')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb_tkhtml_extras.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb_tkhtml_extras.py
deleted file mode 100644
index 6ec0db4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tkinterweb_tkhtml_extras.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
-
-# Collect files from 'tkhtml'
-datas = collect_data_files('tkinterweb_tkhtml_extras')
-
-# Collect binaries from 'tkhtml'
-binaries = collect_dynamic_libs('tkinterweb_tkhtml_extras')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga.py
deleted file mode 100644
index be80488..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules, copy_metadata, is_module_satisfies
-
-hiddenimports = []
-
-# Select the platform-specific backend.
-if compat.is_darwin:
- backend = 'cocoa'
-elif compat.is_linux:
- backend = 'gtk'
-elif compat.is_win:
- backend = 'winforms'
-else:
- backend = None
-
-if backend is not None:
- hiddenimports += [f'toga_{backend}', f'toga_{backend}.factory']
-
-# Collect metadata for toga-core dist, which is used by toga module to determine its version.
-datas = copy_metadata("toga-core")
-
-# Prevent `toga` from pulling `setuptools_scm` into frozen application, as it makes no sense in that context.
-excludedimports = ["setuptools_scm"]
-
-# `toga` 0.5.0 refactored its `__init__.py` to lazy-load its core modules. Therefore, we now need to collect
-# submodules via `collect_submodules`...
-if is_module_satisfies("toga >= 0.5.0"):
- hiddenimports += collect_submodules("toga")
-
-# Starting with `toga` 0.5.2, we need to collect .pyi files.
-if is_module_satisfies("toga >= 0.5.2"):
- datas += collect_data_files("toga")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_cocoa.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_cocoa.py
deleted file mode 100644
index c6142f4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_cocoa.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata
-
-# Collect icons from `resources`.
-datas = collect_data_files('toga_cocoa')
-
-# Collect metadata so that the backend can be discovered via `toga.backends` entry-point.
-datas += copy_metadata("toga-cocoa")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_gtk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_gtk.py
deleted file mode 100644
index 2e0353e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_gtk.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata
-
-# Collect default icon from `resources`.
-datas = collect_data_files('toga_gtk')
-
-# Collect metadata so that the backend can be discovered via `toga.backends` entry-point.
-datas += copy_metadata("toga-gtk")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_winforms.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_winforms.py
deleted file mode 100644
index adebb9a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-toga_winforms.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-
-from PyInstaller.utils.hooks import collect_data_files, copy_metadata
-
-# Collect default icon from `resources`, and license/readme file from `toga_winforms/libs/WebView2`. Use the same call
-# to also collect bundled WebView2 DLLs from `toga_winforms/libs/WebView2`.
-include_patterns = [
- 'resources/*',
- 'libs/WebView2/*.md',
- 'libs/WebView2/*.dll',
-]
-
-# The package seems to bundle WebView2 runtimes for x86, x64, and arm64. We need to collect only the one for the
-# running platform, which can be reliably identified by `PROCESSOR_ARCHITECTURE` environment variable, which properly
-# reflects the processor architecture of running process (even if running x86 python on x64 machine, or x64 python on
-# arm64 machine).
-machine = os.environ["PROCESSOR_ARCHITECTURE"].lower()
-if machine == 'x86':
- include_patterns += ['libs/WebView2/runtimes/win-x86/*']
-elif machine == 'amd64':
- include_patterns += ['libs/WebView2/runtimes/win-x64/*']
-elif machine == 'arm64':
- include_patterns += ['libs/WebView2/runtimes/win-arm64/*']
-
-datas = collect_data_files('toga_winforms', includes=include_patterns)
-
-# Collect metadata so that the backend can be discovered via `toga.backends` entry-point.
-datas += copy_metadata("toga-winforms")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torch.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torch.py
deleted file mode 100644
index 85e75cf..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torch.py
+++ /dev/null
@@ -1,179 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-
-from PyInstaller.utils.hooks import (
- logger,
- collect_data_files,
- is_module_satisfies,
- collect_dynamic_libs,
- collect_submodules,
- get_package_paths,
-)
-
-if is_module_satisfies("PyInstaller >= 6.0"):
- from PyInstaller import compat
- from PyInstaller.utils.hooks import PY_DYLIB_PATTERNS
-
- module_collection_mode = "pyz+py"
- warn_on_missing_hiddenimports = False
-
- datas = collect_data_files(
- "torch",
- excludes=[
- "**/*.h",
- "**/*.hpp",
- "**/*.cuh",
- "**/*.lib",
- "**/*.cpp",
- "**/*.pyi",
- "**/*.cmake",
- ],
- )
- hiddenimports = collect_submodules("torch")
- binaries = collect_dynamic_libs(
- "torch",
- # Ensure we pick up fully-versioned .so files as well
- search_patterns=PY_DYLIB_PATTERNS + ['*.so.*'],
- )
-
- # On Linux, torch wheels built with non-default CUDA version bundle CUDA libraries themselves (and should be handled
- # by the above `collect_dynamic_libs`). Wheels built with default CUDA version (which are available on PyPI), on the
- # other hand, use CUDA libraries provided by nvidia-* packages. Due to all possible combinations (CUDA libs from
- # nvidia-* packages, torch-bundled CUDA libs, CPU-only CUDA libs) we do not add hidden imports directly, but instead
- # attempt to infer them from requirements listed in the `torch` metadata.
- if compat.is_linux:
- def _infer_nvidia_hiddenimports():
- import packaging.requirements
- from _pyinstaller_hooks_contrib.compat import importlib_metadata
- from _pyinstaller_hooks_contrib.utils import nvidia_cuda as cudautils
-
- dist = importlib_metadata.distribution("torch")
- requirements = [packaging.requirements.Requirement(req) for req in dist.requires or []]
- requirements = [req.name for req in requirements if req.marker is None or req.marker.evaluate()]
-
- return cudautils.infer_hiddenimports_from_requirements(requirements)
-
- try:
- nvidia_hiddenimports = _infer_nvidia_hiddenimports()
- except Exception:
- # Log the exception, but make it non-fatal
- logger.warning("hook-torch: failed to infer NVIDIA CUDA hidden imports!", exc_info=True)
- nvidia_hiddenimports = []
- logger.info("hook-torch: inferred hidden imports for CUDA libraries: %r", nvidia_hiddenimports)
- hiddenimports += nvidia_hiddenimports
-
- # On Linux, prevent binary dependency analysis from generating symbolic links for libraries from `torch/lib` to
- # the top-level application directory. These symbolic links seem to confuse `torch` about location of its shared
- # libraries (likely because code in one of the libraries looks up the library file's location, but does not
- # fully resolve it), and prevent it from finding dynamically-loaded libraries in `torch/lib` directory, such as
- # `torch/lib/libtorch_cuda_linalg.so`. The issue was observed with earlier versions of `torch` builds provided
- # by https://download.pytorch.org/whl/torch, specifically 1.13.1+cu117, 2.0.1+cu117, and 2.1.2+cu118; later
- # versions do not seem to be affected. The wheels provided on PyPI do not seem to be affected, either, even
- # for torch 1.13.1, 2.01, and 2.1.2. However, these symlinks should be not necessary on linux in general, so
- # there should be no harm in suppressing them for all versions.
- #
- # The `bindepend_symlink_suppression` hook attribute requires PyInstaller >= 6.11, and is no-op in earlier
- # versions.
- bindepend_symlink_suppression = ['**/torch/lib/*.so*']
-
- # The Windows nightly build for torch 2.3.0 added dependency on MKL. The `mkl` distribution does not provide an
- # importable package, but rather installs the DLLs in /Library/bin directory. Therefore, we cannot write a
- # separate hook for it, and must collect the DLLs here. (Most of these DLLs are missed by PyInstaller's binary
- # dependency analysis due to being dynamically loaded at run-time).
- if compat.is_win:
- def _collect_mkl_dlls():
- # Determine if torch is packaged by Anaconda or not. Ideally, we would use our `get_installer()` hook
- # utility function to check if installer is `conda`. However, it seems that some builds (e.g., those from
- # `pytorch` and `nvidia` channels) provide legacy metadata in form of .egg-info directory, which does not
- # include an INSTALLER file. So instead, search the conda metadata for a conda distribution/package that
- # provides a `torch` importable package, if any.
- conda_torch_dist = None
- if compat.is_conda:
- from PyInstaller.utils.hooks import conda_support
- try:
- conda_torch_dist = conda_support.package_distribution('torch')
- except ModuleNotFoundError:
- conda_torch_dist = None
-
- if conda_torch_dist:
- # Anaconda-packaged torch
- if 'mkl' not in conda_torch_dist.dependencies:
- logger.info('hook-torch: this torch build (Anaconda package) does not depend on MKL...')
- return []
-
- logger.info('hook-torch: collecting DLLs from MKL and its dependencies (Anaconda packages)')
- mkl_binaries = conda_support.collect_dynamic_libs('mkl', dependencies=True)
- else:
- # Non-Anaconda torch (e.g., PyPI wheel)
- import packaging.requirements
- from _pyinstaller_hooks_contrib.compat import importlib_metadata
-
- # Check if torch depends on `mkl`
- dist = importlib_metadata.distribution("torch")
- requirements = [packaging.requirements.Requirement(req) for req in dist.requires or []]
- requirements = [req.name for req in requirements if req.marker is None or req.marker.evaluate()]
- if 'mkl' not in requirements:
- logger.info('hook-torch: this torch build does not depend on MKL...')
- return []
-
- # Find requirements of mkl - this should yield `intel-openmp` and `tbb`, which install DLLs in the same
- # way as `mkl`.
- try:
- dist = importlib_metadata.distribution("mkl")
- except importlib_metadata.PackageNotFoundError:
- return [] # For some reason, `mkl` distribution is unavailable.
- requirements = [packaging.requirements.Requirement(req) for req in dist.requires or []]
- requirements = [req.name for req in requirements if req.marker is None or req.marker.evaluate()]
-
- requirements = ['mkl'] + requirements
-
- mkl_binaries = []
- logger.info('hook-torch: collecting DLLs from MKL and its dependencies: %r', requirements)
- for requirement in requirements:
- try:
- dist = importlib_metadata.distribution(requirement)
- except importlib_metadata.PackageNotFoundError:
- continue
-
- # Go over files, and match DLLs in /Library/bin directory
- for dist_file in (dist.files or []):
- # NOTE: `importlib_metadata.PackagePath.match()` does not seem to properly normalize the
- # separator, and on Windows, RECORD can apparently end up with entries that use either Windows
- # or POSIX-style separators (see pyinstaller/pyinstaller-hooks-contrib#879). This is why we
- # first resolve the file's location (which yields a `pathlib.Path` instance), and perform
- # matching on resolved path.
- dll_file = dist.locate_file(dist_file).resolve()
- if not dll_file.match('**/Library/bin/*.dll'):
- continue
- mkl_binaries.append((str(dll_file), '.'))
-
- if mkl_binaries:
- logger.info(
- 'hook-torch: found MKL DLLs: %r',
- sorted([os.path.basename(src_name) for src_name, dest_name in mkl_binaries])
- )
- else:
- logger.info('hook-torch: no MKL DLLs found.')
-
- return mkl_binaries
-
- try:
- mkl_binaries = _collect_mkl_dlls()
- except Exception:
- # Log the exception, but make it non-fatal
- logger.warning("hook-torch: failed to collect MKL DLLs!", exc_info=True)
- mkl_binaries = []
- binaries += mkl_binaries
-else:
- datas = [(get_package_paths("torch")[1], "torch")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchao.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchao.py
deleted file mode 100644
index 5d36ef1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchao.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Collect source .py files for JIT/torchscript.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchaudio.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchaudio.py
deleted file mode 100644
index 57e570e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchaudio.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs, collect_submodules
-
-# Collect dynamic extensions from torchaudio/lib - some of them are loaded dynamically, and are thus not automatically
-# collected.
-binaries = collect_dynamic_libs('torchaudio')
-hiddenimports = collect_submodules('torchaudio.lib')
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchtext.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchtext.py
deleted file mode 100644
index 5ada443..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchtext.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_dynamic_libs, collect_submodules
-
-# Collect dynamic extensions from torchtext/lib - some of them are loaded dynamically, and are thus not automatically
-# collected.
-binaries = collect_dynamic_libs('torchtext')
-hiddenimports = collect_submodules('torchtext.lib')
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchvision.io.image.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchvision.io.image.py
deleted file mode 100644
index ba4a894..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchvision.io.image.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# torchivison.io.image attempts to dynamically load the torchvision.image extension.
-hiddenimports = ['torchvision.image']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchvision.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchvision.py
deleted file mode 100644
index f0ce8e4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-torchvision.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Functions from torchvision.ops.* modules require torchvision._C extension module, which PyInstaller fails to pick up
-# automatically due to indirect load.
-hiddenimports = ['torchvision._C']
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame.py
deleted file mode 100644
index 404221a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ["pkgutil"]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_client.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_client.py
deleted file mode 100644
index c134034..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_client.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_client", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_code.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_code.py
deleted file mode 100644
index 333020b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_code.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_code", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_components.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_components.py
deleted file mode 100644
index d49cfb4..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_components.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_components", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_datagrid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_datagrid.py
deleted file mode 100644
index 601481c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_datagrid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_datagrid", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_deckgl.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_deckgl.py
deleted file mode 100644
index 091566e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_deckgl.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_deckgl", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_formkit.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_formkit.py
deleted file mode 100644
index f677965..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_formkit.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_formkit", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_grid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_grid.py
deleted file mode 100644
index 0373131..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_grid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_grid", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_iframe.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_iframe.py
deleted file mode 100644
index 5ee77f7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_iframe.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_iframe", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_keycloak.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_keycloak.py
deleted file mode 100644
index 89413a6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_keycloak.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_keycloak", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_leaflet.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_leaflet.py
deleted file mode 100644
index 9e2f295..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_leaflet.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_leaflet", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_markdown.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_markdown.py
deleted file mode 100644
index 7107379..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_markdown.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_markdown", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_matplotlib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_matplotlib.py
deleted file mode 100644
index 63e6e66..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_matplotlib.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_matplotlib", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_mesh_streamer.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_mesh_streamer.py
deleted file mode 100644
index b782f7a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_mesh_streamer.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-hiddenimports = ["vtk"]
-datas = collect_data_files("trame_mesh_streamer", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_plotly.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_plotly.py
deleted file mode 100644
index eaa2ecd..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_plotly.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_plotly", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_pvui.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_pvui.py
deleted file mode 100644
index 209cd63..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_pvui.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_pvui", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_quasar.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_quasar.py
deleted file mode 100644
index 3dc1c26..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_quasar.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_quasar", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_rca.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_rca.py
deleted file mode 100644
index b9e5da9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_rca.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_rca", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_router.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_router.py
deleted file mode 100644
index a756569..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_router.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_router", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_simput.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_simput.py
deleted file mode 100644
index d80a7ec..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_simput.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_simput", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_tauri.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_tauri.py
deleted file mode 100644
index af47491..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_tauri.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_tauri", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_tweakpane.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_tweakpane.py
deleted file mode 100644
index 81c9190..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_tweakpane.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [*collect_data_files("trame_tweakpane", subdir="module")]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vega.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vega.py
deleted file mode 100644
index fe157d2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vega.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_vega", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtk.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtk.py
deleted file mode 100644
index 865cbd9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtk.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = [
- *collect_data_files("trame_vtk", subdir="modules"),
- *collect_data_files("trame_vtk", subdir="tools"),
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtk3d.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtk3d.py
deleted file mode 100644
index 1c85729..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtk3d.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_vtk3d", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtklocal.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtklocal.py
deleted file mode 100644
index 288e1e8..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vtklocal.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-hiddenimports = ["vtk"]
-datas = collect_data_files("trame_vtklocal", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vuetify.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vuetify.py
deleted file mode 100644
index 4ea24fc..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_vuetify.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_vuetify", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_xterm.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_xterm.py
deleted file mode 100644
index 39c3a72..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trame_xterm.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("trame_xterm", subdir="module")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-transformers.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-transformers.py
deleted file mode 100644
index 6fd7a35..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-transformers.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from PyInstaller.utils.hooks import (
- copy_metadata,
- get_module_attribute,
- is_module_satisfies,
- logger,
-)
-
-datas = []
-
-# At run-time, `transformers` queries the metadata of several packages to check for their presence. The list of required
-# (core) packages is stored as `transformers.dependency_versions_check.pkgs_to_check_at_runtime`. However, there is more
-# comprehensive list of dependencies and their versions available in `transformers.dependency_versions_table.deps`,
-# which includes non-core dependencies. Unfortunately, we cannot foresee which of those the user will actually require,
-# so we collect metadata for all listed dists that are available in the build environment, in order to make them visible
-# to `transformers` at run-time.
-try:
- dependencies = get_module_attribute(
- 'transformers.dependency_versions_table',
- 'deps',
- )
-except Exception:
- logger.warning(
- "hook-transformers: failed to query dependency table (transformers.dependency_versions_table.deps)!",
- exc_info=True,
- )
- dependencies = {}
-
-for dependency_name, dependency_req in dependencies.items():
- if not is_module_satisfies(dependency_req):
- continue
- try:
- datas += copy_metadata(dependency_name)
- except Exception:
- pass
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-travertino.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-travertino.py
deleted file mode 100644
index 6afc577..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-travertino.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-# Prevent this package from pulling `setuptools_scm` into frozen application, as it makes no sense in that context.
-excludedimports = ["setuptools_scm"]
-
-# Collect metadata to allow package to infer its version at run-time.
-datas = copy_metadata("travertino")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trimesh.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trimesh.py
deleted file mode 100644
index 90ebfda..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-trimesh.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect the *.json resource file.
-# This issue is reported in here: https://github.com/mikedh/trimesh/issues/412
-datas = collect_data_files('trimesh')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-triton.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-triton.py
deleted file mode 100644
index a1e006c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-triton.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ---------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs, collect_submodules, is_module_satisfies
-
-hiddenimports = []
-datas = []
-
-# Ensure that triton/_C/libtriton.so is collected
-binaries = collect_dynamic_libs('triton')
-
-# triton has a JIT module that requires its source .py files. For some god-forsaken reason, this JIT module
-# (`triton.runtime.jit` attempts to directly read the contents of file pointed to by its `__file__` attribute (assuming
-# it is a source file). Therefore, `triton.runtime.jit` must not be collected into PYZ. Same goes for `compiler` and
-# `language` sub-packages.
-module_collection_mode = {
- 'triton': 'pyz+py',
- 'triton.runtime.jit': 'py',
- 'triton.compiler': 'py',
- 'triton.language': 'py',
-}
-
-# triton 3.0.0 introduced `triton.backends` sub-package with backend-specific files.
-if is_module_satisfies('triton >= 3.0.0'):
- # Collect backend sub-modules/packages.
- hiddenimports += collect_submodules('triton.backends')
-
- # At the time of writing (triton v3.1.0), `triton.backends.amd` is a namespace package, and is not captured by the
- # above `collect_submodules` call.
- hiddenimports += collect_submodules('triton.backends.amd')
-
- # Collect ptxas compiler files from `triton/backends/nvidia`, and the HIP/ROCm files from `triton/backends/amd`.
- datas += collect_data_files('triton.backends')
-else:
- # Collect ptxas compiler files from triton/third_party/cuda directory. Strictly speaking, the ptxas executable from
- # bin directory should be collected as a binary, but in this case, it makes no difference (plus, PyInstaller >= 6.0
- # has automatic binary-vs-data reclassification).
- datas += collect_data_files('triton.third_party.cuda')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ttkthemes.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ttkthemes.py
deleted file mode 100644
index 87c731b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ttkthemes.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for use with the ttkthemes package
-
-ttkthemes depends on a large set of image and Tcl-code files contained
-within its package directory. These are not imported, and thus this hook
-is required so they are copied.
-
-The file structure of the ttkthemes package folder is:
-ttkthemes
-├───advanced
-| └───*.tcl
-├───themes
-| ├───theme1
-| | ├───theme1
-| | | └───*.gif
-| | └───theme1.tcl
-| ├───theme2
-| ├───...
-| └───pkgIndex.tcl
-├───png
-└───gif
-
-The ``themes`` directory contains themes which only have a universal
-image version (either base64 encoded in the theme files or GIF), while
-``png`` and ``gif`` contain the PNG and GIF versions of the themes which
-support both respectively.
-
-All of this must be copied, as the package expects all the data to be
-present and only checks what themes to load at runtime.
-
-Tested hook on Linux (Ubuntu 18.04, Python 3.6 minimal venv) and on
-Windows 7 (Python 3.7, minimal system-wide installation).
-
->>> from tkinter import ttk
->>> from ttkthemes import ThemedTk
->>>
->>>
->>> if __name__ == '__main__':
->>> window = ThemedTk(theme="plastik")
->>> ttk.Button(window, text="Quit", command=window.destroy).pack()
->>> window.mainloop()
-"""
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("ttkthemes")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ttkwidgets.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ttkwidgets.py
deleted file mode 100644
index 94c65e3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ttkwidgets.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for use with the ttkwidgets package
-
-ttkwidgets provides a set of cross-platform widgets for Tkinter/ttk,
-some of which depend on image files in order to function properly.
-
-These images files are all provided in the `ttkwidgets/assets` folder,
-which has to be copied by PyInstaller.
-
-This hook has been tested on Ubuntu 18.04 (Python 3.6.8 venv) and
-Windows 7 (Python 3.5.4 system-wide).
-
->>> import tkinter as tk
->>> from ttkwidgets import CheckboxTreeview
->>>
->>> window = tk.Tk()
->>> tree = CheckboxTreeview(window)
->>> tree.insert("", tk.END, "test", text="Hello World!")
->>> tree.insert("test", tk.END, "test2", text="Hello World again!")
->>> tree.insert("test", tk.END, "test3", text="Hello World again again!")
->>> tree.pack()
->>> window.mainloop()
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files("ttkwidgets")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tzdata.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tzdata.py
deleted file mode 100644
index 2f540db..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tzdata.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files, collect_submodules
-
-# Collect timezone data files
-datas = collect_data_files("tzdata")
-
-# Collect submodules; each data subdirectory is in fact a package
-# (e.g., zoneinfo.Europe), so we need its __init__.py for data files
-# (e.g., zoneinfo/Europe/Ljubljana) to be discoverable via
-# importlib.resources
-hiddenimports = collect_submodules("tzdata")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tzwhere.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tzwhere.py
deleted file mode 100644
index 5c583af..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-tzwhere.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('tzwhere')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-u1db.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-u1db.py
deleted file mode 100644
index ddd32c9..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-u1db.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Pyinstaller hook for u1db module
-
-This hook was tested with:
-- u1db 0.1.4 : https://launchpad.net/u1db
-- Python 2.7.10
-- Linux Debian GNU/Linux unstable (sid)
-
-Test script used for testing:
-
- import u1db
- db = u1db.open("mydb1.u1db", create=True)
- doc = db.create_doc({"key": "value"}, doc_id="testdoc")
- print doc.content
- print doc.doc_id
-"""
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('u1db')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ultralytics.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ultralytics.py
deleted file mode 100644
index c49eac3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-ultralytics.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# Collect config .yaml files from ultralytics/cfg directory.
-datas = collect_data_files('ultralytics')
-
-# Collect source .py files for JIT/torchscript. Requires PyInstaller >= 5.3, no-op in older versions.
-module_collection_mode = 'pyz+py'
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-umap.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-umap.py
deleted file mode 100644
index 5ae0d4d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-umap.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('umap-learn')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-unidecode.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-unidecode.py
deleted file mode 100644
index a51d89d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-unidecode.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the unidecode package: https://pypi.python.org/pypi/unidecode
-# Tested with Unidecode 0.4.21 and Python 3.6.2, on Windows 10 x64.
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# Unidecode dynamically imports modules with relevant character mappings.
-# Non-ASCII characters are ignored if the mapping files are not found.
-hiddenimports = collect_submodules('unidecode')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uniseg.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uniseg.py
deleted file mode 100644
index af28f0f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uniseg.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the uniseg module: https://pypi.python.org/pypi/uniseg
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('uniseg')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-urllib3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-urllib3.py
deleted file mode 100644
index cafd1b0..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-urllib3.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules, is_module_satisfies
-
-# If this is `urllib3` from `urllib3-future`, collect submodules in order to avoid missing modules due to indirect
-# imports. With `urllib3` from "classic" `urllib3`, this does not seem to be necessary.
-if is_module_satisfies("urllib3-future"):
- hiddenimports = collect_submodules("urllib3")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-urllib3_future.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-urllib3_future.py
deleted file mode 100644
index 0baa1d7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-urllib3_future.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# Collect submodules in order to avoid missing modules due to indirect imports.
-hiddenimports = collect_submodules("urllib3_future")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-usb.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-usb.py
deleted file mode 100644
index 5721eaa..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-usb.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import ctypes.util
-import os
-
-from PyInstaller.depend.utils import _resolveCtypesImports
-from PyInstaller.compat import is_cygwin, getenv
-from PyInstaller.utils.hooks import logger
-
-# Include glob for library lookup in run-time hook.
-hiddenimports = ['glob']
-
-# https://github.com/walac/pyusb/blob/master/docs/faq.rst
-# https://github.com/walac/pyusb/blob/master/docs/tutorial.rst
-
-binaries = []
-
-# Running usb.core.find() in this script crashes Ubuntu 14.04LTS,
-# let users circumvent pyusb discovery with an environment variable.
-skip_pyusb_discovery = \
- bool(getenv('PYINSTALLER_USB_HOOK_SKIP_PYUSB_DISCOVERY'))
-
-# Try to use pyusb's library locator.
-if not skip_pyusb_discovery:
- import usb.core
- import usb.backend
- try:
- # get the backend symbols before find
- backend_contents_before_discovery = set(dir(usb.backend))
- # perform find, which will load a usb library if found
- usb.core.find()
- # get the backend symbols which have been added (loaded)
- backends = set(dir(usb.backend)) - backend_contents_before_discovery
- for usblib in [getattr(usb.backend, be)._lib for be in backends]:
- if usblib is not None:
- if os.path.isabs(usblib._name):
- binaries.append((os.path.basename(usblib._name), usblib._name, "BINARY"))
- else:
- # OSX returns the full path, Linux only the filename.
- # try to resolve the library names to absolute paths.
- backend_lib_full_paths = _resolveCtypesImports([os.path.basename(usblib._name)])
- if backend_lib_full_paths:
- binaries.append(backend_lib_full_paths[0])
- except (ValueError, usb.core.USBError) as exc:
- logger.warning("%s", exc)
-
-# If pyusb didn't find a backend, manually search for usb libraries.
-if not binaries:
- # NOTE: Update these lists when adding further libs.
- if is_cygwin:
- libusb_candidates = ['cygusb-1.0-0.dll', 'cygusb0.dll']
- else:
- libusb_candidates = [
- # libusb10
- 'usb-1.0',
- 'usb',
- 'libusb-1.0',
- # libusb01
- 'usb-0.1',
- 'libusb0',
- # openusb
- 'openusb',
- ]
-
- backend_library_basenames = []
- for candidate in libusb_candidates:
- libname = ctypes.util.find_library(candidate)
- if libname is not None:
- if os.path.isabs(libname):
- binaries.append((os.path.basename(libname), libname, "BINARY"))
- else:
- backend_lib_full_paths = _resolveCtypesImports([os.path.basename(libname)])
- if backend_lib_full_paths:
- binaries.append(backend_lib_full_paths[0])
-
-# Validate and normalize the first found usb library.
-if binaries:
- # `_resolveCtypesImports` returns a 3-tuple, but `binaries` are only
- # 2-tuples, so remove the last element:
- assert len(binaries[0]) == 3
- binaries = [(binaries[0][1], '.')]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uuid6.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uuid6.py
deleted file mode 100644
index 8a85018..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uuid6.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import is_module_satisfies, copy_metadata
-
-# Starting with version 2025.0.1, uuid6 queries its metadata for version information.
-if is_module_satisfies('uuid6 >= 2025.0.1'):
- datas = copy_metadata('uuid6')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uvicorn.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uvicorn.py
deleted file mode 100644
index 0acdd3c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uvicorn.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('uvicorn')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uvloop.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uvloop.py
deleted file mode 100644
index 4c4280c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-uvloop.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-#
-# Hook for the uvloop package: https://pypi.python.org/pypi/uvloop
-#
-# Tested with uvloop 0.8.1 and Python 3.6.2, on Ubuntu 16.04.1 64bit.
-
-from PyInstaller.utils.hooks import collect_submodules
-
-hiddenimports = collect_submodules('uvloop')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vaderSentiment.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vaderSentiment.py
deleted file mode 100644
index 0879fff..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vaderSentiment.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('vaderSentiment')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmDataModel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmDataModel.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmDataModel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmFilters.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmFilters.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkAcceleratorsVTKmFilters.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkChartsCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkChartsCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkChartsCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonColor.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonColor.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonColor.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonComputationalGeometry.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonComputationalGeometry.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonComputationalGeometry.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonDataModel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonDataModel.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonDataModel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonExecutionModel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonExecutionModel.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonExecutionModel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonMath.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonMath.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonMath.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonMisc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonMisc.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonMisc.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonPython.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonPython.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonPython.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonSystem.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonSystem.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonSystem.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonTransforms.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonTransforms.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkCommonTransforms.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkDomainsChemistry.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkDomainsChemistry.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkDomainsChemistry.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkDomainsChemistryOpenGL2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkDomainsChemistryOpenGL2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkDomainsChemistryOpenGL2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersAMR.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersAMR.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersAMR.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersCellGrid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersCellGrid.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersCellGrid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersExtraction.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersExtraction.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersExtraction.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersFlowPaths.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersFlowPaths.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersFlowPaths.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeneral.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeneral.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeneral.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeneric.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeneric.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeneric.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeometry.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeometry.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeometry.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeometryPreview.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeometryPreview.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersGeometryPreview.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersHybrid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersHybrid.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersHybrid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersHyperTree.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersHyperTree.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersHyperTree.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersImaging.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersImaging.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersImaging.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersModeling.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersModeling.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersModeling.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallel.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelDIY2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelDIY2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelDIY2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelImaging.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelImaging.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelImaging.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelStatistics.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelStatistics.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersParallelStatistics.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersPoints.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersPoints.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersPoints.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersProgrammable.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersProgrammable.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersProgrammable.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersPython.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersPython.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersPython.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersReduction.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersReduction.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersReduction.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSMP.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSMP.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSMP.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSelection.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSelection.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSelection.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSources.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSources.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersSources.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersStatistics.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersStatistics.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersStatistics.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTemporal.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTemporal.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTemporal.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTensor.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTensor.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTensor.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTexture.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTexture.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTexture.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTopology.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTopology.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersTopology.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersVerdict.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersVerdict.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkFiltersVerdict.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkGeovisCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkGeovisCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkGeovisCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAMR.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAMR.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAMR.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAsynchronous.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAsynchronous.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAsynchronous.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAvmesh.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAvmesh.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOAvmesh.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCGNSReader.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCGNSReader.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCGNSReader.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCONVERGECFD.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCONVERGECFD.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCONVERGECFD.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCellGrid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCellGrid.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCellGrid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCesium3DTiles.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCesium3DTiles.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCesium3DTiles.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOChemistry.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOChemistry.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOChemistry.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCityGML.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCityGML.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCityGML.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOERF.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOERF.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOERF.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOEnSight.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOEnSight.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOEnSight.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOEngys.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOEngys.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOEngys.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExodus.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExodus.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExodus.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExport.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExport.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExport.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExportGL2PS.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExportGL2PS.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExportGL2PS.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExportPDF.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExportPDF.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOExportPDF.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOFDS.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOFDS.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOFDS.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOFLUENTCFF.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOFLUENTCFF.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOFLUENTCFF.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOGeoJSON.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOGeoJSON.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOGeoJSON.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOGeometry.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOGeometry.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOGeometry.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOH5Rage.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOH5Rage.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOH5Rage.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOH5part.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOH5part.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOH5part.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOHDF.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOHDF.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOHDF.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOIOSS.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOIOSS.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOIOSS.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOImage.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOImage.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOImage.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOImport.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOImport.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOImport.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOInfovis.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOInfovis.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOInfovis.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLANLX3D.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLANLX3D.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLANLX3D.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLSDyna.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLSDyna.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLSDyna.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLegacy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLegacy.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOLegacy.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMINC.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMINC.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMINC.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMotionFX.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMotionFX.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMotionFX.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMovie.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMovie.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOMovie.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIONetCDF.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIONetCDF.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIONetCDF.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOOMF.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOOMF.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOOMF.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOOggTheora.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOOggTheora.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOOggTheora.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOPIO.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOPIO.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOPIO.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOPLY.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOPLY.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOPLY.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallel.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelExodus.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelExodus.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelExodus.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelLSDyna.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelLSDyna.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelLSDyna.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelXML.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelXML.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOParallelXML.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOSQL.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOSQL.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOSQL.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOSegY.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOSegY.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOSegY.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOTRUCHAS.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOTRUCHAS.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOTRUCHAS.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOTecplotTable.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOTecplotTable.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOTecplotTable.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVPIC.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVPIC.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVPIC.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVeraOut.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVeraOut.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVeraOut.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVideo.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVideo.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOVideo.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXML.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXML.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXML.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXMLParser.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXMLParser.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXMLParser.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXdmf2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXdmf2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkIOXdmf2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingColor.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingColor.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingColor.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingFourier.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingFourier.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingFourier.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingGeneral.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingGeneral.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingGeneral.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingHybrid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingHybrid.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingHybrid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingMath.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingMath.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingMath.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingMorphological.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingMorphological.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingMorphological.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingOpenGL2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingOpenGL2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingOpenGL2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingSources.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingSources.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingSources.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingStatistics.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingStatistics.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingStatistics.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingStencil.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingStencil.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkImagingStencil.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInfovisCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInfovisCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInfovisCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInfovisLayout.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInfovisLayout.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInfovisLayout.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionImage.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionImage.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionImage.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionStyle.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionStyle.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionStyle.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionWidgets.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionWidgets.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkInteractionWidgets.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkParallelCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkParallelCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkParallelCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkPythonContext2D.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkPythonContext2D.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkPythonContext2D.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingAnnotation.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingAnnotation.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingAnnotation.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingCellGrid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingCellGrid.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingCellGrid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingContext2D.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingContext2D.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingContext2D.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingContextOpenGL2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingContextOpenGL2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingContextOpenGL2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingExternal.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingExternal.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingExternal.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingFreeType.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingFreeType.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingFreeType.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingGL2PSOpenGL2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingGL2PSOpenGL2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingGL2PSOpenGL2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingGridAxes.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingGridAxes.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingGridAxes.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingHyperTreeGrid.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingHyperTreeGrid.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingHyperTreeGrid.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingImage.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingImage.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingImage.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLICOpenGL2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLICOpenGL2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLICOpenGL2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLOD.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLOD.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLOD.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLabel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLabel.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingLabel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingMatplotlib.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingMatplotlib.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingMatplotlib.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingOpenGL2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingOpenGL2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingOpenGL2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingParallel.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingParallel.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingParallel.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingSceneGraph.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingSceneGraph.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingSceneGraph.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingUI.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingUI.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingUI.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVR.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVR.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVR.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVRModels.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVRModels.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVRModels.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolume.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolume.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolume.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolumeAMR.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolumeAMR.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolumeAMR.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolumeOpenGL2.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolumeOpenGL2.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVolumeOpenGL2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVtkJS.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVtkJS.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkRenderingVtkJS.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkSerializationManager.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkSerializationManager.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkSerializationManager.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkTestingRendering.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkTestingRendering.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkTestingRendering.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkTestingSerialization.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkTestingSerialization.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkTestingSerialization.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsContext2D.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsContext2D.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsContext2D.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsInfovis.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsInfovis.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkViewsInfovis.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkWebCore.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkWebCore.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkWebCore.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkWebGLExporter.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkWebGLExporter.py
deleted file mode 100644
index 960187b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkmodules.vtkWebGLExporter.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.utils.vtkmodules import add_vtkmodules_dependencies
-
-hiddenimports = add_vtkmodules_dependencies(__file__)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkpython.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkpython.py
deleted file mode 100644
index 76c1e60..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-vtkpython.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-if os.name == 'posix':
- hiddenimports = [
- 'libvtkCommonPython', 'libvtkFilteringPython', 'libvtkIOPython',
- 'libvtkImagingPython', 'libvtkGraphicsPython', 'libvtkRenderingPython',
- 'libvtkHybridPython', 'libvtkParallelPython', 'libvtkPatentedPython'
- ]
-else:
- hiddenimports = [
- 'vtkCommonPython', 'vtkFilteringPython', 'vtkIOPython',
- 'vtkImagingPython', 'vtkGraphicsPython', 'vtkRenderingPython',
- 'vtkHybridPython', 'vtkParallelPython', 'vtkPatentedPython'
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wavefile.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wavefile.py
deleted file mode 100644
index 11dc973..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wavefile.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-python-wavefile: https://github.com/vokimon/python-wavefile
-"""
-
-from PyInstaller.utils.hooks import collect_dynamic_libs
-
-binaries = collect_dynamic_libs('wavefile')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-weasyprint.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-weasyprint.py
deleted file mode 100644
index b848fcb..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-weasyprint.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for weasyprint: https://pypi.python.org/pypi/WeasyPrint
-# Tested on version weasyprint 54.0 using Windows 10 and python 3.8
-# Note that weasyprint < 54.0 does not work on python 3.8 due to https://github.com/Kozea/WeasyPrint/issues/1435
-# For weasyprint < 53.0 the required libs are
-# libs = [
-# 'gobject-2.0', 'libgobject-2.0-0', 'libgobject-2.0.so.0', 'libgobject-2.0.dylib',
-# 'pango-1.0', 'libpango-1.0-0', 'libpango-1.0.so.0', 'libpango-1.0.dylib',
-# 'pangocairo-1.0', 'libpangocairo-1.0-0', 'libpangocairo-1.0.so.0', 'libpangocairo-1.0.dylib',
-# 'fontconfig', 'libfontconfig', 'libfontconfig-1.dll', 'libfontconfig.so.1', 'libfontconfig-1.dylib',
-# 'pangoft2-1.0', 'libpangoft2-1.0-0', 'libpangoft2-1.0.so.0', 'libpangoft2-1.0.dylib'
-# ]
-
-import ctypes.util
-import os
-from pathlib import Path
-
-from PyInstaller.compat import is_win
-from PyInstaller.depend.utils import _resolveCtypesImports
-from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies, logger
-
-datas = collect_data_files('weasyprint')
-binaries = []
-fontconfig_config_dir_found = False
-
-# On Windows, a GTK3-installation provides fontconfig and the corresponding fontconfig conf files. We have to add these
-# for weasyprint to correctly use fonts.
-# NOTE: Update these lists if weasyprint requires more libraries
-fontconfig_libs = [
- 'fontconfig-1', 'fontconfig', 'libfontconfig', 'libfontconfig-1.dll', 'libfontconfig.so.1', 'libfontconfig-1.dylib'
-]
-libs = [
- 'gobject-2.0-0', 'gobject-2.0', 'libgobject-2.0-0', 'libgobject-2.0.so.0', 'libgobject-2.0.dylib',
- 'pango-1.0-0', 'pango-1.0', 'libpango-1.0-0', 'libpango-1.0.so.0', 'libpango-1.0.dylib',
- 'harfbuzz', 'harfbuzz-0.0', 'libharfbuzz-0', 'libharfbuzz.so.0', 'libharfbuzz.so.0', 'libharfbuzz.0.dylib',
- 'pangoft2-1.0-0', 'pangoft2-1.0', 'libpangoft2-1.0-0', 'libpangoft2-1.0.so.0', 'libpangoft2-1.0.dylib'
-]
-
-# Starting with weasyprint v63.0, libharfbuzz-subset is also opportunistically loaded. Make sure to collect a copy, if
-# available, to prevent a system copy from being loaded at run-time.
-if is_module_satisfies("weasyprint >= 63.0"):
- libs += [
- 'harfbuzz-subset', 'harfbuzz-subset-0.0', 'libharfbuzz-subset-0', 'libharfbuzz-subset.so.0',
- 'libharfbuzz-subset.0.dylib', 'libharfbuzz-subset-0.dll',
- ]
-
-try:
- lib_basenames = []
- for lib in libs:
- libname = ctypes.util.find_library(lib)
- if libname is not None:
- lib_basenames += [os.path.basename(libname)]
- for lib in fontconfig_libs:
- libname = ctypes.util.find_library(lib)
- if libname is not None:
- lib_basenames += [os.path.basename(libname)]
- # Try to load fontconfig config files on Windows from a GTK-installation
- if is_win:
- fontconfig_config_dir = Path(libname).parent.parent / 'etc/fonts'
- if fontconfig_config_dir.exists() and fontconfig_config_dir.is_dir():
- datas += [(str(fontconfig_config_dir), 'etc/fonts')]
- fontconfig_config_dir_found = True
- if lib_basenames:
- resolved_libs = _resolveCtypesImports(lib_basenames)
- for resolved_lib in resolved_libs:
- binaries.append((resolved_lib[1], '.'))
- # Try to load fontconfig config files on other OS
- fontconfig_config_dir = Path('/etc/fonts')
- if fontconfig_config_dir.exists() and fontconfig_config_dir.is_dir():
- datas += [(str(fontconfig_config_dir), 'etc/fonts')]
- fontconfig_config_dir_found = True
-
-except Exception as e:
- logger.warning('Error while trying to find system-installed depending libraries: %s', e)
-
-if not binaries:
- logger.warning('Depending libraries not found - weasyprint will likely fail to work!')
-
-if not fontconfig_config_dir_found:
- logger.warning(
- 'Fontconfig configuration files not found - weasyprint will likely throw warnings and use default fonts!'
- )
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-web3.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-web3.py
deleted file mode 100644
index bc5c97e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-web3.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata("web3")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webassets.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webassets.py
deleted file mode 100644
index 8a4b983..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webassets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('webassets', include_py_files=True)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webrtcvad.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webrtcvad.py
deleted file mode 100644
index 853ead1..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webrtcvad.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('webrtcvad')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-websockets.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-websockets.py
deleted file mode 100644
index 84e0ec2..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-websockets.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_submodules
-
-# Websockets lazily loads its submodules.
-hiddenimports = collect_submodules("websockets")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webview.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webview.py
deleted file mode 100644
index e465a66..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-webview.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# hook for https://github.com/r0x0r/pywebview
-
-from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
-from PyInstaller.compat import is_win
-
-if is_win:
- datas = collect_data_files('webview', subdir='lib')
- binaries = collect_dynamic_libs('webview')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-win32com.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-win32com.py
deleted file mode 100644
index 346d133..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-win32com.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = [
- # win32com client and server util
- # modules could be hidden imports
- # of some modules using win32com.
- # Included for completeness.
- 'win32com.client.util',
- 'win32com.server.util',
-]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wordcloud.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wordcloud.py
deleted file mode 100644
index 831a3f6..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wordcloud.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('wordcloud')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-workflow.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-workflow.py
deleted file mode 100644
index 43de8d7..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-workflow.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('workflow')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.lib.activex.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.lib.activex.py
deleted file mode 100644
index e3deb15..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.lib.activex.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller import isolated
-
-
-# This is necessary because on first import, `wx.lib.activex` generates .tlb file for `comtypes`, unless running in a
-# frozen application (in which case, the .tlb file is expected to exist already). So if we are building in a completely
-# clean python environment (for example, in a CI/CD pipeline), we need to ensure that .tlb file is generated.
-@isolated.decorate
-def _ensure_tlb_file_exists():
- try:
- import wx.lib.activex # noqa: F401
- except Exception:
- pass
-
-
-_ensure_tlb_file_exists()
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.lib.pubsub.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.lib.pubsub.py
deleted file mode 100644
index c95f591..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.lib.pubsub.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('wx.lib.pubsub', include_py_files=True, excludes=['*.txt', '**/__pycache__'])
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.xrc.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.xrc.py
deleted file mode 100644
index 10c86a3..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-wx.xrc.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-hiddenimports = ['wx._xml', 'wx']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xarray.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xarray.py
deleted file mode 100644
index 79a1da5..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xarray.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata, collect_entry_point
-
-datas = []
-hiddenimports = []
-
-# Collect additional backend plugins that are registered via `xarray.backends` entry-point.
-ep_datas, ep_hiddenimports = collect_entry_point('xarray.backends')
-datas += ep_datas
-hiddenimports += ep_hiddenimports
-
-# Similarly, collect chunk manager entry-points.
-ep_datas, ep_hiddenimports = collect_entry_point('xarray.chunkmanagers')
-datas += ep_datas
-hiddenimports += ep_hiddenimports
-
-# `xarray` requires `numpy` metadata due to several calls to its `xarray.core.utils.module_available` with specified
-# `minversion` argument, which end up calling `importlib.metadata.version`.
-datas += copy_metadata('numpy')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xml.dom.html.HTMLDocument.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xml.dom.html.HTMLDocument.py
deleted file mode 100644
index 97c7f4d..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xml.dom.html.HTMLDocument.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# xml.dom.html.HTMLDocument
-hiddenimports = ['xml.dom.html.HTMLAnchorElement',
- 'xml.dom.html.HTMLAppletElement',
- 'xml.dom.html.HTMLAreaElement',
- 'xml.dom.html.HTMLBaseElement',
- 'xml.dom.html.HTMLBaseFontElement',
- 'xml.dom.html.HTMLBodyElement',
- 'xml.dom.html.HTMLBRElement',
- 'xml.dom.html.HTMLButtonElement',
- 'xml.dom.html.HTMLDirectoryElement',
- 'xml.dom.html.HTMLDivElement',
- 'xml.dom.html.HTMLDListElement',
- 'xml.dom.html.HTMLElement',
- 'xml.dom.html.HTMLFieldSetElement',
- 'xml.dom.html.HTMLFontElement',
- 'xml.dom.html.HTMLFormElement',
- 'xml.dom.html.HTMLFrameElement',
- 'xml.dom.html.HTMLFrameSetElement',
- 'xml.dom.html.HTMLHeadElement',
- 'xml.dom.html.HTMLHeadingElement',
- 'xml.dom.html.HTMLHRElement',
- 'xml.dom.html.HTMLHtmlElement',
- 'xml.dom.html.HTMLIFrameElement',
- 'xml.dom.html.HTMLImageElement',
- 'xml.dom.html.HTMLInputElement',
- 'xml.dom.html.HTMLIsIndexElement',
- 'xml.dom.html.HTMLLabelElement',
- 'xml.dom.html.HTMLLegendElement',
- 'xml.dom.html.HTMLLIElement',
- 'xml.dom.html.HTMLLinkElement',
- 'xml.dom.html.HTMLMapElement',
- 'xml.dom.html.HTMLMenuElement',
- 'xml.dom.html.HTMLMetaElement',
- 'xml.dom.html.HTMLModElement',
- 'xml.dom.html.HTMLObjectElement',
- 'xml.dom.html.HTMLOListElement',
- 'xml.dom.html.HTMLOptGroupElement',
- 'xml.dom.html.HTMLOptionElement',
- 'xml.dom.html.HTMLParagraphElement',
- 'xml.dom.html.HTMLParamElement',
- 'xml.dom.html.HTMLPreElement',
- 'xml.dom.html.HTMLQuoteElement',
- 'xml.dom.html.HTMLScriptElement',
- 'xml.dom.html.HTMLSelectElement',
- 'xml.dom.html.HTMLStyleElement',
- 'xml.dom.html.HTMLTableCaptionElement',
- 'xml.dom.html.HTMLTableCellElement',
- 'xml.dom.html.HTMLTableColElement',
- 'xml.dom.html.HTMLTableElement',
- 'xml.dom.html.HTMLTableRowElement',
- 'xml.dom.html.HTMLTableSectionElement',
- 'xml.dom.html.HTMLTextAreaElement',
- 'xml.dom.html.HTMLTitleElement',
- 'xml.dom.html.HTMLUListElement',
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xml.sax.saxexts.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xml.sax.saxexts.py
deleted file mode 100644
index 5be293b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xml.sax.saxexts.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# xml.sax.saxexts
-hiddenimports = ["xml.sax.drivers2.drv_pyexpat",
- "xml.sax.drivers.drv_xmltok",
- 'xml.sax.drivers2.drv_xmlproc',
- "xml.sax.drivers.drv_xmltoolkit",
- "xml.sax.drivers.drv_xmllib",
- "xml.sax.drivers.drv_xmldc",
- 'xml.sax.drivers.drv_pyexpat',
- 'xml.sax.drivers.drv_xmlproc_val',
- 'xml.sax.drivers.drv_htmllib',
- 'xml.sax.drivers.drv_sgmlop',
- "xml.sax.drivers.drv_sgmllib",
- ]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xmldiff.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xmldiff.py
deleted file mode 100644
index eb2b966..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xmldiff.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-# Hook for https://github.com/Shoobx/xmldiff
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('xmldiff')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xmlschema.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xmlschema.py
deleted file mode 100644
index 05a777c..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xmlschema.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# hook for https://github.com/sissaschool/xmlschema
-from PyInstaller.utils.hooks import collect_data_files
-
-# the library contains a bunch of XSD schemas which are loaded in run time
-datas = collect_data_files("xmlschema")
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xsge_gui.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xsge_gui.py
deleted file mode 100644
index 068781e..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xsge_gui.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the xsge_gui module: https://pypi.python.org/pypi/xsge_gui
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('xsge_gui')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xyzservices.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xyzservices.py
deleted file mode 100644
index d7b0ecf..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-xyzservices.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('xyzservices')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-yapf_third_party.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-yapf_third_party.py
deleted file mode 100644
index d138c53..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-yapf_third_party.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2024 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-datas = collect_data_files('yapf_third_party')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-z3c.rml.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-z3c.rml.py
deleted file mode 100644
index 658e44f..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-z3c.rml.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import collect_data_files
-
-# `z3c.rml` uses Bitstream Vera TTF fonts from the `reportlab` package. As that package can be used without the bundled
-# fonts and as some of the bundled fonts have restrictive license (e.g., DarkGarden), we collect the required subset
-# of fonts here, instead of collecting them all in a hook for `reportlab`.
-datas = collect_data_files(
- "reportlab",
- includes=[
- "fonts/00readme.txt",
- "fonts/bitstream-vera-license.txt",
- "fonts/Vera*.ttf",
- ],
-)
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zarr.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zarr.py
deleted file mode 100644
index 0aefa8a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zarr.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2025 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('zarr')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zeep.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zeep.py
deleted file mode 100644
index 002e106..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zeep.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-# Hook for the zeep module: https://pypi.python.org/pypi/zeep
-# Tested with zeep 0.13.0, Python 2.7, Windows
-
-from PyInstaller.utils.hooks import copy_metadata
-
-datas = copy_metadata('zeep')
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zmq.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zmq.py
deleted file mode 100644
index 5a9f833..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zmq.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2020 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-"""
-Hook for PyZMQ. Cython based Python bindings for messaging library ZeroMQ.
-http://www.zeromq.org/
-"""
-import os
-import glob
-from PyInstaller.utils.hooks import collect_submodules
-from PyInstaller.utils.hooks import is_module_satisfies, get_module_file_attribute
-from PyInstaller.compat import is_win
-
-binaries = []
-datas = []
-hiddenimports = ['zmq.utils.garbage']
-
-# PyZMQ comes with two backends, cython and cffi. Calling collect_submodules()
-# on zmq.backend seems to trigger attempt at compilation of C extension
-# module for cffi backend, which will fail if ZeroMQ development files
-# are not installed on the system. On non-English locales, the resulting
-# localized error messages may cause UnicodeDecodeError. Collecting each
-# backend individually, however, does not seem to cause any problems.
-hiddenimports += ['zmq.backend']
-
-# cython backend
-hiddenimports += collect_submodules('zmq.backend.cython')
-
-# cffi backend: contains extra data that needs to be collected
-# (e.g., _cdefs.h)
-#
-# NOTE: the cffi backend requires compilation of C extension at runtime,
-# which appears to be broken in frozen program. So avoid collecting
-# it altogether...
-if False:
- from PyInstaller.utils.hooks import collect_data_files
-
- hiddenimports += collect_submodules('zmq.backend.cffi')
- datas += collect_data_files('zmq.backend.cffi', excludes=['**/__pycache__', ])
-
-# Starting with pyzmq 22.0.0, the DLLs in Windows wheel are located in
-# site-packages/pyzmq.libs directory along with a .load_order file. This
-# file is required on python 3.7 and earlier. On later versions of python,
-# the pyzmq.libs is required to exist.
-if is_win and is_module_satisfies('pyzmq >= 22.0.0'):
- zmq_root = os.path.dirname(get_module_file_attribute('zmq'))
- libs_dir = os.path.join(zmq_root, os.path.pardir, 'pyzmq.libs')
- # .load_order file (22.0.3 replaced underscore with dash and added
- # version suffix on this file, hence the glob)
- load_order_file = glob.glob(os.path.join(libs_dir, '.load*'))
- datas += [(filename, 'pyzmq.libs') for filename in load_order_file]
- # We need to collect DLLs into _MEIPASS, to avoid duplication due to
- # subsequent binary analysis
- dll_files = glob.glob(os.path.join(libs_dir, "*.dll"))
- binaries += [(dll_file, '.') for dll_file in dll_files]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zoneinfo.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zoneinfo.py
deleted file mode 100644
index 03a5e41..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/stdhooks/hook-zoneinfo.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2021 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from PyInstaller.compat import is_win
-
-# On Windows, timezone data is provided by the tzdata package that is
-# not directly loaded.
-if is_win:
- hiddenimports = ['tzdata']
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__init__.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 9f855c7..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/mypy.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/mypy.cpython-312.pyc
deleted file mode 100644
index 18888e2..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/mypy.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/nvidia_cuda.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/nvidia_cuda.cpython-312.pyc
deleted file mode 100644
index f9f4731..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/nvidia_cuda.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/vtkmodules.cpython-312.pyc b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/vtkmodules.cpython-312.pyc
deleted file mode 100644
index 5b82780..0000000
Binary files a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/__pycache__/vtkmodules.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/mypy.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/mypy.py
deleted file mode 100644
index b2da38b..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/mypy.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2026 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-from _pyinstaller_hooks_contrib.compat import importlib_metadata
-
-
-# Given the distribution name, find the top-level `mypyc` extension module belonging to that distribution. The said
-# top-level module is called something like `30fcd23745efe32ce681__mypyc`; the prefix changes across different versions
-# of the same distribution (and, of course, across different distributions). Therefore, we need to obtain the name by
-# looking at distribution's list of files.
-def find_mypyc_module_for_dist(dist_name):
- try:
- dist = importlib_metadata.distribution(dist_name)
- except importlib_metadata.PackageNotFoundError:
- return []
- return [entry.name.split('.')[0] for entry in (dist.files or []) if '__mypyc' in entry.name]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/nvidia_cuda.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/nvidia_cuda.py
deleted file mode 100644
index b93064a..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/nvidia_cuda.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# ------------------------------------------------------------------
-# Copyright (c) 2023 PyInstaller Development Team.
-#
-# This file is distributed under the terms of the GNU General Public
-# License (version 2.0 or later).
-#
-# The full license is available in LICENSE, distributed with
-# this software.
-#
-# SPDX-License-Identifier: GPL-2.0-or-later
-# ------------------------------------------------------------------
-
-import os
-import re
-
-from PyInstaller import compat
-from PyInstaller.utils.hooks import (
- logger,
- is_module_satisfies,
-)
-
-
-# Helper for collecting shared libraries from NVIDIA CUDA packages on linux.
-def collect_nvidia_cuda_binaries(hook_file):
- # Find the module underlying this nvidia.something hook; i.e., change ``/path/to/hook-nvidia.something.py`` to
- # ``nvidia.something``.
- hook_name, hook_ext = os.path.splitext(os.path.basename(hook_file))
- assert hook_ext.startswith('.py')
- assert hook_name.startswith('hook-')
- module_name = hook_name[5:]
-
- # `search_patterns` was added to `collect_dynamic_libs` in PyInstaller 5.8, so that is the minimum required version.
- binaries = []
- if is_module_satisfies('PyInstaller >= 5.8'):
- from PyInstaller.utils.hooks import collect_dynamic_libs, PY_DYLIB_PATTERNS
- binaries = collect_dynamic_libs(
- module_name,
- # Collect fully-versioned .so files (not included in default search patterns).
- search_patterns=PY_DYLIB_PATTERNS + ["lib*.so.*"],
- )
- else:
- logger.warning("hook-%s: this hook requires PyInstaller >= 5.8!", module_name)
-
- return binaries
-
-
-# Helper to turn list of requirements (e.g., ['nvidia-cublas-cu12', 'nvidia-nccl-cu12', 'nvidia-cudnn-cu12']) into
-# list of corresponding nvidia.* module names (e.g., ['nvidia.cublas', 'nvidia.nccl', 'nvidia-cudnn']), while ignoring
-# unrecognized requirements. Intended for use in hooks for frameworks, such as `torch` and `tensorflow`.
-def infer_hiddenimports_from_requirements(requirements):
- # All nvidia-* packages install to nvidia top-level package, so we cannot query top-level module via
- # metadata. Instead, we manually translate them from dist name to package name.
- _PATTERN = r'^nvidia-(?P.+)-cu[\d]+$'
- nvidia_hiddenimports = []
-
- for req in requirements:
- m = re.match(_PATTERN, req)
- if m is not None:
- # Convert
- package_name = "nvidia." + m.group('subpackage').replace('-', '_')
- nvidia_hiddenimports.append(package_name)
-
- return nvidia_hiddenimports
-
-
-def create_symlink_suppression_patterns(hook_file):
- hook_name, hook_ext = os.path.splitext(os.path.basename(hook_file))
- assert hook_ext.startswith('.py')
- assert hook_name.startswith('hook-')
- module_name = hook_name[5:]
-
- # Applicable only to Linux
- if not compat.is_linux:
- return []
-
- # Pattern: **/{module_dir}/lib/lib*.so*
- return [os.path.join('**', *module_name.split('.'), 'lib', 'lib*.so*')]
diff --git a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/vtkmodules.py b/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/vtkmodules.py
deleted file mode 100644
index cd00c97..0000000
--- a/venv/lib/python3.12/site-packages/_pyinstaller_hooks_contrib/utils/vtkmodules.py
+++ /dev/null
@@ -1,622 +0,0 @@
-import os
-
-from _pyinstaller_hooks_contrib.compat import importlib_metadata
-import packaging.version
-
-try:
- vtk_version = packaging.version.Version(importlib_metadata.version('vtk')).release
-except Exception:
- vtk_version = None
-
-
-# This list of dependencies was obtained via analysis based on code in `vtkmodules/generate_pyi.py` and augmented with
-# missing entries until all tests from `test_vtkmodules` pass. Instead of a pre-computed list, we could dynamically
-# analyze each module when the hook is executed; however, such approach would be slower, and would also not account
-# for all dependencies that had to be added manually.
-#
-# NOTE: `vtkmodules.vtkCommonCore` is a dependency of every module, so do not list it here. Modules with no additional
-# dependencies are also not listed.
-_module_dependencies = {
- 'vtkmodules.vtkAcceleratorsVTKmDataModel': [
- 'vtkmodules.vtkAcceleratorsVTKmCore',
- 'vtkmodules.vtkCommonDataModel',
- ],
- 'vtkmodules.vtkAcceleratorsVTKmFilters': [
- 'vtkmodules.vtkAcceleratorsVTKmCore',
- 'vtkmodules.vtkAcceleratorsVTKmDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCore',
- 'vtkmodules.vtkFiltersGeneral',
- 'vtkmodules.vtkFiltersGeometry',
- 'vtkmodules.vtkImagingCore',
- ],
- 'vtkmodules.vtkChartsCore': [
- 'vtkmodules.vtkRenderingContext2D',
- 'vtkmodules.vtkFiltersGeneral',
- ],
- 'vtkmodules.vtkCommonColor': [
- 'vtkmodules.vtkCommonDataModel',
- ],
- 'vtkmodules.vtkCommonComputationalGeometry': [
- 'vtkmodules.vtkCommonDataModel',
- ],
- 'vtkmodules.vtkCommonDataModel': [
- 'vtkmodules.vtkCommonMath',
- 'vtkmodules.vtkCommonTransforms',
- 'vtkmodules.util.data_model',
- ],
- 'vtkmodules.vtkCommonExecutionModel': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.util.execution_model',
- ],
- 'vtkmodules.vtkCommonMisc': [
- 'vtkmodules.vtkCommonMath',
- ],
- 'vtkmodules.vtkCommonTransforms': [
- 'vtkmodules.vtkCommonMath',
- ],
- 'vtkmodules.vtkDomainsChemistry': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOLegacy',
- 'vtkmodules.vtkIOXMLParser',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkDomainsChemistryOpenGL2': [
- 'vtkmodules.vtkDomainsChemistry',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkFiltersAMR': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersCellGrid': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersCore': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkCommonMisc',
- ],
- 'vtkmodules.vtkFiltersExtraction': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersGeneral',
- ],
- 'vtkmodules.vtkFiltersFlowPaths': [
- 'vtkmodules.vtkCommonComputationalGeometry',
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkCommonMath',
- ],
- 'vtkmodules.vtkFiltersGeneral': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCore',
- ],
- 'vtkmodules.vtkFiltersGeneric': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersGeometry': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersGeometryPreview': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersHybrid': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkCommonTransforms',
- 'vtkmodules.vtkFiltersGeometry',
- ],
- 'vtkmodules.vtkFiltersHyperTree': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCore',
- 'vtkmodules.vtkFiltersGeneral',
- ],
- 'vtkmodules.vtkFiltersImaging': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersStatistics',
- ],
- 'vtkmodules.vtkFiltersModeling': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersGeneral',
- ],
- 'vtkmodules.vtkFiltersParallel': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCore',
- 'vtkmodules.vtkFiltersExtraction',
- 'vtkmodules.vtkFiltersGeneral',
- 'vtkmodules.vtkFiltersGeometry',
- 'vtkmodules.vtkFiltersHybrid',
- 'vtkmodules.vtkFiltersHyperTree',
- 'vtkmodules.vtkFiltersModeling',
- 'vtkmodules.vtkFiltersSources',
- 'vtkmodules.vtkFiltersTexture',
- ],
- 'vtkmodules.vtkFiltersParallelDIY2': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCore',
- 'vtkmodules.vtkFiltersParallel',
- ],
- 'vtkmodules.vtkFiltersParallelImaging': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersImaging',
- 'vtkmodules.vtkFiltersParallel',
- 'vtkmodules.vtkImagingCore',
- ],
- 'vtkmodules.vtkFiltersParallelStatistics': [
- 'vtkmodules.vtkFiltersStatistics',
- ],
- 'vtkmodules.vtkFiltersPoints': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersModeling',
- ],
- 'vtkmodules.vtkFiltersProgrammable': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersPython': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersReduction': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersSMP': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkFiltersCore',
- 'vtkmodules.vtkFiltersGeneral',
- ],
- 'vtkmodules.vtkFiltersSelection': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersSources': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersStatistics': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersTemporal': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCore',
- ],
- 'vtkmodules.vtkFiltersTensor': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersTexture': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersTopology': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkFiltersVerdict': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkGeovisCore': [
- 'vtkmodules.vtkCommonTransforms',
- ],
- 'vtkmodules.vtkIOAMR': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOAsynchronous': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- 'vtkmodules.vtkIOImage',
- 'vtkmodules.vtkIOXML',
- ],
- 'vtkmodules.vtkIOAvmesh': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOCGNSReader': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOCONVERGECFD': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOCellGrid': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCellGrid',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOCesium3DTiles': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOChemistry': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOCityGML': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOCore': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOERF': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOEnSight': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOEngys': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOExodus': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- 'vtkmodules.vtkIOXMLParser',
- ],
- 'vtkmodules.vtkIOExport': [
- 'vtkmodules.vtkIOCore',
- 'vtkmodules.vtkIOImage',
- 'vtkmodules.vtkIOXML',
- 'vtkmodules.vtkRenderingContext2D',
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingFreeType',
- 'vtkmodules.vtkRenderingVtkJS',
- ],
- 'vtkmodules.vtkIOExportGL2PS': [
- 'vtkmodules.vtkIOExport',
- 'vtkmodules.vtkRenderingGL2PSOpenGL2',
- ],
- 'vtkmodules.vtkIOExportPDF': [
- 'vtkmodules.vtkIOExport',
- 'vtkmodules.vtkRenderingContext2D',
- ],
- 'vtkmodules.vtkIOFDS': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOFLUENTCFF': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOGeoJSON': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOGeometry': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- 'vtkmodules.vtkIOLegacy',
- ],
- 'vtkmodules.vtkIOH5Rage': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOH5part': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOHDF': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOIOSS': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersCellGrid',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOImport': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkIOImage': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkImagingCore',
- ],
- 'vtkmodules.vtkIOInfovis': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOLegacy',
- 'vtkmodules.vtkIOXML',
- ],
- 'vtkmodules.vtkIOLANLX3D': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOLSDyna': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOXMLParser',
- ],
- 'vtkmodules.vtkIOLegacy': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCellGrid',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOMINC': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- 'vtkmodules.vtkIOImage',
- ],
- 'vtkmodules.vtkIOMotionFX': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOMovie': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIONetCDF': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOOMF': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOOggTheora': [
- 'vtkmodules.vtkIOMovie',
- ],
- 'vtkmodules.vtkIOPIO': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOPLY': [
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOParallel': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- 'vtkmodules.vtkIOGeometry',
- 'vtkmodules.vtkIOImage',
- 'vtkmodules.vtkIOLegacy',
- ],
- 'vtkmodules.vtkIOParallelExodus': [
- 'vtkmodules.vtkIOExodus',
- ],
- 'vtkmodules.vtkIOParallelLSDyna': [
- 'vtkmodules.vtkIOLSDyna',
- ],
- 'vtkmodules.vtkIOParallelXML': [
- 'vtkmodules.vtkIOXML',
- ],
- 'vtkmodules.vtkIOSQL': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOCore',
- ],
- 'vtkmodules.vtkIOSegY': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOImage',
- ],
- 'vtkmodules.vtkIOTRUCHAS': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOTecplotTable': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOVPIC': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOVeraOut': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOVideo': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkIOXML': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOXMLParser',
- ],
- 'vtkmodules.vtkIOXMLParser': [
- 'vtkmodules.vtkCommonDataModel',
- ],
- 'vtkmodules.vtkIOXdmf2': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkIOLegacy',
- ],
- 'vtkmodules.vtkImagingColor': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkImagingCore',
- ],
- 'vtkmodules.vtkImagingCore': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkImagingFourier': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkImagingCore',
- ],
- 'vtkmodules.vtkImagingGeneral': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkImagingCore',
- ],
- 'vtkmodules.vtkImagingHybrid': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkImagingMath': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkImagingMorphological': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkImagingCore',
- 'vtkmodules.vtkImagingGeneral',
- ],
- 'vtkmodules.vtkImagingOpenGL2': [
- 'vtkmodules.vtkImagingGeneral',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkImagingSources': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkImagingStatistics': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkImagingStencil': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkImagingCore',
- ],
- 'vtkmodules.vtkInfovisCore': [
- 'vtkmodules.vtkCommonColor',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkImagingSources',
- 'vtkmodules.vtkIOImage',
- 'vtkmodules.vtkRenderingFreeType',
- ],
- 'vtkmodules.vtkInfovisLayout': [
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkInteractionImage': [
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkInteractionStyle': [
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkInteractionWidgets': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkFiltersGeneral',
- 'vtkmodules.vtkFiltersSources',
- 'vtkmodules.vtkRenderingContext2D',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkPythonContext2D': [
- 'vtkmodules.vtkRenderingContext2D',
- ],
- 'vtkmodules.vtkRenderingAnnotation': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingCellGrid': [
- 'vtkmodules.vtkFiltersCellGrid',
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkRenderingContext2D': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingContextOpenGL2': [
- 'vtkmodules.vtkRenderingContext2D',
- 'vtkmodules.vtkRenderingFreeType',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkRenderingCore': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- ],
- 'vtkmodules.vtkRenderingExternal': [
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkRenderingFreeType': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingGridAxes': [
- 'vtkmodules.vtkChartsCore',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingGL2PSOpenGL2': [
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkRenderingHyperTreeGrid': [
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingImage': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingLICOpenGL2': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkRenderingLOD': [
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingLabel': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingFreeType',
- ],
- 'vtkmodules.vtkRenderingMatplotlib': [
- 'vtkmodules.vtkRenderingFreeType',
- ],
- 'vtkmodules.vtkRenderingOpenGL2': [
- 'vtkmodules.vtkFiltersGeneral',
- 'vtkmodules.vtkIOImage',
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingHyperTreeGrid',
- 'vtkmodules.vtkRenderingUI',
- ],
- 'vtkmodules.vtkRenderingParallel': [
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkRenderingUI': [
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingVR': [
- 'vtkmodules.vtkInteractionStyle',
- 'vtkmodules.vtkInteractionWidgets',
- 'vtkmodules.vtkIOXMLParser',
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingOpenGL2',
- 'vtkmodules.vtkRenderingVolumeOpenGL2',
- 'vtkmodules.vtkRenderingVRModels',
- ],
- 'vtkmodules.vtkRenderingVRModels': [
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkRenderingOpenGL2',
- ],
- 'vtkmodules.vtkRenderingVolume': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkRenderingVolumeAMR': [
- 'vtkmodules.vtkImagingCore',
- 'vtkmodules.vtkRenderingVolume',
- 'vtkmodules.vtkRenderingVolumeOpenGL2',
- ],
- 'vtkmodules.vtkRenderingVolumeOpenGL2': [
- 'vtkmodules.vtkImagingCore',
- 'vtkmodules.vtkImagingMath',
- 'vtkmodules.vtkRenderingOpenGL2',
- 'vtkmodules.vtkRenderingVolume',
- ],
- 'vtkmodules.vtkRenderingVtkJS': [
- 'vtkmodules.vtkRenderingSceneGraph',
- ],
- 'vtkmodules.vtkTestingRendering': [
- 'vtkmodules.vtkImagingColor',
- 'vtkmodules.vtkIOXML',
- 'vtkmodules.vtkRenderingCore',
- ],
- 'vtkmodules.vtkTestingSerialization': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkSerializationManager',
- ],
- 'vtkmodules.vtkViewsContext2D': [
- 'vtkmodules.vtkRenderingCore',
- 'vtkmodules.vtkViewsCore',
- ],
- 'vtkmodules.vtkViewsCore': [
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkInteractionWidgets',
- ],
- 'vtkmodules.vtkViewsInfovis': [
- 'vtkmodules.vtkCommonDataModel',
- 'vtkmodules.vtkCommonExecutionModel',
- 'vtkmodules.vtkInteractionStyle',
- 'vtkmodules.vtkRenderingContext2D',
- 'vtkmodules.vtkViewsCore',
- ],
- 'vtkmodules.vtkWebGLExporter': [
- 'vtkmodules.vtkIOExport',
- ],
-}
-
-# Additional hidden imports for vtk 9.6.0
-if vtk_version is not None and vtk_version >= (9, 6, 0):
- # Additional
- _module_dependencies['vtkmodules.vtkIOImage'] += ['vtkmodules.vtkIOCore']
- _module_dependencies['vtkmodules.vtkViewsInfovis'] += ['vtkmodules.vtkChartsCore']
-
- # New
- _module_dependencies['vtkmodules.vtkSerializationManager'] = ['vtkmodules.vtkCommonDataModel']
-
-
-def add_vtkmodules_dependencies(hook_file):
- # Find the module underlying this vtkmodules hook: change `/path/to/hook-vtkmodules.blah.py` to `vtkmodules.blah`.
- hook_name, hook_ext = os.path.splitext(os.path.basename(hook_file))
- assert hook_ext.startswith('.py')
- assert hook_name.startswith('hook-')
- module_name = hook_name[5:]
-
- # Look up the list of hidden imports.
- return ["vtkmodules.vtkCommonCore", *_module_dependencies.get(module_name, [])]
diff --git a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/INSTALLER
deleted file mode 100644
index a1b589e..0000000
--- a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/INSTALLER
+++ /dev/null
@@ -1 +0,0 @@
-pip
diff --git a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/LICENSE b/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/LICENSE
deleted file mode 100644
index 6013a21..0000000
--- a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-Copyright (c) 2004 Istvan Albert unless otherwise noted.
-Copyright (c) 2006-2010 Bob Ippolito
-Copyright (2) 2010-2020 Ronald Oussoren, et. al.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
diff --git a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/METADATA b/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/METADATA
deleted file mode 100644
index 4e53760..0000000
--- a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/METADATA
+++ /dev/null
@@ -1,307 +0,0 @@
-Metadata-Version: 2.1
-Name: altgraph
-Version: 0.17.5
-Summary: Python graph (network) package
-Home-page: https://altgraph.readthedocs.io
-Download-URL: http://pypi.python.org/pypi/altgraph
-Author: Ronald Oussoren
-Author-email: ronaldoussoren@mac.com
-Maintainer: Ronald Oussoren
-Maintainer-email: ronaldoussoren@mac.com
-License: MIT
-Keywords: graph
-Platform: any
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: 3.13
-Classifier: Programming Language :: Python :: 3.14
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Scientific/Engineering :: Mathematics
-Classifier: Topic :: Scientific/Engineering :: Visualization
-Description-Content-Type: text/x-rst; charset=UTF-8
-License-File: LICENSE
-Project-URL: Documentation, https://altgraph.readthedocs.io/en/latest/
-Project-URL: Issue tracker, https://github.com/ronaldoussoren/altgraph/issues
-Project-URL: Repository, https://github.com/ronaldoussoren/altgraph
-
-altgraph is a fork of graphlib: a graph (network) package for constructing
-graphs, BFS and DFS traversals, topological sort, shortest paths, etc. with
-graphviz output.
-
-altgraph includes some additional usage of Python 2.6+ features and
-enhancements related to modulegraph and macholib.
-
-Project links
--------------
-
-* `Documentation `_
-
-* `Issue Tracker `_
-
-* `Repository `_
-
-
-Release history
-===============
-
-0.17.5
-------
-
-* Update classifiers for Python 3.13 and 3.14
-
-* Drop dependency on "pkg_resources"
-
-0.17.4
-------
-
-* Update classifiers for Python 3.12
-
-0.17.3
-------
-
-* Update classifiers for Python 3.11
-
-0.17.2
-------
-
-* Change in setup.py to fix the sidebar links on PyPI
-
-0.17.1
-------
-
-* Explicitly mark Python 3.10 as supported in wheel metadata.
-
-0.17
-----
-
-* Explicitly mark Python 3.8 as supported in wheel metadata.
-
-* Migrate from Bitbucket to GitHub
-
-* Run black on the entire repository
-
-0.16.1
-------
-
-* Explicitly mark Python 3.7 as supported in wheel metadata.
-
-0.16
-----
-
-* Add LICENSE file
-
-0.15
-----
-
-* ``ObjectGraph.get_edges``, ``ObjectGraph.getEdgeData`` and ``ObjectGraph.updateEdgeData``
- accept *None* as the node to get and treat this as an alias for *self* (as other
- methods already did).
-
-0.14
-----
-
-- Issue #7: Remove use of ``iteritems`` in altgraph.GraphAlgo code
-
-0.13
-----
-
-- Issue #4: Graph._bfs_subgraph and back_bfs_subgraph return subgraphs with reversed edges
-
- Fix by "pombredanne" on bitbucket.
-
-
-0.12
-----
-
-- Added ``ObjectGraph.edgeData`` to retrieve the edge data
- from a specific edge.
-
-- Added ``AltGraph.update_edge_data`` and ``ObjectGraph.updateEdgeData``
- to update the data associated with a graph edge.
-
-0.11
-----
-
-- Stabilize the order of elements in dot file exports,
- patch from bitbucket user 'pombredanne'.
-
-- Tweak setup.py file to remove dependency on distribute (but
- keep the dependency on setuptools)
-
-
-0.10.2
-------
-
-- There where no classifiers in the package metadata due to a bug
- in setup.py
-
-0.10.1
-------
-
-This is a bugfix release
-
-Bug fixes:
-
-- Issue #3: The source archive contains a README.txt
- while the setup file refers to ReadMe.txt.
-
- This is caused by a misfeature in distutils, as a
- workaround I've renamed ReadMe.txt to README.txt
- in the source tree and setup file.
-
-
-0.10
------
-
-This is a minor feature release
-
-Features:
-
-- Do not use "2to3" to support Python 3.
-
- As a side effect of this altgraph now supports
- Python 2.6 and later, and no longer supports
- earlier releases of Python.
-
-- The order of attributes in the Dot output
- is now always alphabetical.
-
- With this change the output will be consistent
- between runs and Python versions.
-
-0.9
----
-
-This is a minor bugfix release
-
-Features:
-
-- Added ``altgraph.ObjectGraph.ObjectGraph.nodes``, a method
- yielding all nodes in an object graph.
-
-Bugfixes:
-
-- The 0.8 release didn't work with py2app when using
- python 3.x.
-
-
-0.8
------
-
-This is a minor feature release. The major new feature
-is a extensive set of unittests, which explains almost
-all other changes in this release.
-
-Bugfixes:
-
-- Installing failed with Python 2.5 due to using a distutils
- class that isn't available in that version of Python
- (issue #1 on the issue tracker)
-
-- ``altgraph.GraphStat.degree_dist`` now actually works
-
-- ``altgraph.Graph.add_edge(a, b, create_nodes=False)`` will
- no longer create the edge when one of the nodes doesn't
- exist.
-
-- ``altgraph.Graph.forw_topo_sort`` failed for some sparse graphs.
-
-- ``altgraph.Graph.back_topo_sort`` was completely broken in
- previous releases.
-
-- ``altgraph.Graph.forw_bfs_subgraph`` now actually works.
-
-- ``altgraph.Graph.back_bfs_subgraph`` now actually works.
-
-- ``altgraph.Graph.iterdfs`` now returns the correct result
- when the ``forward`` argument is ``False``.
-
-- ``altgraph.Graph.iterdata`` now returns the correct result
- when the ``forward`` argument is ``False``.
-
-
-Features:
-
-- The ``altgraph.Graph`` constructor now accepts an argument
- that contains 2- and 3-tuples instead of requireing that
- all items have the same size. The (optional) argument can now
- also be any iterator.
-
-- ``altgraph.Graph.Graph.add_node`` has no effect when you
- add a hidden node.
-
-- The private method ``altgraph.Graph._bfs`` is no longer
- present.
-
-- The private method ``altgraph.Graph._dfs`` is no longer
- present.
-
-- ``altgraph.ObjectGraph`` now has a ``__contains__`` methods,
- which means you can use the ``in`` operator to check if a
- node is part of a graph.
-
-- ``altgraph.GraphUtil.generate_random_graph`` will raise
- ``GraphError`` instead of looping forever when it is
- impossible to create the requested graph.
-
-- ``altgraph.Dot.edge_style`` raises ``GraphError`` when
- one of the nodes is not present in the graph. The method
- silently added the tail in the past, but without ensuring
- a consistent graph state.
-
-- ``altgraph.Dot.save_img`` now works when the mode is
- ``"neato"``.
-
-0.7.2
------
-
-This is a minor bugfix release
-
-Bugfixes:
-
-- distutils didn't include the documentation subtree
-
-0.7.1
------
-
-This is a minor feature release
-
-Features:
-
-- Documentation is now generated using `sphinx `_
- and can be viewed at .
-
-- The repository has moved to bitbucket
-
-- ``altgraph.GraphStat.avg_hops`` is no longer present, the function had no
- implementation and no specified behaviour.
-
-- the module ``altgraph.compat`` is gone, which means altgraph will no
- longer work with Python 2.3.
-
-
-0.7.0
------
-
-This is a minor feature release.
-
-Features:
-
-- Support for Python 3
-
-- It is now possible to run tests using 'python setup.py test'
-
- (The actual testsuite is still very minimal though)
diff --git a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/RECORD b/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/RECORD
deleted file mode 100644
index 32d7ddf..0000000
--- a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/RECORD
+++ /dev/null
@@ -1,21 +0,0 @@
-altgraph-0.17.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
-altgraph-0.17.5.dist-info/LICENSE,sha256=bBlNbbDGTUVTXRDJUUK5sM2nt9zH8d3uMCs9U289vkY,1002
-altgraph-0.17.5.dist-info/METADATA,sha256=3GBkHboimjrvCfdk9WLDjZCLkwySYVry5iavMdb_GbU,7519
-altgraph-0.17.5.dist-info/RECORD,,
-altgraph-0.17.5.dist-info/WHEEL,sha256=iYlv5fX357PQyRT2o6tw1bN-YcKFFHKqB_LwHO5wP-g,110
-altgraph-0.17.5.dist-info/top_level.txt,sha256=HEBeRWf5ItVPc7Y9hW7hGlrLXZjPoL4by6CAhBV_BwA,9
-altgraph-0.17.5.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
-altgraph/Dot.py,sha256=gKEp6Su_CoOWQYt5HIVs_7MBYK1BEOhKX0RLAAA-vQs,9929
-altgraph/Graph.py,sha256=6b6fSHLA5QSqMDnSHIO7_WJnBYIdq3K5Bt8VipRODwg,20788
-altgraph/GraphAlgo.py,sha256=Uu9aTjSKWi38iQ_e9ZrwCnzQaI1WWFDhJ6kfmu0jxAA,5645
-altgraph/GraphStat.py,sha256=LKya4BKXJ5GZi5-sNYU17aOBTLxqn_tVgbiw4sWGYIU,1888
-altgraph/GraphUtil.py,sha256=1T4DJc2bJn6EIU_Ct4m0oiKlXWkXvqcXE8CGL2K9en8,3990
-altgraph/ObjectGraph.py,sha256=o7fPJtyBEgJSXAkUjzvj35B-FOY4uKzfLGqSvTitx8c,6490
-altgraph/__init__.py,sha256=Glu2oEC9U0oZLDEIJeudig16inwTvSiDKw8Av17_aNE,4957
-altgraph/__pycache__/Dot.cpython-312.pyc,,
-altgraph/__pycache__/Graph.cpython-312.pyc,,
-altgraph/__pycache__/GraphAlgo.cpython-312.pyc,,
-altgraph/__pycache__/GraphStat.cpython-312.pyc,,
-altgraph/__pycache__/GraphUtil.cpython-312.pyc,,
-altgraph/__pycache__/ObjectGraph.cpython-312.pyc,,
-altgraph/__pycache__/__init__.cpython-312.pyc,,
diff --git a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/WHEEL b/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/WHEEL
deleted file mode 100644
index c34f116..0000000
--- a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/WHEEL
+++ /dev/null
@@ -1,6 +0,0 @@
-Wheel-Version: 1.0
-Generator: bdist_wheel (0.41.2)
-Root-Is-Purelib: true
-Tag: py2-none-any
-Tag: py3-none-any
-
diff --git a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/top_level.txt b/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/top_level.txt
deleted file mode 100644
index 5ad6b8a..0000000
--- a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/top_level.txt
+++ /dev/null
@@ -1 +0,0 @@
-altgraph
diff --git a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/zip-safe b/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/zip-safe
deleted file mode 100644
index 8b13789..0000000
--- a/venv/lib/python3.12/site-packages/altgraph-0.17.5.dist-info/zip-safe
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/venv/lib/python3.12/site-packages/altgraph/Dot.py b/venv/lib/python3.12/site-packages/altgraph/Dot.py
deleted file mode 100644
index 1d19cb1..0000000
--- a/venv/lib/python3.12/site-packages/altgraph/Dot.py
+++ /dev/null
@@ -1,321 +0,0 @@
-"""
-altgraph.Dot - Interface to the dot language
-============================================
-
-The :py:mod:`~altgraph.Dot` module provides a simple interface to the
-file format used in the
-`graphviz `_
-program. The module is intended to offload the most tedious part of the process
-(the **dot** file generation) while transparently exposing most of its
-features.
-
-To display the graphs or to generate image files the
-`graphviz `_
-package needs to be installed on the system, moreover the :command:`dot` and
-:command:`dotty` programs must be accesible in the program path so that they
-can be ran from processes spawned within the module.
-
-Example usage
--------------
-
-Here is a typical usage::
-
- from altgraph import Graph, Dot
-
- # create a graph
- edges = [ (1,2), (1,3), (3,4), (3,5), (4,5), (5,4) ]
- graph = Graph.Graph(edges)
-
- # create a dot representation of the graph
- dot = Dot.Dot(graph)
-
- # display the graph
- dot.display()
-
- # save the dot representation into the mydot.dot file
- dot.save_dot(file_name='mydot.dot')
-
- # save dot file as gif image into the graph.gif file
- dot.save_img(file_name='graph', file_type='gif')
-
-Directed graph and non-directed graph
--------------------------------------
-
-Dot class can use for both directed graph and non-directed graph
-by passing ``graphtype`` parameter.
-
-Example::
-
- # create directed graph(default)
- dot = Dot.Dot(graph, graphtype="digraph")
-
- # create non-directed graph
- dot = Dot.Dot(graph, graphtype="graph")
-
-Customizing the output
-----------------------
-
-The graph drawing process may be customized by passing
-valid :command:`dot` parameters for the nodes and edges. For a list of all
-parameters see the `graphviz `_
-documentation.
-
-Example::
-
- # customizing the way the overall graph is drawn
- dot.style(size='10,10', rankdir='RL', page='5, 5' , ranksep=0.75)
-
- # customizing node drawing
- dot.node_style(1, label='BASE_NODE',shape='box', color='blue' )
- dot.node_style(2, style='filled', fillcolor='red')
-
- # customizing edge drawing
- dot.edge_style(1, 2, style='dotted')
- dot.edge_style(3, 5, arrowhead='dot', label='binds', labelangle='90')
- dot.edge_style(4, 5, arrowsize=2, style='bold')
-
-
-.. note::
-
- dotty (invoked via :py:func:`~altgraph.Dot.display`) may not be able to
- display all graphics styles. To verify the output save it to an image file
- and look at it that way.
-
-Valid attributes
-----------------
-
- - dot styles, passed via the :py:meth:`Dot.style` method::
-
- rankdir = 'LR' (draws the graph horizontally, left to right)
- ranksep = number (rank separation in inches)
-
- - node attributes, passed via the :py:meth:`Dot.node_style` method::
-
- style = 'filled' | 'invisible' | 'diagonals' | 'rounded'
- shape = 'box' | 'ellipse' | 'circle' | 'point' | 'triangle'
-
- - edge attributes, passed via the :py:meth:`Dot.edge_style` method::
-
- style = 'dashed' | 'dotted' | 'solid' | 'invis' | 'bold'
- arrowhead = 'box' | 'crow' | 'diamond' | 'dot' | 'inv' | 'none'
- | 'tee' | 'vee'
- weight = number (the larger the number the closer the nodes will be)
-
- - valid `graphviz colors
- `_
-
- - for more details on how to control the graph drawing process see the
- `graphviz reference
- `_.
-"""
-import os
-import warnings
-
-from altgraph import GraphError
-
-
-class Dot(object):
- """
- A class providing a **graphviz** (dot language) representation
- allowing a fine grained control over how the graph is being
- displayed.
-
- If the :command:`dot` and :command:`dotty` programs are not in the current
- system path their location needs to be specified in the contructor.
- """
-
- def __init__(
- self,
- graph=None,
- nodes=None,
- edgefn=None,
- nodevisitor=None,
- edgevisitor=None,
- name="G",
- dot="dot",
- dotty="dotty",
- neato="neato",
- graphtype="digraph",
- ):
- """
- Initialization.
- """
- self.name, self.attr = name, {}
-
- assert graphtype in ["graph", "digraph"]
- self.type = graphtype
-
- self.temp_dot = "tmp_dot.dot"
- self.temp_neo = "tmp_neo.dot"
-
- self.dot, self.dotty, self.neato = dot, dotty, neato
-
- # self.nodes: node styles
- # self.edges: edge styles
- self.nodes, self.edges = {}, {}
-
- if graph is not None and nodes is None:
- nodes = graph
- if graph is not None and edgefn is None:
-
- def edgefn(node, graph=graph):
- return graph.out_nbrs(node)
-
- if nodes is None:
- nodes = ()
-
- seen = set()
- for node in nodes:
- if nodevisitor is None:
- style = {}
- else:
- style = nodevisitor(node)
- if style is not None:
- self.nodes[node] = {}
- self.node_style(node, **style)
- seen.add(node)
- if edgefn is not None:
- for head in seen:
- for tail in (n for n in edgefn(head) if n in seen):
- if edgevisitor is None:
- edgestyle = {}
- else:
- edgestyle = edgevisitor(head, tail)
- if edgestyle is not None:
- if head not in self.edges:
- self.edges[head] = {}
- self.edges[head][tail] = {}
- self.edge_style(head, tail, **edgestyle)
-
- def style(self, **attr):
- """
- Changes the overall style
- """
- self.attr = attr
-
- def display(self, mode="dot"):
- """
- Displays the current graph via dotty
- """
-
- if mode == "neato":
- self.save_dot(self.temp_neo)
- neato_cmd = "%s -o %s %s" % (self.neato, self.temp_dot, self.temp_neo)
- os.system(neato_cmd)
- else:
- self.save_dot(self.temp_dot)
-
- plot_cmd = "%s %s" % (self.dotty, self.temp_dot)
- os.system(plot_cmd)
-
- def node_style(self, node, **kwargs):
- """
- Modifies a node style to the dot representation.
- """
- if node not in self.edges:
- self.edges[node] = {}
- self.nodes[node] = kwargs
-
- def all_node_style(self, **kwargs):
- """
- Modifies all node styles
- """
- for node in self.nodes:
- self.node_style(node, **kwargs)
-
- def edge_style(self, head, tail, **kwargs):
- """
- Modifies an edge style to the dot representation.
- """
- if tail not in self.nodes:
- raise GraphError("invalid node %s" % (tail,))
-
- try:
- if tail not in self.edges[head]:
- self.edges[head][tail] = {}
- self.edges[head][tail] = kwargs
- except KeyError:
- raise GraphError("invalid edge %s -> %s " % (head, tail))
-
- def iterdot(self):
- # write graph title
- if self.type == "digraph":
- yield "digraph %s {\n" % (self.name,)
- elif self.type == "graph":
- yield "graph %s {\n" % (self.name,)
-
- else:
- raise GraphError("unsupported graphtype %s" % (self.type,))
-
- # write overall graph attributes
- for attr_name, attr_value in sorted(self.attr.items()):
- yield '%s="%s";' % (attr_name, attr_value)
- yield "\n"
-
- # some reusable patterns
- cpatt = '%s="%s",' # to separate attributes
- epatt = "];\n" # to end attributes
-
- # write node attributes
- for node_name, node_attr in sorted(self.nodes.items()):
- yield '\t"%s" [' % (node_name,)
- for attr_name, attr_value in sorted(node_attr.items()):
- yield cpatt % (attr_name, attr_value)
- yield epatt
-
- # write edge attributes
- for head in sorted(self.edges):
- for tail in sorted(self.edges[head]):
- if self.type == "digraph":
- yield '\t"%s" -> "%s" [' % (head, tail)
- else:
- yield '\t"%s" -- "%s" [' % (head, tail)
- for attr_name, attr_value in sorted(self.edges[head][tail].items()):
- yield cpatt % (attr_name, attr_value)
- yield epatt
-
- # finish file
- yield "}\n"
-
- def __iter__(self):
- return self.iterdot()
-
- def save_dot(self, file_name=None):
- """
- Saves the current graph representation into a file
- """
-
- if not file_name:
- warnings.warn(DeprecationWarning, "always pass a file_name", stacklevel=2)
- file_name = self.temp_dot
-
- with open(file_name, "w") as fp:
- for chunk in self.iterdot():
- fp.write(chunk)
-
- def save_img(self, file_name=None, file_type="gif", mode="dot"):
- """
- Saves the dot file as an image file
- """
-
- if not file_name:
- warnings.warn(DeprecationWarning, "always pass a file_name", stacklevel=2)
- file_name = "out"
-
- if mode == "neato":
- self.save_dot(self.temp_neo)
- neato_cmd = "%s -o %s %s" % (self.neato, self.temp_dot, self.temp_neo)
- os.system(neato_cmd)
- plot_cmd = self.dot
- else:
- self.save_dot(self.temp_dot)
- plot_cmd = self.dot
-
- file_name = "%s.%s" % (file_name, file_type)
- create_cmd = "%s -T%s %s -o %s" % (
- plot_cmd,
- file_type,
- self.temp_dot,
- file_name,
- )
- os.system(create_cmd)
diff --git a/venv/lib/python3.12/site-packages/altgraph/Graph.py b/venv/lib/python3.12/site-packages/altgraph/Graph.py
deleted file mode 100644
index 8088007..0000000
--- a/venv/lib/python3.12/site-packages/altgraph/Graph.py
+++ /dev/null
@@ -1,682 +0,0 @@
-"""
-altgraph.Graph - Base Graph class
-=================================
-
-..
- #--Version 2.1
- #--Bob Ippolito October, 2004
-
- #--Version 2.0
- #--Istvan Albert June, 2004
-
- #--Version 1.0
- #--Nathan Denny, May 27, 1999
-"""
-
-from collections import deque
-
-from altgraph import GraphError
-
-
-class Graph(object):
- """
- The Graph class represents a directed graph with *N* nodes and *E* edges.
-
- Naming conventions:
-
- - the prefixes such as *out*, *inc* and *all* will refer to methods
- that operate on the outgoing, incoming or all edges of that node.
-
- For example: :py:meth:`inc_degree` will refer to the degree of the node
- computed over the incoming edges (the number of neighbours linking to
- the node).
-
- - the prefixes such as *forw* and *back* will refer to the
- orientation of the edges used in the method with respect to the node.
-
- For example: :py:meth:`forw_bfs` will start at the node then use the
- outgoing edges to traverse the graph (goes forward).
- """
-
- def __init__(self, edges=None):
- """
- Initialization
- """
-
- self.next_edge = 0
- self.nodes, self.edges = {}, {}
- self.hidden_edges, self.hidden_nodes = {}, {}
-
- if edges is not None:
- for item in edges:
- if len(item) == 2:
- head, tail = item
- self.add_edge(head, tail)
- elif len(item) == 3:
- head, tail, data = item
- self.add_edge(head, tail, data)
- else:
- raise GraphError("Cannot create edge from %s" % (item,))
-
- def __repr__(self):
- return "" % (
- self.number_of_nodes(),
- self.number_of_edges(),
- )
-
- def add_node(self, node, node_data=None):
- """
- Adds a new node to the graph. Arbitrary data can be attached to the
- node via the node_data parameter. Adding the same node twice will be
- silently ignored.
-
- The node must be a hashable value.
- """
- #
- # the nodes will contain tuples that will store incoming edges,
- # outgoing edges and data
- #
- # index 0 -> incoming edges
- # index 1 -> outgoing edges
-
- if node in self.hidden_nodes:
- # Node is present, but hidden
- return
-
- if node not in self.nodes:
- self.nodes[node] = ([], [], node_data)
-
- def add_edge(self, head_id, tail_id, edge_data=1, create_nodes=True):
- """
- Adds a directed edge going from head_id to tail_id.
- Arbitrary data can be attached to the edge via edge_data.
- It may create the nodes if adding edges between nonexisting ones.
-
- :param head_id: head node
- :param tail_id: tail node
- :param edge_data: (optional) data attached to the edge
- :param create_nodes: (optional) creates the head_id or tail_id
- node in case they did not exist
- """
- # shorcut
- edge = self.next_edge
-
- # add nodes if on automatic node creation
- if create_nodes:
- self.add_node(head_id)
- self.add_node(tail_id)
-
- # update the corresponding incoming and outgoing lists in the nodes
- # index 0 -> incoming edges
- # index 1 -> outgoing edges
-
- try:
- self.nodes[tail_id][0].append(edge)
- self.nodes[head_id][1].append(edge)
- except KeyError:
- raise GraphError("Invalid nodes %s -> %s" % (head_id, tail_id))
-
- # store edge information
- self.edges[edge] = (head_id, tail_id, edge_data)
-
- self.next_edge += 1
-
- def hide_edge(self, edge):
- """
- Hides an edge from the graph. The edge may be unhidden at some later
- time.
- """
- try:
- head_id, tail_id, edge_data = self.hidden_edges[edge] = self.edges[edge]
- self.nodes[tail_id][0].remove(edge)
- self.nodes[head_id][1].remove(edge)
- del self.edges[edge]
- except KeyError:
- raise GraphError("Invalid edge %s" % edge)
-
- def hide_node(self, node):
- """
- Hides a node from the graph. The incoming and outgoing edges of the
- node will also be hidden. The node may be unhidden at some later time.
- """
- try:
- all_edges = self.all_edges(node)
- self.hidden_nodes[node] = (self.nodes[node], all_edges)
- for edge in all_edges:
- self.hide_edge(edge)
- del self.nodes[node]
- except KeyError:
- raise GraphError("Invalid node %s" % node)
-
- def restore_node(self, node):
- """
- Restores a previously hidden node back into the graph and restores
- all of its incoming and outgoing edges.
- """
- try:
- self.nodes[node], all_edges = self.hidden_nodes[node]
- for edge in all_edges:
- self.restore_edge(edge)
- del self.hidden_nodes[node]
- except KeyError:
- raise GraphError("Invalid node %s" % node)
-
- def restore_edge(self, edge):
- """
- Restores a previously hidden edge back into the graph.
- """
- try:
- head_id, tail_id, data = self.hidden_edges[edge]
- self.nodes[tail_id][0].append(edge)
- self.nodes[head_id][1].append(edge)
- self.edges[edge] = head_id, tail_id, data
- del self.hidden_edges[edge]
- except KeyError:
- raise GraphError("Invalid edge %s" % edge)
-
- def restore_all_edges(self):
- """
- Restores all hidden edges.
- """
- for edge in list(self.hidden_edges.keys()):
- try:
- self.restore_edge(edge)
- except GraphError:
- pass
-
- def restore_all_nodes(self):
- """
- Restores all hidden nodes.
- """
- for node in list(self.hidden_nodes.keys()):
- self.restore_node(node)
-
- def __contains__(self, node):
- """
- Test whether a node is in the graph
- """
- return node in self.nodes
-
- def edge_by_id(self, edge):
- """
- Returns the edge that connects the head_id and tail_id nodes
- """
- try:
- head, tail, data = self.edges[edge]
- except KeyError:
- head, tail = None, None
- raise GraphError("Invalid edge %s" % edge)
-
- return (head, tail)
-
- def edge_by_node(self, head, tail):
- """
- Returns the edge that connects the head_id and tail_id nodes
- """
- for edge in self.out_edges(head):
- if self.tail(edge) == tail:
- return edge
- return None
-
- def number_of_nodes(self):
- """
- Returns the number of nodes
- """
- return len(self.nodes)
-
- def number_of_edges(self):
- """
- Returns the number of edges
- """
- return len(self.edges)
-
- def __iter__(self):
- """
- Iterates over all nodes in the graph
- """
- return iter(self.nodes)
-
- def node_list(self):
- """
- Return a list of the node ids for all visible nodes in the graph.
- """
- return list(self.nodes.keys())
-
- def edge_list(self):
- """
- Returns an iterator for all visible nodes in the graph.
- """
- return list(self.edges.keys())
-
- def number_of_hidden_edges(self):
- """
- Returns the number of hidden edges
- """
- return len(self.hidden_edges)
-
- def number_of_hidden_nodes(self):
- """
- Returns the number of hidden nodes
- """
- return len(self.hidden_nodes)
-
- def hidden_node_list(self):
- """
- Returns the list with the hidden nodes
- """
- return list(self.hidden_nodes.keys())
-
- def hidden_edge_list(self):
- """
- Returns a list with the hidden edges
- """
- return list(self.hidden_edges.keys())
-
- def describe_node(self, node):
- """
- return node, node data, outgoing edges, incoming edges for node
- """
- incoming, outgoing, data = self.nodes[node]
- return node, data, outgoing, incoming
-
- def describe_edge(self, edge):
- """
- return edge, edge data, head, tail for edge
- """
- head, tail, data = self.edges[edge]
- return edge, data, head, tail
-
- def node_data(self, node):
- """
- Returns the data associated with a node
- """
- return self.nodes[node][2]
-
- def edge_data(self, edge):
- """
- Returns the data associated with an edge
- """
- return self.edges[edge][2]
-
- def update_edge_data(self, edge, edge_data):
- """
- Replace the edge data for a specific edge
- """
- self.edges[edge] = self.edges[edge][0:2] + (edge_data,)
-
- def head(self, edge):
- """
- Returns the node of the head of the edge.
- """
- return self.edges[edge][0]
-
- def tail(self, edge):
- """
- Returns node of the tail of the edge.
- """
- return self.edges[edge][1]
-
- def out_nbrs(self, node):
- """
- List of nodes connected by outgoing edges
- """
- return [self.tail(n) for n in self.out_edges(node)]
-
- def inc_nbrs(self, node):
- """
- List of nodes connected by incoming edges
- """
- return [self.head(n) for n in self.inc_edges(node)]
-
- def all_nbrs(self, node):
- """
- List of nodes connected by incoming and outgoing edges
- """
- return list(dict.fromkeys(self.inc_nbrs(node) + self.out_nbrs(node)))
-
- def out_edges(self, node):
- """
- Returns a list of the outgoing edges
- """
- try:
- return list(self.nodes[node][1])
- except KeyError:
- raise GraphError("Invalid node %s" % node)
-
- def inc_edges(self, node):
- """
- Returns a list of the incoming edges
- """
- try:
- return list(self.nodes[node][0])
- except KeyError:
- raise GraphError("Invalid node %s" % node)
-
- def all_edges(self, node):
- """
- Returns a list of incoming and outging edges.
- """
- return set(self.inc_edges(node) + self.out_edges(node))
-
- def out_degree(self, node):
- """
- Returns the number of outgoing edges
- """
- return len(self.out_edges(node))
-
- def inc_degree(self, node):
- """
- Returns the number of incoming edges
- """
- return len(self.inc_edges(node))
-
- def all_degree(self, node):
- """
- The total degree of a node
- """
- return self.inc_degree(node) + self.out_degree(node)
-
- def _topo_sort(self, forward=True):
- """
- Topological sort.
-
- Returns a list of nodes where the successors (based on outgoing and
- incoming edges selected by the forward parameter) of any given node
- appear in the sequence after that node.
- """
- topo_list = []
- queue = deque()
- indeg = {}
-
- # select the operation that will be performed
- if forward:
- get_edges = self.out_edges
- get_degree = self.inc_degree
- get_next = self.tail
- else:
- get_edges = self.inc_edges
- get_degree = self.out_degree
- get_next = self.head
-
- for node in self.node_list():
- degree = get_degree(node)
- if degree:
- indeg[node] = degree
- else:
- queue.append(node)
-
- while queue:
- curr_node = queue.popleft()
- topo_list.append(curr_node)
- for edge in get_edges(curr_node):
- tail_id = get_next(edge)
- if tail_id in indeg:
- indeg[tail_id] -= 1
- if indeg[tail_id] == 0:
- queue.append(tail_id)
-
- if len(topo_list) == len(self.node_list()):
- valid = True
- else:
- # the graph has cycles, invalid topological sort
- valid = False
-
- return (valid, topo_list)
-
- def forw_topo_sort(self):
- """
- Topological sort.
-
- Returns a list of nodes where the successors (based on outgoing edges)
- of any given node appear in the sequence after that node.
- """
- return self._topo_sort(forward=True)
-
- def back_topo_sort(self):
- """
- Reverse topological sort.
-
- Returns a list of nodes where the successors (based on incoming edges)
- of any given node appear in the sequence after that node.
- """
- return self._topo_sort(forward=False)
-
- def _bfs_subgraph(self, start_id, forward=True):
- """
- Private method creates a subgraph in a bfs order.
-
- The forward parameter specifies whether it is a forward or backward
- traversal.
- """
- if forward:
- get_bfs = self.forw_bfs
- get_nbrs = self.out_nbrs
- else:
- get_bfs = self.back_bfs
- get_nbrs = self.inc_nbrs
-
- g = Graph()
- bfs_list = get_bfs(start_id)
- for node in bfs_list:
- g.add_node(node)
-
- for node in bfs_list:
- for nbr_id in get_nbrs(node):
- if forward:
- g.add_edge(node, nbr_id)
- else:
- g.add_edge(nbr_id, node)
-
- return g
-
- def forw_bfs_subgraph(self, start_id):
- """
- Creates and returns a subgraph consisting of the breadth first
- reachable nodes based on their outgoing edges.
- """
- return self._bfs_subgraph(start_id, forward=True)
-
- def back_bfs_subgraph(self, start_id):
- """
- Creates and returns a subgraph consisting of the breadth first
- reachable nodes based on the incoming edges.
- """
- return self._bfs_subgraph(start_id, forward=False)
-
- def iterdfs(self, start, end=None, forward=True):
- """
- Collecting nodes in some depth first traversal.
-
- The forward parameter specifies whether it is a forward or backward
- traversal.
- """
- visited, stack = {start}, deque([start])
-
- if forward:
- get_edges = self.out_edges
- get_next = self.tail
- else:
- get_edges = self.inc_edges
- get_next = self.head
-
- while stack:
- curr_node = stack.pop()
- yield curr_node
- if curr_node == end:
- break
- for edge in sorted(get_edges(curr_node)):
- tail = get_next(edge)
- if tail not in visited:
- visited.add(tail)
- stack.append(tail)
-
- def iterdata(self, start, end=None, forward=True, condition=None):
- """
- Perform a depth-first walk of the graph (as ``iterdfs``)
- and yield the item data of every node where condition matches. The
- condition callback is only called when node_data is not None.
- """
-
- visited, stack = {start}, deque([start])
-
- if forward:
- get_edges = self.out_edges
- get_next = self.tail
- else:
- get_edges = self.inc_edges
- get_next = self.head
-
- get_data = self.node_data
-
- while stack:
- curr_node = stack.pop()
- curr_data = get_data(curr_node)
- if curr_data is not None:
- if condition is not None and not condition(curr_data):
- continue
- yield curr_data
- if curr_node == end:
- break
- for edge in get_edges(curr_node):
- tail = get_next(edge)
- if tail not in visited:
- visited.add(tail)
- stack.append(tail)
-
- def _iterbfs(self, start, end=None, forward=True):
- """
- The forward parameter specifies whether it is a forward or backward
- traversal. Returns a list of tuples where the first value is the hop
- value the second value is the node id.
- """
- queue, visited = deque([(start, 0)]), {start}
-
- # the direction of the bfs depends on the edges that are sampled
- if forward:
- get_edges = self.out_edges
- get_next = self.tail
- else:
- get_edges = self.inc_edges
- get_next = self.head
-
- while queue:
- curr_node, curr_step = queue.popleft()
- yield (curr_node, curr_step)
- if curr_node == end:
- break
- for edge in get_edges(curr_node):
- tail = get_next(edge)
- if tail not in visited:
- visited.add(tail)
- queue.append((tail, curr_step + 1))
-
- def forw_bfs(self, start, end=None):
- """
- Returns a list of nodes in some forward BFS order.
-
- Starting from the start node the breadth first search proceeds along
- outgoing edges.
- """
- return [node for node, step in self._iterbfs(start, end, forward=True)]
-
- def back_bfs(self, start, end=None):
- """
- Returns a list of nodes in some backward BFS order.
-
- Starting from the start node the breadth first search proceeds along
- incoming edges.
- """
- return [node for node, _ in self._iterbfs(start, end, forward=False)]
-
- def forw_dfs(self, start, end=None):
- """
- Returns a list of nodes in some forward DFS order.
-
- Starting with the start node the depth first search proceeds along
- outgoing edges.
- """
- return list(self.iterdfs(start, end, forward=True))
-
- def back_dfs(self, start, end=None):
- """
- Returns a list of nodes in some backward DFS order.
-
- Starting from the start node the depth first search proceeds along
- incoming edges.
- """
- return list(self.iterdfs(start, end, forward=False))
-
- def connected(self):
- """
- Returns :py:data:`True` if the graph's every node can be reached from
- every other node.
- """
- node_list = self.node_list()
- for node in node_list:
- bfs_list = self.forw_bfs(node)
- if len(bfs_list) != len(node_list):
- return False
- return True
-
- def clust_coef(self, node):
- """
- Computes and returns the local clustering coefficient of node.
-
- The local cluster coefficient is proportion of the actual number of
- edges between neighbours of node and the maximum number of edges
- between those neighbours.
-
- See "Local Clustering Coefficient" on
-
- for a formal definition.
- """
- num = 0
- nbr_set = set(self.out_nbrs(node))
-
- if node in nbr_set:
- nbr_set.remove(node) # loop defense
-
- for nbr in nbr_set:
- sec_set = set(self.out_nbrs(nbr))
- if nbr in sec_set:
- sec_set.remove(nbr) # loop defense
- num += len(nbr_set & sec_set)
-
- nbr_num = len(nbr_set)
- if nbr_num:
- clust_coef = float(num) / (nbr_num * (nbr_num - 1))
- else:
- clust_coef = 0.0
- return clust_coef
-
- def get_hops(self, start, end=None, forward=True):
- """
- Computes the hop distance to all nodes centered around a node.
-
- First order neighbours are at hop 1, their neigbours are at hop 2 etc.
- Uses :py:meth:`forw_bfs` or :py:meth:`back_bfs` depending on the value
- of the forward parameter. If the distance between all neighbouring
- nodes is 1 the hop number corresponds to the shortest distance between
- the nodes.
-
- :param start: the starting node
- :param end: ending node (optional). When not specified will search the
- whole graph.
- :param forward: directionality parameter (optional).
- If C{True} (default) it uses L{forw_bfs} otherwise L{back_bfs}.
- :return: returns a list of tuples where each tuple contains the
- node and the hop.
-
- Typical usage::
-
- >>> print (graph.get_hops(1, 8))
- >>> [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)]
- # node 1 is at 0 hops
- # node 2 is at 1 hop
- # ...
- # node 8 is at 5 hops
- """
- if forward:
- return list(self._iterbfs(start=start, end=end, forward=True))
- else:
- return list(self._iterbfs(start=start, end=end, forward=False))
diff --git a/venv/lib/python3.12/site-packages/altgraph/GraphAlgo.py b/venv/lib/python3.12/site-packages/altgraph/GraphAlgo.py
deleted file mode 100644
index f93e73d..0000000
--- a/venv/lib/python3.12/site-packages/altgraph/GraphAlgo.py
+++ /dev/null
@@ -1,171 +0,0 @@
-"""
-altgraph.GraphAlgo - Graph algorithms
-=====================================
-"""
-from altgraph import GraphError
-
-
-def dijkstra(graph, start, end=None):
- """
- Dijkstra's algorithm for shortest paths
-
- `David Eppstein, UC Irvine, 4 April 2002
- `_
-
- `Python Cookbook Recipe
- `_
-
- Find shortest paths from the start node to all nodes nearer than or
- equal to the end node.
-
- Dijkstra's algorithm is only guaranteed to work correctly when all edge
- lengths are positive. This code does not verify this property for all
- edges (only the edges examined until the end vertex is reached), but will
- correctly compute shortest paths even for some graphs with negative edges,
- and will raise an exception if it discovers that a negative edge has
- caused it to make a mistake.
-
- Adapted to altgraph by Istvan Albert, Pennsylvania State University -
- June, 9 2004
- """
- D = {} # dictionary of final distances
- P = {} # dictionary of predecessors
- Q = _priorityDictionary() # estimated distances of non-final vertices
- Q[start] = 0
-
- for v in Q:
- D[v] = Q[v]
- if v == end:
- break
-
- for w in graph.out_nbrs(v):
- edge_id = graph.edge_by_node(v, w)
- vwLength = D[v] + graph.edge_data(edge_id)
- if w in D:
- if vwLength < D[w]:
- raise GraphError(
- "Dijkstra: found better path to already-final vertex"
- )
- elif w not in Q or vwLength < Q[w]:
- Q[w] = vwLength
- P[w] = v
-
- return (D, P)
-
-
-def shortest_path(graph, start, end):
- """
- Find a single shortest path from the *start* node to the *end* node.
- The input has the same conventions as dijkstra(). The output is a list of
- the nodes in order along the shortest path.
-
- **Note that the distances must be stored in the edge data as numeric data**
- """
-
- D, P = dijkstra(graph, start, end)
- Path = []
- while 1:
- Path.append(end)
- if end == start:
- break
- end = P[end]
- Path.reverse()
- return Path
-
-
-#
-# Utility classes and functions
-#
-class _priorityDictionary(dict):
- """
- Priority dictionary using binary heaps (internal use only)
-
- David Eppstein, UC Irvine, 8 Mar 2002
-
- Implements a data structure that acts almost like a dictionary, with
- two modifications:
-
- 1. D.smallest() returns the value x minimizing D[x]. For this to
- work correctly, all values D[x] stored in the dictionary must be
- comparable.
-
- 2. iterating "for x in D" finds and removes the items from D in sorted
- order. Each item is not removed until the next item is requested,
- so D[x] will still return a useful value until the next iteration
- of the for-loop. Each operation takes logarithmic amortized time.
- """
-
- def __init__(self):
- """
- Initialize priorityDictionary by creating binary heap of pairs
- (value,key). Note that changing or removing a dict entry will not
- remove the old pair from the heap until it is found by smallest()
- or until the heap is rebuilt.
- """
- self.__heap = []
- dict.__init__(self)
-
- def smallest(self):
- """
- Find smallest item after removing deleted items from front of heap.
- """
- if len(self) == 0:
- raise IndexError("smallest of empty priorityDictionary")
- heap = self.__heap
- while heap[0][1] not in self or self[heap[0][1]] != heap[0][0]:
- lastItem = heap.pop()
- insertionPoint = 0
- while 1:
- smallChild = 2 * insertionPoint + 1
- if (
- smallChild + 1 < len(heap)
- and heap[smallChild] > heap[smallChild + 1]
- ):
- smallChild += 1
- if smallChild >= len(heap) or lastItem <= heap[smallChild]:
- heap[insertionPoint] = lastItem
- break
- heap[insertionPoint] = heap[smallChild]
- insertionPoint = smallChild
- return heap[0][1]
-
- def __iter__(self):
- """
- Create destructive sorted iterator of priorityDictionary.
- """
-
- def iterfn():
- while len(self) > 0:
- x = self.smallest()
- yield x
- del self[x]
-
- return iterfn()
-
- def __setitem__(self, key, val):
- """
- Change value stored in dictionary and add corresponding pair to heap.
- Rebuilds the heap if the number of deleted items gets large, to avoid
- memory leakage.
- """
- dict.__setitem__(self, key, val)
- heap = self.__heap
- if len(heap) > 2 * len(self):
- self.__heap = [(v, k) for k, v in self.items()]
- self.__heap.sort()
- else:
- newPair = (val, key)
- insertionPoint = len(heap)
- heap.append(None)
- while insertionPoint > 0 and newPair < heap[(insertionPoint - 1) // 2]:
- heap[insertionPoint] = heap[(insertionPoint - 1) // 2]
- insertionPoint = (insertionPoint - 1) // 2
- heap[insertionPoint] = newPair
-
- def setdefault(self, key, val):
- """
- Reimplement setdefault to pass through our customized __setitem__.
- """
- if key not in self:
- self[key] = val
- return self[key]
diff --git a/venv/lib/python3.12/site-packages/altgraph/GraphStat.py b/venv/lib/python3.12/site-packages/altgraph/GraphStat.py
deleted file mode 100644
index cccc66d..0000000
--- a/venv/lib/python3.12/site-packages/altgraph/GraphStat.py
+++ /dev/null
@@ -1,73 +0,0 @@
-"""
-altgraph.GraphStat - Functions providing various graph statistics
-=================================================================
-"""
-
-
-def degree_dist(graph, limits=(0, 0), bin_num=10, mode="out"):
- """
- Computes the degree distribution for a graph.
-
- Returns a list of tuples where the first element of the tuple is the
- center of the bin representing a range of degrees and the second element
- of the tuple are the number of nodes with the degree falling in the range.
-
- Example::
-
- ....
- """
-
- deg = []
- if mode == "inc":
- get_deg = graph.inc_degree
- else:
- get_deg = graph.out_degree
-
- for node in graph:
- deg.append(get_deg(node))
-
- if not deg:
- return []
-
- results = _binning(values=deg, limits=limits, bin_num=bin_num)
-
- return results
-
-
-_EPS = 1.0 / (2.0**32)
-
-
-def _binning(values, limits=(0, 0), bin_num=10):
- """
- Bins data that falls between certain limits, if the limits are (0, 0) the
- minimum and maximum values are used.
-
- Returns a list of tuples where the first element of the tuple is the
- center of the bin and the second element of the tuple are the counts.
- """
- if limits == (0, 0):
- min_val, max_val = min(values) - _EPS, max(values) + _EPS
- else:
- min_val, max_val = limits
-
- # get bin size
- bin_size = (max_val - min_val) / float(bin_num)
- bins = [0] * (bin_num)
-
- # will ignore these outliers for now
- for value in values:
- try:
- if (value - min_val) >= 0:
- index = int((value - min_val) / float(bin_size))
- bins[index] += 1
- except IndexError:
- pass
-
- # make it ready for an x,y plot
- result = []
- center = (bin_size / 2) + min_val
- for i, y in enumerate(bins):
- x = center + bin_size * i
- result.append((x, y))
-
- return result
diff --git a/venv/lib/python3.12/site-packages/altgraph/GraphUtil.py b/venv/lib/python3.12/site-packages/altgraph/GraphUtil.py
deleted file mode 100644
index cfd6a34..0000000
--- a/venv/lib/python3.12/site-packages/altgraph/GraphUtil.py
+++ /dev/null
@@ -1,139 +0,0 @@
-"""
-altgraph.GraphUtil - Utility classes and functions
-==================================================
-"""
-
-import random
-from collections import deque
-
-from altgraph import Graph, GraphError
-
-
-def generate_random_graph(node_num, edge_num, self_loops=False, multi_edges=False):
- """
- Generates and returns a :py:class:`~altgraph.Graph.Graph` instance with
- *node_num* nodes randomly connected by *edge_num* edges.
- """
- g = Graph.Graph()
-
- if not multi_edges:
- if self_loops:
- max_edges = node_num * node_num
- else:
- max_edges = node_num * (node_num - 1)
-
- if edge_num > max_edges:
- raise GraphError("inconsistent arguments to 'generate_random_graph'")
-
- nodes = range(node_num)
-
- for node in nodes:
- g.add_node(node)
-
- while 1:
- head = random.choice(nodes)
- tail = random.choice(nodes)
-
- # loop defense
- if head == tail and not self_loops:
- continue
-
- # multiple edge defense
- if g.edge_by_node(head, tail) is not None and not multi_edges:
- continue
-
- # add the edge
- g.add_edge(head, tail)
- if g.number_of_edges() >= edge_num:
- break
-
- return g
-
-
-def generate_scale_free_graph(steps, growth_num, self_loops=False, multi_edges=False):
- """
- Generates and returns a :py:class:`~altgraph.Graph.Graph` instance that
- will have *steps* \\* *growth_num* nodes and a scale free (powerlaw)
- connectivity. Starting with a fully connected graph with *growth_num*
- nodes at every step *growth_num* nodes are added to the graph and are
- connected to existing nodes with a probability proportional to the degree
- of these existing nodes.
- """
- # The code doesn't seem to do what the documentation claims.
- graph = Graph.Graph()
-
- # initialize the graph
- store = []
- for i in range(growth_num):
- for j in range(i + 1, growth_num):
- store.append(i)
- store.append(j)
- graph.add_edge(i, j)
-
- # generate
- for node in range(growth_num, steps * growth_num):
- graph.add_node(node)
- while graph.out_degree(node) < growth_num:
- nbr = random.choice(store)
-
- # loop defense
- if node == nbr and not self_loops:
- continue
-
- # multi edge defense
- if graph.edge_by_node(node, nbr) and not multi_edges:
- continue
-
- graph.add_edge(node, nbr)
-
- for nbr in graph.out_nbrs(node):
- store.append(node)
- store.append(nbr)
-
- return graph
-
-
-def filter_stack(graph, head, filters):
- """
- Perform a walk in a depth-first order starting
- at *head*.
-
- Returns (visited, removes, orphans).
-
- * visited: the set of visited nodes
- * removes: the list of nodes where the node
- data does not all *filters*
- * orphans: tuples of (last_good, node),
- where node is not in removes, is directly
- reachable from a node in *removes* and
- *last_good* is the closest upstream node that is not
- in *removes*.
- """
-
- visited, removes, orphans = {head}, set(), set()
- stack = deque([(head, head)])
- get_data = graph.node_data
- get_edges = graph.out_edges
- get_tail = graph.tail
-
- while stack:
- last_good, node = stack.pop()
- data = get_data(node)
- if data is not None:
- for filtfunc in filters:
- if not filtfunc(data):
- removes.add(node)
- break
- else:
- last_good = node
- for edge in get_edges(node):
- tail = get_tail(edge)
- if last_good is not node:
- orphans.add((last_good, tail))
- if tail not in visited:
- visited.add(tail)
- stack.append((last_good, tail))
-
- orphans = [(lg, tl) for (lg, tl) in orphans if tl not in removes]
-
- return visited, removes, orphans
diff --git a/venv/lib/python3.12/site-packages/altgraph/ObjectGraph.py b/venv/lib/python3.12/site-packages/altgraph/ObjectGraph.py
deleted file mode 100644
index 379b05b..0000000
--- a/venv/lib/python3.12/site-packages/altgraph/ObjectGraph.py
+++ /dev/null
@@ -1,212 +0,0 @@
-"""
-altgraph.ObjectGraph - Graph of objects with an identifier
-==========================================================
-
-A graph of objects that have a "graphident" attribute.
-graphident is the key for the object in the graph
-"""
-
-from altgraph import GraphError
-from altgraph.Graph import Graph
-from altgraph.GraphUtil import filter_stack
-
-
-class ObjectGraph(object):
- """
- A graph of objects that have a "graphident" attribute.
- graphident is the key for the object in the graph
- """
-
- def __init__(self, graph=None, debug=0):
- if graph is None:
- graph = Graph()
- self.graphident = self
- self.graph = graph
- self.debug = debug
- self.indent = 0
- graph.add_node(self, None)
-
- def __repr__(self):
- return "<%s>" % (type(self).__name__,)
-
- def flatten(self, condition=None, start=None):
- """
- Iterate over the subgraph that is entirely reachable by condition
- starting from the given start node or the ObjectGraph root
- """
- if start is None:
- start = self
- start = self.getRawIdent(start)
- return self.graph.iterdata(start=start, condition=condition)
-
- def nodes(self):
- for ident in self.graph:
- node = self.graph.node_data(ident)
- if node is not None:
- yield self.graph.node_data(ident)
-
- def get_edges(self, node):
- if node is None:
- node = self
- start = self.getRawIdent(node)
- _, _, outraw, incraw = self.graph.describe_node(start)
-
- def iter_edges(lst, n):
- seen = set()
- for tpl in (self.graph.describe_edge(e) for e in lst):
- ident = tpl[n]
- if ident not in seen:
- yield self.findNode(ident)
- seen.add(ident)
-
- return iter_edges(outraw, 3), iter_edges(incraw, 2)
-
- def edgeData(self, fromNode, toNode):
- if fromNode is None:
- fromNode = self
- start = self.getRawIdent(fromNode)
- stop = self.getRawIdent(toNode)
- edge = self.graph.edge_by_node(start, stop)
- return self.graph.edge_data(edge)
-
- def updateEdgeData(self, fromNode, toNode, edgeData):
- if fromNode is None:
- fromNode = self
- start = self.getRawIdent(fromNode)
- stop = self.getRawIdent(toNode)
- edge = self.graph.edge_by_node(start, stop)
- self.graph.update_edge_data(edge, edgeData)
-
- def filterStack(self, filters):
- """
- Filter the ObjectGraph in-place by removing all edges to nodes that
- do not match every filter in the given filter list
-
- Returns a tuple containing the number of:
- (nodes_visited, nodes_removed, nodes_orphaned)
- """
- visited, removes, orphans = filter_stack(self.graph, self, filters)
-
- for last_good, tail in orphans:
- self.graph.add_edge(last_good, tail, edge_data="orphan")
-
- for node in removes:
- self.graph.hide_node(node)
-
- return len(visited) - 1, len(removes), len(orphans)
-
- def removeNode(self, node):
- """
- Remove the given node from the graph if it exists
- """
- ident = self.getIdent(node)
- if ident is not None:
- self.graph.hide_node(ident)
-
- def removeReference(self, fromnode, tonode):
- """
- Remove all edges from fromnode to tonode
- """
- if fromnode is None:
- fromnode = self
- fromident = self.getIdent(fromnode)
- toident = self.getIdent(tonode)
- if fromident is not None and toident is not None:
- while True:
- edge = self.graph.edge_by_node(fromident, toident)
- if edge is None:
- break
- self.graph.hide_edge(edge)
-
- def getIdent(self, node):
- """
- Get the graph identifier for a node
- """
- ident = self.getRawIdent(node)
- if ident is not None:
- return ident
- node = self.findNode(node)
- if node is None:
- return None
- return node.graphident
-
- def getRawIdent(self, node):
- """
- Get the identifier for a node object
- """
- if node is self:
- return node
- ident = getattr(node, "graphident", None)
- return ident
-
- def __contains__(self, node):
- return self.findNode(node) is not None
-
- def findNode(self, node):
- """
- Find the node on the graph
- """
- ident = self.getRawIdent(node)
- if ident is None:
- ident = node
- try:
- return self.graph.node_data(ident)
- except KeyError:
- return None
-
- def addNode(self, node):
- """
- Add a node to the graph referenced by the root
- """
- self.msg(4, "addNode", node)
-
- try:
- self.graph.restore_node(node.graphident)
- except GraphError:
- self.graph.add_node(node.graphident, node)
-
- def createReference(self, fromnode, tonode, edge_data=None):
- """
- Create a reference from fromnode to tonode
- """
- if fromnode is None:
- fromnode = self
- fromident, toident = self.getIdent(fromnode), self.getIdent(tonode)
- if fromident is None or toident is None:
- return
- self.msg(4, "createReference", fromnode, tonode, edge_data)
- self.graph.add_edge(fromident, toident, edge_data=edge_data)
-
- def createNode(self, cls, name, *args, **kw):
- """
- Add a node of type cls to the graph if it does not already exist
- by the given name
- """
- m = self.findNode(name)
- if m is None:
- m = cls(name, *args, **kw)
- self.addNode(m)
- return m
-
- def msg(self, level, s, *args):
- """
- Print a debug message with the given level
- """
- if s and level <= self.debug:
- print("%s%s %s" % (" " * self.indent, s, " ".join(map(repr, args))))
-
- def msgin(self, level, s, *args):
- """
- Print a debug message and indent
- """
- if level <= self.debug:
- self.msg(level, s, *args)
- self.indent = self.indent + 1
-
- def msgout(self, level, s, *args):
- """
- Dedent and print a debug message
- """
- if level <= self.debug:
- self.indent = self.indent - 1
- self.msg(level, s, *args)
diff --git a/venv/lib/python3.12/site-packages/altgraph/__init__.py b/venv/lib/python3.12/site-packages/altgraph/__init__.py
deleted file mode 100644
index 3624968..0000000
--- a/venv/lib/python3.12/site-packages/altgraph/__init__.py
+++ /dev/null
@@ -1,146 +0,0 @@
-"""
-altgraph - a python graph library
-=================================
-
-altgraph is a fork of `graphlib `_ tailored
-to use newer Python 2.3+ features, including additional support used by the
-py2app suite (modulegraph and macholib, specifically).
-
-altgraph is a python based graph (network) representation and manipulation
-package. It has started out as an extension to the
-`graph_lib module
-`_
-written by Nathan Denny it has been significantly optimized and expanded.
-
-The :class:`altgraph.Graph.Graph` class is loosely modeled after the
-`LEDA `_
-(Library of Efficient Datatypes) representation. The library
-includes methods for constructing graphs, BFS and DFS traversals,
-topological sort, finding connected components, shortest paths as well as a
-number graph statistics functions. The library can also visualize graphs
-via `graphviz `_.
-
-The package contains the following modules:
-
- - the :py:mod:`altgraph.Graph` module contains the
- :class:`~altgraph.Graph.Graph` class that stores the graph data
-
- - the :py:mod:`altgraph.GraphAlgo` module implements graph algorithms
- operating on graphs (:py:class:`~altgraph.Graph.Graph`} instances)
-
- - the :py:mod:`altgraph.GraphStat` module contains functions for
- computing statistical measures on graphs
-
- - the :py:mod:`altgraph.GraphUtil` module contains functions for
- generating, reading and saving graphs
-
- - the :py:mod:`altgraph.Dot` module contains functions for displaying
- graphs via `graphviz `_
-
- - the :py:mod:`altgraph.ObjectGraph` module implements a graph of
- objects with a unique identifier
-
-Installation
-------------
-
-Download and unpack the archive then type::
-
- python setup.py install
-
-This will install the library in the default location. For instructions on
-how to customize the install procedure read the output of::
-
- python setup.py --help install
-
-To verify that the code works run the test suite::
-
- python setup.py test
-
-Example usage
--------------
-
-Lets assume that we want to analyze the graph below (links to the full picture)
-GRAPH_IMG. Our script then might look the following way::
-
- from altgraph import Graph, GraphAlgo, Dot
-
- # these are the edges
- edges = [ (1,2), (2,4), (1,3), (2,4), (3,4), (4,5), (6,5),
- (6,14), (14,15), (6, 15), (5,7), (7, 8), (7,13), (12,8),
- (8,13), (11,12), (11,9), (13,11), (9,13), (13,10) ]
-
- # creates the graph
- graph = Graph.Graph()
- for head, tail in edges:
- graph.add_edge(head, tail)
-
- # do a forward bfs from 1 at most to 20
- print(graph.forw_bfs(1))
-
-This will print the nodes in some breadth first order::
-
- [1, 2, 3, 4, 5, 7, 8, 13, 11, 10, 12, 9]
-
-If we wanted to get the hop-distance from node 1 to node 8
-we coud write::
-
- print(graph.get_hops(1, 8))
-
-This will print the following::
-
- [(1, 0), (2, 1), (3, 1), (4, 2), (5, 3), (7, 4), (8, 5)]
-
-Node 1 is at 0 hops since it is the starting node, nodes 2,3 are 1 hop away ...
-node 8 is 5 hops away. To find the shortest distance between two nodes you
-can use::
-
- print(GraphAlgo.shortest_path(graph, 1, 12))
-
-It will print the nodes on one (if there are more) the shortest paths::
-
- [1, 2, 4, 5, 7, 13, 11, 12]
-
-To display the graph we can use the GraphViz backend::
-
- dot = Dot.Dot(graph)
-
- # display the graph on the monitor
- dot.display()
-
- # save it in an image file
- dot.save_img(file_name='graph', file_type='gif')
-
-
-
-..
- @author: U{Istvan Albert}
-
- @license: MIT License
-
- Copyright (c) 2004 Istvan Albert unless otherwise noted.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to
- deal in the Software without restriction, including without limitation the
- rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- IN THE SOFTWARE.
- @requires: Python 2.3 or higher
-
- @newfield contributor: Contributors:
- @contributor: U{Reka Albert }
-
-"""
-__version__ = "0.17.5"
-
-
-class GraphError(ValueError):
- pass
diff --git a/venv/lib/python3.12/site-packages/altgraph/__pycache__/Dot.cpython-312.pyc b/venv/lib/python3.12/site-packages/altgraph/__pycache__/Dot.cpython-312.pyc
deleted file mode 100644
index 38036ca..0000000
Binary files a/venv/lib/python3.12/site-packages/altgraph/__pycache__/Dot.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/altgraph/__pycache__/Graph.cpython-312.pyc b/venv/lib/python3.12/site-packages/altgraph/__pycache__/Graph.cpython-312.pyc
deleted file mode 100644
index 42d7068..0000000
Binary files a/venv/lib/python3.12/site-packages/altgraph/__pycache__/Graph.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphAlgo.cpython-312.pyc b/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphAlgo.cpython-312.pyc
deleted file mode 100644
index c1949ab..0000000
Binary files a/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphAlgo.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphStat.cpython-312.pyc b/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphStat.cpython-312.pyc
deleted file mode 100644
index f0ae1b0..0000000
Binary files a/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphStat.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphUtil.cpython-312.pyc b/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphUtil.cpython-312.pyc
deleted file mode 100644
index 2e4fdd2..0000000
Binary files a/venv/lib/python3.12/site-packages/altgraph/__pycache__/GraphUtil.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/altgraph/__pycache__/ObjectGraph.cpython-312.pyc b/venv/lib/python3.12/site-packages/altgraph/__pycache__/ObjectGraph.cpython-312.pyc
deleted file mode 100644
index bd85279..0000000
Binary files a/venv/lib/python3.12/site-packages/altgraph/__pycache__/ObjectGraph.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/altgraph/__pycache__/__init__.cpython-312.pyc b/venv/lib/python3.12/site-packages/altgraph/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index e6ae1de..0000000
Binary files a/venv/lib/python3.12/site-packages/altgraph/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/INSTALLER b/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/INSTALLER
deleted file mode 100644
index a1b589e..0000000
--- a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/INSTALLER
+++ /dev/null
@@ -1 +0,0 @@
-pip
diff --git a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/METADATA b/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/METADATA
deleted file mode 100644
index 1f921d4..0000000
--- a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/METADATA
+++ /dev/null
@@ -1,122 +0,0 @@
-Metadata-Version: 2.4
-Name: astroid
-Version: 4.0.4
-Summary: An abstract syntax tree for Python with inference support.
-License-Expression: LGPL-2.1-or-later
-Project-URL: Bug tracker, https://github.com/pylint-dev/astroid/issues
-Project-URL: Discord server, https://discord.gg/Egy6P8AMB5
-Project-URL: Docs, https://pylint.readthedocs.io/projects/astroid/en/latest/
-Project-URL: Source Code, https://github.com/pylint-dev/astroid
-Keywords: abstract syntax tree,python,static code analysis
-Classifier: Development Status :: 6 - Mature
-Classifier: Environment :: Console
-Classifier: Intended Audience :: Developers
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: 3.13
-Classifier: Programming Language :: Python :: 3.14
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Software Development :: Quality Assurance
-Classifier: Topic :: Software Development :: Testing
-Requires-Python: >=3.10.0
-Description-Content-Type: text/x-rst
-License-File: LICENSE
-License-File: CONTRIBUTORS.txt
-Requires-Dist: typing-extensions>=4; python_version < "3.11"
-Dynamic: license-file
-
-Astroid
-=======
-
-.. image:: https://codecov.io/gh/pylint-dev/astroid/branch/main/graph/badge.svg?token=Buxy4WptLb
- :target: https://codecov.io/gh/pylint-dev/astroid
- :alt: Coverage badge from codecov
-
-.. image:: https://readthedocs.org/projects/astroid/badge/?version=latest
- :target: http://astroid.readthedocs.io/en/latest/?badge=latest
- :alt: Documentation Status
-
-.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
- :target: https://github.com/ambv/black
-
-.. image:: https://results.pre-commit.ci/badge/github/pylint-dev/astroid/main.svg
- :target: https://results.pre-commit.ci/latest/github/pylint-dev/astroid/main
- :alt: pre-commit.ci status
-
-.. |tidelift_logo| image:: https://raw.githubusercontent.com/pylint-dev/astroid/main/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png
- :width: 200
- :alt: Tidelift
-
-.. list-table::
- :widths: 10 100
-
- * - |tidelift_logo|
- - Professional support for astroid is available as part of the
- `Tidelift Subscription`_. Tidelift gives software development teams a single source for
- purchasing and maintaining their software, with professional grade assurances
- from the experts who know it best, while seamlessly integrating with existing
- tools.
-
-.. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-astroid?utm_source=pypi-astroid&utm_medium=referral&utm_campaign=readme
-
-
-
-What's this?
-------------
-
-The aim of this module is to provide a common base representation of
-python source code. It is currently the library powering pylint's capabilities.
-
-It provides a compatible representation which comes from the `_ast`
-module. It rebuilds the tree generated by the builtin _ast module by
-recursively walking down the AST and building an extended ast. The new
-node classes have additional methods and attributes for different
-usages. They include some support for static inference and local name
-scopes. Furthermore, astroid can also build partial trees by inspecting living
-objects.
-
-
-Installation
-------------
-
-Extract the tarball, jump into the created directory and run::
-
- pip install .
-
-
-If you want to do an editable installation, you can run::
-
- pip install -e .
-
-
-If you have any questions, please mail the code-quality@python.org
-mailing list for support. See
-http://mail.python.org/mailman/listinfo/code-quality for subscription
-information and archives.
-
-Documentation
--------------
-http://astroid.readthedocs.io/en/latest/
-
-
-Python Versions
----------------
-
-astroid 2.0 is currently available for Python 3 only. If you want Python 2
-support, use an older version of astroid (though note that these versions
-are no longer supported).
-
-Test
-----
-
-Tests are in the 'test' subdirectory. To launch the whole tests suite, you can use
-either `tox` or `pytest`::
-
- tox
- pytest
diff --git a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/RECORD b/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/RECORD
deleted file mode 100644
index 78574a8..0000000
--- a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/RECORD
+++ /dev/null
@@ -1,197 +0,0 @@
-astroid-4.0.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
-astroid-4.0.4.dist-info/METADATA,sha256=F4NXQbxupKPDc6WClbn9_5IhVEwRXv77J-uOjPycdqs,4382
-astroid-4.0.4.dist-info/RECORD,,
-astroid-4.0.4.dist-info/WHEEL,sha256=YLJXdYXQ2FQ0Uqn2J-6iEIC-3iOey8lH3xCtvFLkd8Q,91
-astroid-4.0.4.dist-info/licenses/CONTRIBUTORS.txt,sha256=c0v8W544hmspwqUGRfzPIcVh6vzof-I35MHcoIl0JEs,9339
-astroid-4.0.4.dist-info/licenses/LICENSE,sha256=_qFr2p5zTeoNnI2fW5CYeO9BcWJjVDKWCf_889tCyyQ,26516
-astroid-4.0.4.dist-info/top_level.txt,sha256=HsdW4O2x7ZXRj6k-agi3RaQybGLobI3VSE-jt4vQUXM,8
-astroid/__init__.py,sha256=FA-4lFE-nkNgJ9nLhh6BDYb2_rIgpFxaS0UX_LFUqC4,7718
-astroid/__pkginfo__.py,sha256=ulHsiua50sozjW75HY68sm1CRUX-YAjfidcD8hZGbBI,283
-astroid/__pycache__/__init__.cpython-312.pyc,,
-astroid/__pycache__/__pkginfo__.cpython-312.pyc,,
-astroid/__pycache__/_ast.cpython-312.pyc,,
-astroid/__pycache__/arguments.cpython-312.pyc,,
-astroid/__pycache__/astroid_manager.cpython-312.pyc,,
-astroid/__pycache__/bases.cpython-312.pyc,,
-astroid/__pycache__/builder.cpython-312.pyc,,
-astroid/__pycache__/const.cpython-312.pyc,,
-astroid/__pycache__/constraint.cpython-312.pyc,,
-astroid/__pycache__/context.cpython-312.pyc,,
-astroid/__pycache__/decorators.cpython-312.pyc,,
-astroid/__pycache__/exceptions.cpython-312.pyc,,
-astroid/__pycache__/filter_statements.cpython-312.pyc,,
-astroid/__pycache__/helpers.cpython-312.pyc,,
-astroid/__pycache__/inference_tip.cpython-312.pyc,,
-astroid/__pycache__/manager.cpython-312.pyc,,
-astroid/__pycache__/modutils.cpython-312.pyc,,
-astroid/__pycache__/objects.cpython-312.pyc,,
-astroid/__pycache__/protocols.cpython-312.pyc,,
-astroid/__pycache__/raw_building.cpython-312.pyc,,
-astroid/__pycache__/rebuilder.cpython-312.pyc,,
-astroid/__pycache__/test_utils.cpython-312.pyc,,
-astroid/__pycache__/transforms.cpython-312.pyc,,
-astroid/__pycache__/typing.cpython-312.pyc,,
-astroid/__pycache__/util.cpython-312.pyc,,
-astroid/_ast.py,sha256=LLKPdNWj6Qk4u3yj9wid9zIOsKf_YV4Yfr8L4EA285U,3003
-astroid/arguments.py,sha256=UwoLKjjgYrmtTHWRTEXuqz4g4elodx_DJIR5vBkCfzo,13094
-astroid/astroid_manager.py,sha256=uGIFUKDTjCdy757OF60r3apRqVybugBZh1rudtOSGMA,729
-astroid/bases.py,sha256=IJyVeO6ssO3QmBZ_2C4_yJO2YvxhtolJPlNisqM2k6A,28007
-astroid/brain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-astroid/brain/__pycache__/__init__.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_argparse.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_attrs.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_boto3.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_builtin_inference.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_collections.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_crypt.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_ctypes.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_curses.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_dataclasses.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_datetime.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_dateutil.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_functools.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_gi.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_hashlib.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_http.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_hypothesis.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_io.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_mechanize.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_multiprocessing.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_namedtuple_enum.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_core_einsumfunc.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_core_fromnumeric.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_core_function_base.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_core_multiarray.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_core_numeric.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_core_numerictypes.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_core_umath.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_ma.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_ndarray.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_numpy_utils.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_pathlib.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_pkg_resources.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_pytest.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_qt.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_random.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_re.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_regex.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_responses.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_scipy_signal.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_signal.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_six.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_sqlalchemy.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_ssl.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_statistics.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_subprocess.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_threading.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_type.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_typing.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_unittest.cpython-312.pyc,,
-astroid/brain/__pycache__/brain_uuid.cpython-312.pyc,,
-astroid/brain/__pycache__/helpers.cpython-312.pyc,,
-astroid/brain/brain_argparse.py,sha256=SxYW42PcxTv0YM4VGAS_K8iYnYDxZ5LQZeptooyIMo0,1725
-astroid/brain/brain_attrs.py,sha256=y6xnsBRIhXiJucZPjtBsGM-hNVMMOttBnxIHNE65YRU,3567
-astroid/brain/brain_boto3.py,sha256=efZTk72fPOe6wnEVCH9bIBFWxcQDlS5xrzuNakpR06Y,1112
-astroid/brain/brain_builtin_inference.py,sha256=WApCZIQF5FkFOO83PRdGt2I3vNCMEg8h5gGPwC3E6-U,37758
-astroid/brain/brain_collections.py,sha256=VetyHBQO9nWQmaDeujEOfZ92JANUpgIAWLH5-jT6uZ4,4787
-astroid/brain/brain_crypt.py,sha256=UKa9GpbK7b_N2fAx4-KNqr4Pvsg3EI1Mu1T3uuV3CcE,957
-astroid/brain/brain_ctypes.py,sha256=ZlOQHSIyvslgdYC_a0hOop3_I5uBh3afbQ8ZuaZxke0,2762
-astroid/brain/brain_curses.py,sha256=Ne_30je70tZpUyobl3b0Y5ATZhxolYCxfP-oLB4eciM,3571
-astroid/brain/brain_dataclasses.py,sha256=1UOUunF8EwJGLXHhXSLzxWwrBnZJ-Ezb7Z-W20wvYQI,22157
-astroid/brain/brain_datetime.py,sha256=q9kjCi-Fz5S-u4Hyv88mJvCgXYvk2X8eEUTaw637lK4,813
-astroid/brain/brain_dateutil.py,sha256=y_GyQYVf_UR6zTOcgmVm3uQhkxVCVVzRD0Ow4Gg1jFI,861
-astroid/brain/brain_functools.py,sha256=I8nxIKGTcQKq5ZeGAiFbm3ErlZfLnpdUYy31pLXxwxc,6401
-astroid/brain/brain_gi.py,sha256=krGyADdWRjm7w-ZVTHbx77hylNgs8ziwZ1--RU6QhxM,7662
-astroid/brain/brain_hashlib.py,sha256=c76QAbD-LYkKMVrdAe6nRboJdG3l1LkK0UAZOlxfSFM,2799
-astroid/brain/brain_http.py,sha256=Vj7mN4uU8qROy-p9BjLOhF9_HTZ0wFbiNuDgi2uXKY4,11668
-astroid/brain/brain_hypothesis.py,sha256=8fwM59eqVgKEL3Dkz2Uva62v0-AZhBPyFxXyOs65E0g,1885
-astroid/brain/brain_io.py,sha256=YV_hxg1EGjV3Wprvp5M_YF8pWoC2MK1oyyH3io6hZpk,1589
-astroid/brain/brain_mechanize.py,sha256=-80L1FfddRUM-qENpAZ5sro9P9Kgz2uchwjjM5ErJJk,2740
-astroid/brain/brain_multiprocessing.py,sha256=ATm2DwP-SXt4LH6hhwN-7ova5Bt483efnuKzKkulmfQ,3260
-astroid/brain/brain_namedtuple_enum.py,sha256=KDWuKv3mAHE1IYXu7CMCb9bMM7vmQnxY8ON96jgUuVk,24278
-astroid/brain/brain_numpy_core_einsumfunc.py,sha256=YfPheziU5UKb80hXS0VZcWVHmw_lQ1t0-Q-w13dwQyM,885
-astroid/brain/brain_numpy_core_fromnumeric.py,sha256=Aum9F0w1An28elWtvBcTHzohV0YCkIOqg8nIqkm179c,834
-astroid/brain/brain_numpy_core_function_base.py,sha256=qSusSR1lilumpc6T8mrELunZS3zgUuuouh-qzNBiBcc,1356
-astroid/brain/brain_numpy_core_multiarray.py,sha256=s9adpaJ8SAk3WTgSEuNgCUwx8HOGt_vyZdXl3QJ1OmE,4408
-astroid/brain/brain_numpy_core_numeric.py,sha256=B95vP691ynDRXFqhg_VI1TKyWkxGbdCZji3M8qsyTmc,1692
-astroid/brain/brain_numpy_core_numerictypes.py,sha256=Bgc4_qguu3ypTIr74STkeUu79OhtLwrD0jVUFSBZ1wA,8648
-astroid/brain/brain_numpy_core_umath.py,sha256=M2_oE2HGcD5DEcU3W2_CvENjxjuOxfLPvnSgFjtmpU4,4981
-astroid/brain/brain_numpy_ma.py,sha256=3UnzHTkN8H6yxI8km6bBZoWyV80U3vLIzfFyD8gEOLo,990
-astroid/brain/brain_numpy_ndarray.py,sha256=qoNm2LSOkaerQus6wOj9Lxbjgh7SAg4bEbfPQbZKO6c,9034
-astroid/brain/brain_numpy_random_mtrand.py,sha256=d3g_v9X1e4Wr8I9EE8g7E0d-hqGQk_gYvByj4-1HC5w,3538
-astroid/brain/brain_numpy_utils.py,sha256=03ztDMdAFnQLFmTOiEeABcSBv_gL46Mpi9rO2rbw0M0,2893
-astroid/brain/brain_pathlib.py,sha256=jX_TTTpf4wp1lePKTSGFFjbQVSa13fXafAfdIqow9JM,1728
-astroid/brain/brain_pkg_resources.py,sha256=rfjLwAejZVqM_s721UdAPbuEMyM0fx3sb1yYkPDeDqE,2302
-astroid/brain/brain_pytest.py,sha256=tqisdV1Cw2vdYdjTNnF_jBMO2jO7lw86Fjh6XpZoJ1g,2312
-astroid/brain/brain_qt.py,sha256=yNle65lxFYmRJksiaqksF_FINvae732yvcOl6PVdIvM,2874
-astroid/brain/brain_random.py,sha256=VMVXkVHEhdQ8S5VaW-tHS3hQYmQj4XI66Y9tV1qDjTE,3110
-astroid/brain/brain_re.py,sha256=-Dh05FNgXrWxOS-mrajf7LFUgozA7qFQzfjs8SwNoxU,2999
-astroid/brain/brain_regex.py,sha256=GI-TCq6gGAE9OYwyl2Bi9auJINJn0uF8ADBYekyKZyU,3466
-astroid/brain/brain_responses.py,sha256=vC9JUtdjtN2W5ux8_6G7QG_nhbZOBV3lMpy1fG56nzc,1962
-astroid/brain/brain_scipy_signal.py,sha256=HPGStodLs9L9APFnc77RZBf-PIlaKm-COdyTSk2KVnM,2370
-astroid/brain/brain_signal.py,sha256=Qt8cFsEwYmwaI_PU5aBBfYV4TLkF0lBPdME-oeGWMYk,3932
-astroid/brain/brain_six.py,sha256=ps49tRfn6NRtTpjmcBOfrF8shznz0T1SB7Pn1teWTIs,7772
-astroid/brain/brain_sqlalchemy.py,sha256=8JlRq_TCEheDtbc2BIupibHRtEZ4WasqLEPkkZ5sziY,1103
-astroid/brain/brain_ssl.py,sha256=MOU0L1wh-ysKzACAKVTnpCca6awwwsF09OcJi5-NKfk,6712
-astroid/brain/brain_statistics.py,sha256=howkDIgRSFh6Zy20ZS2OCN4HQxfEStiIwsICMOZ5bi4,2786
-astroid/brain/brain_subprocess.py,sha256=dj-Y3S_QbWaIsDA6j8a74xEwPd5Fe5J1uj1YDFDrcrQ,2962
-astroid/brain/brain_threading.py,sha256=3XS9DNglTezqvBUlWTKbhjWLgkjXmQR9w-p5sNPJLO4,964
-astroid/brain/brain_type.py,sha256=sThdsmoQwUxIe04m5Wb6WnouGk1ZmZWtBo6AfXqWLsA,2497
-astroid/brain/brain_typing.py,sha256=b5Lvle7K9vhxzvFqH3BOwB8aYLPjiex-6FQCdupDvZk,17237
-astroid/brain/brain_unittest.py,sha256=ejWKg85j26dfKWHwycKztGs4_RSPTtqs9mTF3XKfsyA,1178
-astroid/brain/brain_uuid.py,sha256=K1so-CZChY4lqI-qWQbdrrJu_z0gJPPG4h4J3Iz9FoU,678
-astroid/brain/helpers.py,sha256=VIf9Yy6SVaXBQ0Lh1oLEa0szhJRXuyTR4qANXhAeJBs,4743
-astroid/builder.py,sha256=pk_U8QDLwQmwZMnDRK7Z8EnJjeCLHV_7msGIf1AgVGE,19169
-astroid/const.py,sha256=dcdtuOYk6xd_5K9kLZcijEp93kXYzpb_GrmHBGccs4Q,694
-astroid/constraint.py,sha256=BzI-DMG1Vp3eapvmVjahYEL9VYSRoluGkTscokNUipc,6483
-astroid/context.py,sha256=xseGQ6wscT5eOPiLl7nd6nS7Mfwi3KrQGSScPlBU6h4,6293
-astroid/decorators.py,sha256=aUEm2t4UM31X8vpGi5BJb3jOcK44LtZQRUl9H1Dlqh4,8531
-astroid/exceptions.py,sha256=9OrH8LliIRyv85CQEmm0br0R0XWuRJ74tmIDAv2QR_s,12935
-astroid/filter_statements.py,sha256=CJRqKTLsspIfHlLjHQsEpfLjscjPoOtLWdLuVhb7OoM,9451
-astroid/helpers.py,sha256=7r3xj2r2DriL9J8IbuIlmim-T7aC1Jog7GbJ8R6TM7U,11819
-astroid/inference_tip.py,sha256=5Dsfn-9qie1Wuzc2XaWzhlPQQxD3fGt64RR3nyptvHc,4586
-astroid/interpreter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-astroid/interpreter/__pycache__/__init__.cpython-312.pyc,,
-astroid/interpreter/__pycache__/dunder_lookup.cpython-312.pyc,,
-astroid/interpreter/__pycache__/objectmodel.cpython-312.pyc,,
-astroid/interpreter/_import/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-astroid/interpreter/_import/__pycache__/__init__.cpython-312.pyc,,
-astroid/interpreter/_import/__pycache__/spec.cpython-312.pyc,,
-astroid/interpreter/_import/__pycache__/util.cpython-312.pyc,,
-astroid/interpreter/_import/spec.py,sha256=uVQdyJ7OTJzTM50EVmyXmN2bMUR_D-EXI36CC-NTPBU,17613
-astroid/interpreter/_import/util.py,sha256=Nz-w2jJZ-XPo2R_K8De6lhDO3aIB1A4LMFiUyDZCQnQ,4738
-astroid/interpreter/dunder_lookup.py,sha256=miAYo7UTVOhfMYpo44qdV3WJEk1P__JVTGWGPtT1wnk,2487
-astroid/interpreter/objectmodel.py,sha256=gP8LsWsw3uzXWh4QhecNom27Q8N7MKN4ipGMg_abSuo,34180
-astroid/manager.py,sha256=adI6Dc8b0HqScUoGet-FzV90CHguHpJ-s2Ne-fwgdOM,18331
-astroid/modutils.py,sha256=KAyhpORelvLrHnAVoiX5HDhDnMCuAHhoqaox2E6rSdw,23458
-astroid/nodes/__init__.py,sha256=X6V4GWkgUL8AuqfzK_Ns7jpCM_RK14UMyY8KMhEqZ8o,4862
-astroid/nodes/__pycache__/__init__.cpython-312.pyc,,
-astroid/nodes/__pycache__/_base_nodes.cpython-312.pyc,,
-astroid/nodes/__pycache__/as_string.cpython-312.pyc,,
-astroid/nodes/__pycache__/const.cpython-312.pyc,,
-astroid/nodes/__pycache__/node_classes.cpython-312.pyc,,
-astroid/nodes/__pycache__/node_ng.cpython-312.pyc,,
-astroid/nodes/__pycache__/utils.cpython-312.pyc,,
-astroid/nodes/_base_nodes.py,sha256=IY3vZ4vEvsAepGTvrPf7zm11BPTlRQUndzyT9CmEsZ8,23927
-astroid/nodes/as_string.py,sha256=ap_dHTQTE9xyxb6GndRrd4TS4xdfhDadCW0NcGmktqQ,29106
-astroid/nodes/const.py,sha256=aD7rKF5kPM2UFJAR5pzZDAM-Zm7p9LG57E-9FjB1gTc,807
-astroid/nodes/node_classes.py,sha256=yvq9Bv6QEVXKOMJbso8gZpSlgFpN_7whoXuiBUPMrCI,177555
-astroid/nodes/node_ng.py,sha256=SzcLmkZiuv2Pk4q6iPSfokPRdGaM9VqPLQqrJCaCKOE,26435
-astroid/nodes/scoped_nodes/__init__.py,sha256=YXf0Sc8m3HlzbG9IGtX2aHTSGbG4nHfxl9_kY_QLs1g,1271
-astroid/nodes/scoped_nodes/__pycache__/__init__.cpython-312.pyc,,
-astroid/nodes/scoped_nodes/__pycache__/mixin.cpython-312.pyc,,
-astroid/nodes/scoped_nodes/__pycache__/scoped_nodes.cpython-312.pyc,,
-astroid/nodes/scoped_nodes/__pycache__/utils.cpython-312.pyc,,
-astroid/nodes/scoped_nodes/mixin.py,sha256=DlmZuUZFDM7NTsxhns7AMr8wGV5NhDpbAo4eEFx8oKk,7236
-astroid/nodes/scoped_nodes/scoped_nodes.py,sha256=Zvk6rT8Di1_xAESuCQYxOBjG8SIgYx9ZNGMQvHRNLmA,100784
-astroid/nodes/scoped_nodes/utils.py,sha256=rBKL_c6byvOWq7yzRSMNWsZQIe5smST8Dnpz40Nni7Q,1181
-astroid/nodes/utils.py,sha256=5strAqVk0zh9cOD4nH8EZiIsaDn5-gLIT2U1hAoY9wU,433
-astroid/objects.py,sha256=laugKuXgvZlyU8ZGg80VfbCwVKO1piPIIq2fk3Ywf5o,12762
-astroid/protocols.py,sha256=tMR8XAboNiDOqlbdfoxjU66TNl0AD3OJ0Yll2zqCnsg,32562
-astroid/raw_building.py,sha256=hohV5ukMBC2xYJ9ehc6_QV3sop3i0YRkUY-hb6ckumg,25307
-astroid/rebuilder.py,sha256=Jv3xq3M2jdrJS1Y9n0wvYJbHB2ly9-UbXE2pelBbQsw,71520
-astroid/test_utils.py,sha256=gyLSvyMM7QfsfqZhmVW6nM1whn1ArMWTsiHi8_Jy060,2474
-astroid/transforms.py,sha256=AARfSAiYVQ6Ale33UOEkn0n-QjAgJ9xI3HZenReFisA,5946
-astroid/typing.py,sha256=fYk-NAnlC7_prv9jvfnXcL32278yJ65x-qimK32tW_o,2807
-astroid/util.py,sha256=H0hAr2TTxsK97137v9gp59-JmuCMWABmmI_0UOOM9N0,4846
diff --git a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/WHEEL b/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/WHEEL
deleted file mode 100644
index c0f0388..0000000
--- a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/WHEEL
+++ /dev/null
@@ -1,5 +0,0 @@
-Wheel-Version: 1.0
-Generator: setuptools (81.0.0)
-Root-Is-Purelib: true
-Tag: py3-none-any
-
diff --git a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/licenses/CONTRIBUTORS.txt b/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/licenses/CONTRIBUTORS.txt
deleted file mode 100644
index 67068c0..0000000
--- a/venv/lib/python3.12/site-packages/astroid-4.0.4.dist-info/licenses/CONTRIBUTORS.txt
+++ /dev/null
@@ -1,226 +0,0 @@
-# This file is autocompleted by 'contributors-txt',
-# using the configuration in 'script/.contributors_aliases.json'.
-# Do not add new persons manually and only add information without
-# using '-' as the line first character.
-# Please verify that your change are stable if you modify manually.
-
-Ex-maintainers
---------------
-- Claudiu Popa
-- Sylvain Thénault
-- Torsten Marek
-
-
-Maintainers
------------
-- Pierre Sassoulas
-- Daniël van Noord <13665637+DanielNoord@users.noreply.github.com>
-- Jacob Walls
-- Marc Mueller <30130371+cdce8p@users.noreply.github.com>
-- Hippo91
-- Bryce Guinta
-- Ceridwen
-- Mark Byrne <31762852+mbyrnepr2@users.noreply.github.com>
-- Łukasz Rogalski
-- Florian Bruhin
-- Ashley Whetter
-- Dimitri Prybysh
-- Areveny
-
-
-Contributors
-------------
-- Emile Anclin
-- Nick Drozd
-- correctmost <134317971+correctmost@users.noreply.github.com>
-- Andrew Haigh
-- Julien Cristau
-- Artem Yurchenko <44875844+temyurchenko@users.noreply.github.com>
-- David Liu
-- Alexandre Fayolle
-- Eevee (Alex Munroe)
-- David Gilman
-- Tushar Sadhwani
-- Matus Valo
-- Julien Jehannet
-- Hugo van Kemenade
-- Calen Pennington
-- Antonio
-- Akhil Kamat
-- Zen Lee <53538590+zenlyj@users.noreply.github.com>
-- Tim Martin
-- Phil Schaf
-- Alex Hall
-- Raphael Gaschignard
-- Radosław Ganczarek
-- Paligot Gérard
-- Ioana Tagirta
-- Eric Vergnaud
-- Derek Gustafson
-- David Shea
-- Daniel Harding
-- Christian Clauss
-- Ville Skyttä
-- Synrom <30272537+Synrom@users.noreply.github.com>
-- Rene Zhang
-- Philip Lorenz
-- Nicolas Chauvat
-- Michael K
-- Mario Corchero
-- Marien Zwart
-- Laura Médioni
-- James Addison <55152140+jayaddison@users.noreply.github.com>
-- FELD Boris
-- Enji Cooper
-- Dani Alcala <112832187+clavedeluna@users.noreply.github.com>
-- Adrien Di Mascio
-- tristanlatr <19967168+tristanlatr@users.noreply.github.com>
-- grayjk
-- emile@crater.logilab.fr
-- doranid
-- brendanator
-- Tomas Gavenciak
-- Tim Paine
-- Thomas Hisch
-- Stefan Scherfke
-- Sergei Lebedev <185856+superbobry@users.noreply.github.com>
-- Saugat Pachhai (सौगात)
-- Robert Hofer <1058012+hofrob@users.noreply.github.com>
-- Ram Rachum
-- Pierre-Yves David
-- Peter Pentchev
-- Peter Kolbus
-- Omer Katz
-- Moises Lopez
-- Mitch Harding
-- Michal Vasilek
-- Keichi Takahashi
-- Kavins Singh
-- Karthikeyan Singaravelan
-- Joshua Cannon
-- John Vandenberg
-- Jacob Bogdanov
-- Google, Inc.
-- Emmanuel Ferdman
-- David Euresti
-- David Douard
-- David Cain
-- Anthony Truchet
-- Anthony Sottile
-- Alexander Shadchin
-- wgehalo
-- tejaschauhan36912 <59693377+tejaschauhan36912@users.noreply.github.com>
-- rr-
-- raylu
-- plucury
-- pavan-msys <149513767+pavan-msys@users.noreply.github.com>
-- ostr00000
-- noah-weingarden <33741795+noah-weingarden@users.noreply.github.com>
-- nathannaveen <42319948+nathannaveen@users.noreply.github.com>
-- mathieui
-- markmcclain
-- ioanatia
-- alm
-- adam-grant-hendry <59346180+adam-grant-hendry@users.noreply.github.com>
-- aatle <168398276+aatle@users.noreply.github.com>
-- Zbigniew Jędrzejewski-Szmek
-- Zac Hatfield-Dodds
-- Vilnis Termanis
-- Valentin Valls
-- Uilian Ries
-- Tomas Novak
-- Thirumal Venkat
-- SupImDos <62866982+SupImDos@users.noreply.github.com>
-- Stéphane Brunner
-- Stanislav Levin
-- Simon Hewitt
-- Serhiy Storchaka
-- Roy Wright
-- Robin Jarry
-- René Fritze <47802+renefritze@users.noreply.github.com>
-- Redoubts
-- Philipp Hörist
-- Peter de Blanc
-- Peter Talley
-- Ovidiu Sabou
-- Oleh Prypin
-- Nicolas Noirbent
-- Neil Girdhar
-- Miro Hrončok
-- Michał Masłowski
-- Mateusz Bysiek
-- Matej Aleksandrov
-- Marcelo Trylesinski
-- Leandro T. C. Melo
-- Konrad Weihmann
-- Kian Meng, Ang
-- Kai Mueller <15907922+kasium@users.noreply.github.com>
-- Jörg Thalheim
-- Jérome Perrin
-- JulianJvn <128477611+JulianJvn@users.noreply.github.com>
-- Josef Kemetmüller
-- Jonathan Striebel
-- John Belmonte
-- Jeff Widman
-- Jeff Quast
-- Jarrad Hope
-- Jared Garst
-- Jamie Scott
-- Jakub Wilk
-- Iva Miholic
-- Ionel Maries Cristian
-- HoverHell
-- Hashem Nasarat
-- HQupgradeHQ <18361586+HQupgradeHQ@users.noreply.github.com>
-- Gwyn Ciesla
-- Grygorii Iermolenko
-- Gregory P. Smith
-- Giuseppe Scrivano
-- Frédéric Chapoton
-- Francis Charette Migneault
-- Felix Mölder
-- Federico Bond